Web进阶漏洞-SSRF服务器端请求伪造

  • Post author:
  • Post category:其他



ssrf(server—side request forgery)服务器端请求伪造定义:利用漏洞伪造服务发起请求,从而突破客户端获取不到数据的限制。


SSRF漏洞产生环节:目标网站接受请求后在服务器端验证请求是否合法。


服务器端的验证并没有对其请求获取图片的参数(image=)做出严格的过滤以及限制,导致可以从其他服务器获取一定量的数据。

比如我们请求www.xxx.com/a.php?image=1.jpg

可以改为:www.xxx.com/a.php?image=www.abc.com/1.jpg

这样就形成了SSRF 没有对用户的输入做严格的限制,且服务器端提供了从其他服务器应用获取数据的功能。


代码审计层面:


file_get_content() 从用户指定的url获取图片,用一个随机的文件名保存在硬盘上,展示给用户。

curl 使用curl获取数据并保存

fsockopen() 实现用户指定url的数据(文件或html),这个函数使用socket与服务器建立tcp连接,传输原始数据。

还有一些java常用的函数。


防护方法:


添加白名单

或者指定下载


漏洞利用方法:

首先介绍一下常用协议:

https:主要用于探测内网服务,根据响应的状态判断内网端口及服务。

dict:词典网络协议,在RFC 2009中进行描述,允许客户端在使用过程中访问更多的字典。

file:主要用于访问本地计算机中的文件

ftp:可以从一台计算机将文件传送到另一台计算机

gopher:协议支持发出GRT,POST请求

本地利用:

操作Redis

curl -vvv ‘dict://127.0.0.1:6379/info

远程利用:

#利用file协议进行文件读取

curl -v ‘http://xxx.com:8082/xxx/sstrf.php?url=file:///etc/passwd’

#利用dict协议查看端口

curl -v ‘http://xxx.com:8082/xxx/sstrf.php?url=dict://127.0.0.1:22’

#利用gopher协议反弹shell


bypass技巧:

  1. 添加@符号 http://baidu.com@www.baidu.com/与http://www.baidu.com/请求时是相同的
  2. 各种IP地址的进制转换(依然可以解析) 115.239.210.26=16373751032
  3. URL跳转绕过 http://www.hack.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

    (指向任意ip的域名:xip.io(37signals开发实现的定制DNS服务)
  6. 限制了子网段,可以加端口(例如80绕过)
  7. 探测内网域名,或者将自己的域名解析到内网ip


漏洞主要存在于以下几个功能

分享:通过url地址分享网页的内容

转码服务:通过url地址把源地址的网页内容调优使其适合手机屏幕浏览

在线翻译:通过url地址翻译对应的文本内容

图片加载与下载:通过URL地址加载或者下载图片

图片,文章收藏功能

未公开的api实现以及其他调用url的功能

网站采集,网站抓取的地方:一些网站会针对你输入的url进行一些信息采集工作

url中关键字

share,wap,url,link,src,source,target,u,3g,display,sourceURL,imageURL,domai



版权声明:本文为qq_43497161原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。