认识docker+LNMP架构

目录

一、docker

1.安装,启动

2.docker相关命令

3.如何使用?

二、LNMP

1.认识LNMP

2.sql注入漏洞挖掘

3.如何绕过检测进行注入


一、docker

1.安装,启动

2.docker相关命令

docker search nginx  搜索镜像
docker pull docker.io/nginx  拉取镜像
docker images -a  列出本地所有的镜像
docker ps -a  列出所有的容器
docker exec  容器ID进到容器内
docker run [OPTIONS] IMAGE根据镜像新建并启动容器。IMAGE是镜像ID或镜像名称
OPTIONS说明:
--name="容器新名字":为容器指定一个名称
-d:后台运行容器,并返回容器ID,也即启动守护式容器
-i:以交互模式运行容器,通常与-t同时使用
-t:为容器重新分配一个伪输入终端,通常与-i同时使用
-p:随机端口映射

3.如何使用?

如何使用docker进行安装nginx???

二、LNMP

1.认识LNMP

Linux+nginx+MySQL+PHP

2.sql注入漏洞挖掘

<?php
escape($_REQUEST);
escape($_POST);
escape($_GET);

function escape(&$arg) {
    if(is_array($arg)) {
        foreach ($arg as &$value) {
            escape($value);
        }
    } else {
        $arg = str_replace(["'", '\\', '(', ')'], ["'", '\\\\', '(', ')'], $arg);
    }
}

function arg($name, $default = null, $trim = false) {
    if (isset($_REQUEST[$name])) {
        $arg = $_REQUEST[$name];
    } elseif (isset($_SERVER[$name])) {
        $arg = $_SERVER[$name];
    } else {
        $arg = $default;
    }
    if($trim) {
        $arg = trim($arg);
    }
    return $arg;
}

注意:arg是获取用户输入的$_REQUEST$_SERVER。

<?php
function actionRegister(){
    if ($_POST) {
        $username = arg('username');
        $password = arg('password');

        if (empty($username) || empty($password)) {
            $this->error('Username or password is empty.');
        }

        $email = arg('email');
        if (empty($email)) {
            $email = $username . '@' . arg('HTTP_HOST');
        }

        if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $this->error('Email error.');
        }

        $user = new User();
        $data = $user->query("SELECT * FROM `{$user->table_name}` WHERE `username` = '{$username}'");
        if ($data) {
            $this->error('This username is exists.');
        }

        $ret = $user->create([
            'username' => $username,
            'password' => md5($password),
            'email' => $email
        ]);
        if ($ret) {
            $_SESSION['user_id'] = $user->lastInsertId();
        } else {
            $this->error('Unknown error.');
        }
    }

}

以上是注册功能的代码,在登录时进行用户名和密码的填写,然后将三者传入到create方法。还有该网站的域名从arg('HTTP_HOST')获取,在往上一层就是从$_REQUEST$_SERVER中获取。

此时会出现一个SQL注入漏洞???

因为$_SERVER没有经过转义,只需要在HTTP头Host值中引入单引号,即可造成一个SQL注入漏洞。

3.如何绕过检测进行注入

同时该代码中还有一次检测,filter_var($email, FILTER_VALIDATE_EMAIL),所以在进行注入时要绕过。如何绕过呢???

(1)将特殊字符用\转义,如Joe\'Blow@example.com

(2)或将local part包裹在双引号中,如"Joe'Blow"@example.com

(3)local part长度不超过64个字符

为什么???这个邮箱包含单引号,将闭合SQL语句中原本的单引号,造成SQL注入漏洞。

以上为docker和lnmp相关介绍,不够全面后期进一步完善。

相关推荐
写bug的小屁孩几秒前
前后端交互接口(三)
运维·服务器·数据库·windows·用户界面·qt6.3
斑布斑布几秒前
【linux学习2】linux基本命令行操作总结
linux·运维·服务器·学习
紅色彼岸花7 分钟前
第六章:DNS域名解析服务器
运维·服务器
✿ ༺ ོIT技术༻12 分钟前
Linux:认识文件系统
linux·运维·服务器
会掉头发40 分钟前
Linux进程通信之共享内存
linux·运维·共享内存·进程通信
我言秋日胜春朝★42 分钟前
【Linux】冯诺依曼体系、再谈操作系统
linux·运维·服务器
全能全知者1 小时前
docker快速安装与配置mongoDB
mongodb·docker·容器
饮啦冰美式1 小时前
22.04Ubuntu---ROS2使用rclcpp编写节点
linux·运维·ubuntu
wowocpp1 小时前
ubuntu 22.04 server 安装 和 初始化 LTS
linux·运维·ubuntu
Lign173141 小时前
ubuntu unrar解压 中文文件名异常问题解决
linux·运维·ubuntu