ssrf漏洞
漏洞原理
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。
很多Web应用都提供了从其他服务器上获取数据的功能。使用用户指定的URL,Web应用可以获取图片,下载文件,读取文件内容等。这个功能如果被恶意使用,可以利用存在缺陷的web应用作为代理攻击远程和本地服务器。
ssrf作用
端口扫描
内网web应用 指纹识别
攻击内网web应用
读文件
下载内网资源
绕过cdn
HTTP CRLF注入getshell
redis未授权getshell
mysql空口令
漏洞验证
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.dict
?url=dict://127.0.0.1:3306
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vj1BsV3U-1618209540599)(C:\Users\lanla\AppData\Roaming\Typora\typora-user-images\image-20210126124219097.png)]
2.file
?url=file://d:\ssrf.txt
3.http
?url=http://www.baidu.com/rebots.txt
4.gopher
gopher协议:通过GOPHER我们在一个URL参数中构造Post或者Get请求,从而达到攻击内网应用的目的。例如我们可以使用GOPHER协议对与内网的Redis服务进行攻。
基本协议格式:
URL:gopher://<host>:<port>/<gopher-path>
_后接TCP数据流
具体攻击在ssrf-gopher攻击
5.指纹识别
识别内网应用,框架,平台,cms。可以读取一些特殊文件
比如
?url=http://localhost/pypmyadmin/README
6.攻击web框架
通过get方式 比如stryts2命令执行。
绕过SSRF过滤的几种方法
1、更改IP地址写法
因为可能通过过滤掉内网IP的方式。
可以通过进制绕过:
192.168.0.1的各种进制
(1)、8进制格式:0300.0250.0.1
(2)、16进制格式:0xC0.0xA8.0.1
(3)、10进制整数格式:3232235521
(4)、16进制整数格式:0xC0A80001
2、利用解析URL所出现的问题
在某些情况下,后端程序可能会对访问的URL进行解析,对解析出来的host地址进行过滤。这时候可能会出现对URL参数解析不当,导致可以绕过过滤。
http://www.baidu.com@192.168.0.1/
当后端程序通过不正确的正则表达式(比如将http之后到com为止的字符内容,也就是www.baidu.com,认为是访问请求的host地址时)对上述URL的内容进行解析的时候,很有可能会认为访问URL的host为www.baidu.com,而实际上这个URL所请求的内容都是192.168.0.1上的内容。
3、短网址绕过
4、xip.io来绕过:
http://xxx.192.168.0.1.xip.io/ == 192.168.0.1 (xxx 任意)
指向任意ip的域名:xip.io(37signals开发实现的定制DNS服务)
5、限制了子网段,可以加 :80 端口绕过。
?url=http://1.1.1.1:80
6、探测内网域名,或者将自己的域名解析到内网ip
在域名上设置A记录,指向127.0.1
7、利用[::]
利用[::]绕过localhost
http://[::]:80/ >>> http://127.0.0.1
http://0000::1:80/
ssrf挖掘点
存在SSRF
漏洞利用协议,分别是http、file、gopher、dict
协议
file
协议进行本地文件的读取
http
协议进行内网的ip扫描、端口探测
探测到6379
端口开放,可以利用http、gopher、dict
这几个协议来打开放6379
端口的redis
服务。
通过URL地址分享网页内容
早期应用中,为了更好的用户体验,Web应用在分享功能中,通常会获取目标URL地址网页内容中
转码服务
转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览
在线翻译
在线翻译:通过 URL地址翻译对应文本的内容。提供此功能的百度、有道等。
百度翻译翻译ip138.com网页会直接查询出一个IP
图片加载与下载
通过 URL地址加载或下载图片
图片加载远程图片地址此功能用到的地方很多,但大多都是比较隐秘,比如在有些公司中的加载自家图片服务器上的图片用于展示。(此处可能会有人有疑问,为什么加载图片服务器上的图片也会有问题,直接使用img标签不就好了,没错是这样,但是开发者为了有更好的用户体验通常对图片做些微小调整例如加水印、压缩等,所以就可能造成SSRF问题)。
远程加载头像
从url挖掘
Share、wap、url、link、src、source、target、u、3g、display、sourceURL、imageURL、domain
CMS挖掘
• Wordpress3.5.1以下版本 xmlrpc.php pingback的缺陷与ssrf
• Weblogic配置不当,天生ssrf漏洞
• Discuz x2.5/x3.0/x3.1/x3.2 ssrf漏洞