关于SSRF的一些知识点

PS:之前整理的十大安全风险里没有SSRF,只有CSRF,所以整理和写一下知识点,用来充实自己,以防不时之需。

SSRF(Server-Side Request Forgery),服务端请求伪造。

一、定义

        攻击利用了可访问Web服务器(A)的特定功能构造恶意payload;攻击者在访问A时,利用A的特定功能构造特殊payload,由A发起对内部网络中系统B(内网隔离,外部不可访问)的请求,从而获取敏感信息。此时A被作为中间人(跳板)进行利用。

二、原理(原因)

        SSRF漏洞原因,主要是由于服务端提供了从其他服务器获取数据的功能,但并未对目标地址进行过滤和校验。在大部分的web服务器架构中,web服务器自身都可以访问互联网和服务器所在的内网。

三、漏洞的利用

     简而言之就是该漏洞可以干什么

     1.内网探测

        (1).可以对外网服务器所在的内网、本地进行端口扫描(判断内网主机是否存活),获取一些服务的banner信息 。

        (2).对内网web应用进行指纹识别,通过访问默认文件实现。

     2.内网应用攻击

        (1).攻击运行在内网或者本地的应用程序(利用跨协议通信技术)。

     3.攻击内外网的web应用。sql注入、struct2、redis等(可以向内部任意主机的任意端口发送精心构造的数据包{payload})。

     4.文件读取

       利用file协议读取本地文件等。

     5.DoS攻击(请求大文件,始终保持连接keep-alive always)。

四、漏洞查找

     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、sourceURl、imageURL、domain……

     12.从远程服务器请求资源(upload from url 如discuz!;import & expost rss feed 如web blog;使用了xml引擎对象的地方 如wordpress xmlrpc.php)

五、存在过滤时绕过

     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.优先考虑白名单方式验证,过滤应用需要的域名及IP。白名单不能满足需求时考虑黑名单方式,例如禁止请求私有IP地址。黑名单容易存在过滤不全的问题。(使用gethostbyname()判断是否为内网IP)

     5.限制请求的端口为http常用的端口,比如 80、443、8080、8090

     6.统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。

 

 

 

 

 

笔记内容参考整理自:

1. https://blog.csdn.net/qq_37133717/article/details/94647789

2. https://xz.aliyun.com/t/2115

3. https://blog.csdn.net/lanyef/article/details/102656077

 

posted @ 2020-03-10 00:23  幸运的大E  阅读(558)  评论(0编辑  收藏  举报