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

相关推荐
骇客野人6 小时前
Redis 完整安装部署方案(Linux,分【源码编译】+【Docker】两种,推荐生产用源码,测试快速用 Docker)
运维
九皇叔叔9 小时前
Kubernetes 资源管理方式详解:命令式与声明式管理
docker·容器·k8s
蓝速科技9 小时前
会议室门牌公告通知发布选型与落地指南丨蓝速科技
大数据·运维·数据库·人工智能·科技
chicheese10 小时前
Linux 面试速查表:从初级到高级,附高频场景答题模板
linux·运维
Linux-lucky10 小时前
32-38-Linux学习之旅之MySQL综合
linux·运维·学习·mysql·ubuntu
智能运维指南11 小时前
2026年ITSM系统怎么选?四款主流方案与五维评估模型
运维·itsm·嘉为蓝鲸
我命由我1234511 小时前
Git 推送报错:error: src refspec main does not match any
运维·git·gitee·github·运维开发·学习方法·版本控制
骇客野人11 小时前
测试环境MySQL迁移Vastbase(海量数据库)完整改造与落地实施方案
运维·服务器
迪康Defender12 小时前
终端安全实战:如何高效解决企业U盘泄密与管控难题
运维·网络·安全·web安全·终端安全管理
zly350012 小时前
VMware Converter Standalone 物理机转化为虚拟机后源1硬盘变成了2个硬盘(2个硬盘文件)虚拟机无法启动。
linux·运维·服务器