转载自:了解SSRF,这一篇就足够了
SSRF(Server-side Request Forgery 服务端请求伪造)
- 攻击原理:通过使用用户指定的URL,Web应用可以获取图片,下载文件,读取文件内容等。这个功能如果被恶意利用,可以利用存在缺陷的web服务器作为代理,攻击远程或本地服务器。
- 攻击目标:由外部网络无法访问的内网。因为它是由服务端发起的,所以它能够请求到与它相连但与外网隔离的内部系统
- 攻击来源:Web应用提供的从其他服务器(攻击者的服务器)获取数据的功能,且没有对目标地址做过滤与限制。。
- 1、社交分享功能:获取超链接的标题等内容进行显示
- 2、转码服务:通过URL地址吧原地址的页面内容调优使其适合手机屏幕浏览
- 3、在线翻译:给网址翻译对应网页的内容
- 4、图片加载/下载:例如富文本编辑器中的点击下载图片到本地;通过URL地址加载或下载图片
- 5、图片/文章收藏功能:主要其会取URL地址中的title以及文本的内容作为显示以求一个好的用户体验
- 6、云服务厂商:它会远程执行一些命令来判断是否存活等,所以如果可以捕获相应的信息,就可以进行ssrf测试
- 7、网站采集,网站抓取的地方:一些网站会针对你输入的url进行一些信息采集工作
- 8、数据库内置功能:数据库的比如mongodb的copyDatabase函数
- 9、邮件系统:比如接受邮件服务器地址
- 10、编码处理:属性信息处理,文件处理:比如ffpmg,ImageMagick,docx,pdf,xml处理器等
- 11、未公开的api实现以及其它拓展调用URL的功能:可以利用google语法加上这些关键字去寻找ssrf漏洞,一些url中的关键字:
share、wap、url、link、src、source、target、u、3g、display、sourceURI、imageURL、domain
- 12、从远程服务器请求资源(upload from url 如discuz! ; import & expost rss feed 如 web blog;使用了xml引擎对象的地方 如 wordpress xmlrpc.php)
- 漏洞排查:
- 1、排除法:浏览器f12查看源代码看是否在本地进行了请求
- 比如:该资源地址类型为:
http://www.xxx.com/a.php?image=(地址)
就可能存在SSRF漏洞
- 比如:该资源地址类型为:
- 2、dnslog等工具进行测试,看是否被访问
- 可以在盲打后台用例中将当前准备请求的uri和参数编码成base64,这样盲打后台解码后就知道是哪台机器哪个cgi触发的请求。
- 3、抓包分析发送的请求是不是有服务器发送的,如果不是客户端发出的请求,则有可能是,接着找存在HTTP服务的内网地址
- 从漏洞平台中的历史漏洞寻找泄露的存在web应用的内网地址
- 通过二级域名暴力猜解工具模糊猜测内网地址
- 4、直接返回的Banner、title、content等信息
- 5、留意bool型SSRF
- 1、排除法:浏览器f12查看源代码看是否在本地进行了请求
- 利用方式:
- 1、让服务端去访问相应的网址
- 2、让服务端去访问自己所处内网的一些指纹文件来判断是否存在相应的cms
- 3、可以使用file、dict、gopher[1]、ftp协议进行请求访问相应的文件
- 4、攻击内网web应用(可以向内部任意主机的任意端口发送精心构造的数据包{payload})
- 5、攻击内网应用程序(利用跨协议通信技术)
- 6、判断内网主机是否存活:方法是访问看是否有端口开放
- 7、Dos攻击(请求大文件,始终保持连接keep-alive always)
- 漏洞示例:
- 1、Wordpress3.5.1一下版本 xmlrpc.php pingback的缺陷与ssrf
- 2、discuz! 的ssrf(利用php的header函数来绕过,其实就是302跳转实现协议转换)
- 3、weblogic的ssrf
- 绕过技巧:
- 更详细的SSRF绕过方式总结 [2]
- 1、
http://baidu.com@www.baidu.com/
与http://www.baidu.com
请求是相同的 - 2、各种IP地址的进制转换
- 3、URL跳转绕过:
http://www.hackersb.cn/redirect.php?url=http://192.168.0.1/
- 4、短网址绕过:
http://t.cn/RwbLKDx
- 5、xip.io来绕过:
http://xxx.192.168.0.1.xip.io/
等同于192.168.0.1(xxx表示任意)
- 指向任意ip的域名:xip.io(37signals开发实现的定制DNS服务)
- 6、限制了子网段,可以加 :80端口绕过
http://tieba.baidu.com/f/commit/share/openShareApi?url=http://10.42.7.78:80
- 7、探测内网域名,或者将自己的域名解析到内网ip
- 8、例如:
http://10.153.138.81/ts.php
修复时容易出现的获取host时以/分割来确定host,但这样可以用http://abc@10.153.138.81/
绕过
- 防御手段/漏洞修复:
- 1、禁止跳转
- 2、过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果是web应用是去获取某一种类型的文件。那么再把返回结果展示给用户之前先验证返回的信息是否符合标准。
- 3、禁用不需要的协议,仅仅允许http和https请求。可以防止类似于
file://
、gopher://
、ftp://
等引起的问题 - 4、设置URL白名单或限制内网IP(使用gethostbyname()判断是否为内网IP)
- 5、限制请求的端口为http常用的端口,比如:80、443、8080、8090
- 6、统一错误信息,避免用户可以根据错误信息来判断元端服务器的端口装填。
- 补充:除了 http/https 等方式可以造成ssrf,类似tcp connect 方式也可以探测内网一些ip 的端口是否开放服务,只不过危害比较小而已。
- 参考链接资料:
- [1] 利用gopher协议拓展攻击面
- [2] SSRF绕过方法总结
- [3] SSRF(原理&利用&绕过)
- [4] 浅谈SSRF漏洞
- [5] SSRF攻击实例解析 freebuf上的一篇13年的文章,没有实体环境的可以通过这篇文章看看,简单的了解一下过程。
- 这篇文章转载自安全学习网站 FREEBUF 上的一篇文章(开头提到的),这里只能帮你简单了解 SSRF攻击 ,想要更深入的了解的话需要更多的内容,并且结合靶场的实际使用去体验才能真正掌握,如果我后续有进行相关实验会将内容更新到另一篇博客。
- 有任何问题欢迎评论区留言,上文若是信息有误,评论区随便吐槽,看必回!😁