web基础漏洞学习-SSRF漏洞

SSRF漏洞学习

文章目录

  • SSRF漏洞学习
    • 一、定义以及成因
    • 二、漏洞可能出现的地方
    • 三、漏洞验证
    • 四、利用的方式
    • 五、绕过和防御
    • 六、漏洞实例

一、定义以及成因

定义:

SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。攻击的目标是内网。

成因:

服务器端提供了从其他服务器获取数据的功能却没有对目标地址做过滤和限制。

二、漏洞可能出现的地方

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.排除法:浏览器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、使用协议进行请求访问相应的文件

以curl为例子,出现ssrf漏洞的代码ssrf.php


使用curl -V命令查看版本以及该版本支持的协议

一些常用的协议:

  • gopher:该协议支持发出get、post请求,可以先截取get请求包或者post请求包,然后早构造符合gopher协议的请求。gopher协议是ssrf利用中最强大的一个协议。

  • dict:因为ssrf.php的漏洞代码存在回显,所以可以直接用浏览访问

    redis的相关配置:

    http://x.x.x.com/ssrf.php?url=dict://127.0.0.1:6379/info
    

    ssh的banner信息:

    http://x.x.x.com/ssrf.php?url=dict://127.0.0.1:ssh端口/info
    

    如果ssrf.php中加上一行屏蔽回显的代码“curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);”,那么这种方式就失效了,和gopher一样,只能利用nc监听端口,反弹传输数据了。

  • file:因为ssrf.php的漏洞代码有回显,所以浏览器直接访问

    http://4o4notfound.org/ssrf.php?url=file:///etc/passwd
    

    即可看到很多不可描述的东西。同理,如果屏蔽回显,该协议就废了

  • http/s:主要用来探测内网服务。根据响应的状态判断内网端口及服务,可以结合java系列0day和其他各种0day使用

2.让服务端去访问相应的网址

3.让服务端去访问自己所处内网的一些指纹文件来判断是否存在相应的cms

4.攻击内网web应用(可以向内部任意主机的任意端口发送精心构造的数据包{payload})

5.攻击内网应用程序(利用跨协议通信技术)

6.判断内网主机是否存活:方法是访问看是否有端口开放

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

五、绕过和防御

绕过:

1、把ip进行进制的转换

2、url的跳转来绕过

3、将原来的url使用短网址网站转换进行绕过

4、.xip.io绕过:http://xxx.192.168.0.1.xip.io/ == 192.168.0.1 (xxx 任意)

指向任意ip的域名:xip.io(37signals开发实现的定制DNS服务)

5.限制了子网段,可以加 :80 端口绕过。http://tieba.baidu.com/f/commit/share/openShareApi?url=http://10.42.7.78:80

6.探测内网域名,或者将自己的域名解析到内网ip

7.例如 http://10.153.138.81/ts.php , 修复时容易出现的获取host时以/分割来确定host,

但这样可以用 http://[email protected]/ 绕过

防御:

1、限制协议为HTTP、HTTPS

2、进行30x跳转

3、设置白名单或者限制内网IP

六、漏洞实例

weblogic复现:https://editor.csdn.net/md/?articleId=106310193

Rootme_CTF_all_the_day的ssrf(利用gopher协议反弹shell):https://editor.csdn.net/md/?articleId=107602471

参考文章: https://xz.aliyun.com/t/2115

​ http://www.4o4notfound.org/index.php/archives/33/

你可能感兴趣的:(web漏洞学习)