首页 > 技术文章 > 第八节 ssrf服务器端请求伪造

EndlessShw 2021-08-03 17:49 原文

1. 定义

  SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)

  SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。

 

2. 漏洞可能的所在处

  a. 通过url地址分享网页内容

    早期分享应用中,为了更好的提供用户体验,WEB应用在分享功能中,通常会获取目标URL地址网页内容中的<tilte></title>标签或者<meta name=“description” content=“”/>标签中content的文本内容作为显示以提供更好的用户体验

  b. 通过url地址把源地址的网页内容调优使其更适合手机屏幕浏览

    由于手机屏幕大小的关系,直接浏览网页内容的时候会造成许多不便,因此有些公司提供了转码功能,把网页内容通过相关手段转为适合手机屏幕浏览的样式。例如百度、腾讯、搜狗等公司都有提供在线转码服务。

  c. 在线翻译,通过url地址翻译对应文本的内容。提供此功能的国内公司有百度、有道等等

  d. 图片加载和下载:通过url地址加载或下载图片

    图片加载远程图片地址此功能用到的地方很多,但大多都是比较隐秘,比如在有些公司中的加载自家服务器上的图片用于展示。(此处可能会有人有疑问,为什么加载图片服务器上的图片也会有问题,直接使用img标签不就好了? ,没错是这样,但是开发者为了有更好的用户体验通常对图片做些微小调整例如加水印、压缩等,所以就可能造成SSRF问题)。

  e. 图片、文章收藏功能

    此处的图片、文章收藏中的文章收藏就类似于分享功能中获取URL地址中title以及文本的内容作为显示,目的还是为了更好的用户体验,而图片收藏就类似于图片加载。

  f. 未公开的api实现以及其他调用URL的功能

    此处类似的功能有360提供的网站评分,以及有些网站通过api获取远程地址xml文件来加载内容。

 

3. 一般可能的关键字

  share  wap  url  link  src  source  target  u  3g  display  sourceURL  imageURL  domain...

 

4. 判断是否有漏洞的方法

  a. 排除法:

    新建标签页打开图片,如果类似/img/bd_logo1.png,这样的路径就没有。如果有参数,比如?img=...那么再接着将内容改成http://127.0.0.1/服务器端的一张图片。如果能正确显示,说明存在ssrf漏洞

  b. burpsuite抓包

    使用burpsuite等抓包工具来判断是否是SSRF,首先SSRF是由服务端发起的请求,因此在加载图片的时候,是由服务端发起的,所以在我们本地浏览器的请求中就不应该存在图片的请求。若刷新页面,有如下请求,则可判断不 是SSRF。

 

 

   c. 通过远程vps端口监听

    通过nc监听vps本地端口,然后再url中填写地址的地方填入vps地址:端口, 然后查看nc获取到的请求信息判断是否存在ssrf漏洞,如下则是weblogic存在 ssrf漏洞的验证信息:

 

 

 

5. 漏洞用途

  1. 利用扫描内部网络

    比如扫描内网c段的ip和端口,用ssrf.py(记得更改里面的服务器地址和参数)或者burpsuite

  2. 攻击内部网络

  3. 识别内部系统

  4. 读取本地文件

    利用伪协议读取,比如file,dict,gopher,ftp

 

6. 一些绕过技巧

   注:参考[8]会有更详细的绕过方式总结

  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/ 绕过

 

推荐阅读