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