认识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相关介绍,不够全面后期进一步完善。

相关推荐
Lovyk3 分钟前
Linux Shell 常用操作与脚本示例详解
linux·运维·服务器
iCan_qi38 分钟前
【Mac】【Minecraft】关于如何在Mac上搭建基岩版MC服务器的方法
运维·服务器·macos·minecraft
JohnYan2 小时前
工作笔记 - CentOS7环境运行Bun应用
javascript·后端·容器
ezreal_pan3 小时前
Kubernetes 负载均衡现象解析:为何同一批次请求集中于单个 Pod
运维·云原生·k8s·traefik
朱皮皮呀3 小时前
Spring Cloud——服务注册与服务发现原理与实现
运维·spring cloud·eureka·服务发现·php
科大饭桶3 小时前
C++入门自学Day14-- Stack和Queue的自实现(适配器)
c语言·开发语言·数据结构·c++·容器
云边云科技5 小时前
零售行业新店网络零接触部署场景下,如何选择SDWAN
运维·服务器·网络·人工智能·安全·边缘计算·零售
城管不管5 小时前
Docker核心---数据卷(堵门秘籍)
运维·docker·容器
AOwhisky5 小时前
Linux 文本处理三剑客:awk、grep、sed 完全指南
linux·运维·服务器·网络·云计算·运维开发
xuanerya5 小时前
使用 SSH 方式克隆 GitHub 仓库没有权限解决办法
运维·ssh·github