漏洞原理
SSRF挖掘
SSRF具体利用
SSRF具体验证
SSRF防御与绕过
漏洞原理
这个漏洞允许攻击者去利用服务端的功能,来请求其他网络资源
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是指攻击者能够从易受攻击的
Web应用程序发送精心设计的请求的对其他网站进行攻击。
一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。
利用一个可以发起网络请求的服务,当做跳板来攻击其它服务
简单来说就是:
A让B帮忙访问C,如果是在B是不知情的情况下呢?
漏洞成因
SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。ssrf是利用存在缺陷的web应用作为代理去攻击远程和本地的服务器。
也就是说,对于为服务器提供服务的其他应用没有对访问进行限制,如果
构造好适当的访问包,那我就有可能利用目标服务对他的其他服务器应用
进行调用。
原理
比如:A网站,是一个所有人都可以访问的外网网站,B网站是一个他们内部的OA网站。
所以,我们普通用户只可以访问A网站,不能访问B网站。但是我们可以通过A网站做中间人,访问B网站,从而达到攻击B网站需求。
正常用户访问网站的流程是:
输入网站URL --> 发送请求–> 服务器接受请求(没有过滤),并处理 -->返回用户
网站有个请求是www.baidu.com/xxx.php?image=www.abc.com/1.png
那么产生SSRF漏洞的环节在哪里呢?
我们让网站a去访问网站b
服务器端的验证并没有对其请求获取图片的参数(image=)做出严格的过滤以及限
制,导致A网站可以从其他服务器的获取数据
如果我们将www.baidu.com/xxx.php?image=www.abc.com/1.png 换为与该服务器相连的内网服务器地址会产生什么效果呢?
例如: www.baidu.com/xxx.php?image=1277.0.0.1/1.png
终极简析:
SSRF漏洞就是通过篡改获取资源的请求发送给服务器,
但是服务器并没有检测这个请求是否合法的,
然后服务器以他的身份来访问其他服务器的资源。
难点就在于怎么获取别人的内网ip,但是有一个点,我们能对当前服务器做一些操作
SSRF形成的原因
PHP中下面函数的使用不当会导致SSRF
file_get_ contents():从我们用户指定url获取内容,然后指定一个文件名去进行保存,并且展示
fsockopen():用户所制定的数据的获取,这个函数主要是使用我们的socket(端口)利用端口去跟我们的服务器建立我们的tcp链接,传输数据
curl_exec():回去执行curl的一个会话,他就会发送请求,并且获取一些相应的数据(curl是一个非常强大的与服务器通信的工具支持多种传输协议与功能)
这些函数可以通过网络协议访问目标服务器上的资源
file_get_ contents函数可以读取本地和远程的文件,支持多种协议,如ftp,http,https还可以读取php源码,
如 php://filter/read=convert.base64-encode/resource=ssrf.php,就可以将后台当前目录下的ssrf.php文件的bs64编码返回
SSRF危害
如果一定要通过后台服务器远程去对用户指定或者预埋在前端的请求的地址进行资源请求则请做好目标地址的过滤,没有处理好的将导致:
1.可以对服务器所在内网、本地进行端口扫描,获取一些服务的信息等
2.目标网站本地敏感数据的读取
3.内外网主机应用程序漏洞的利用
4.内外网Web站点漏洞的利用
SSRF的挖掘
1)分享
一些分享应用中,为了更好的提供用户体验,Web应用在分享功能中,通常会获取目标地址网页内容中的
http://widget.renren.com/*****?resourceUrl=https://www.sobug.com
通过目标URL地址获取了title标签和相关文本内容。而如果在此功能中没有对目标地址的范围做过滤与限制则就存在着SSRF漏洞。
从国内某漏洞提交平台上提交的SSRF漏洞,可以发现包括淘宝、百度、新浪等国内知名公司都曾被发现过分享功能上存在SSRF的漏洞问题。
2)在线翻译
翻译网站替我们访问需要翻译的站点,然后进行翻译,所以当翻译网站没有对输入的地址做任何过滤时,内网就可能被访问到
通过 URL地址翻译对应文本的内容。
3)图片加载与下载
加载远程图片地址此功能用到的地方很多,很大可能造成SSRF问题比如编辑器处,就会有远程文件加载。
某些地方会进行远程加载头像,例如:
http://www.xxxx.com/image?
url=http://www.image.com/1.jpg
4)转码服务:
通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览由于手机屏幕大小的关系,直接浏览网页内容的时候会造成许多不便,这时有些网站就通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览的样式。例如百度、腾讯、搜狗等公司都有提供在线转码服务。
5)未公开的API (应用程序编程接口)
实现以及其他调用URL的功能等此处类似的功能有360提供的网站评分,以及有些网站通过应用程序编程接口获取远程地址文件来加载内容。
SSRF通过远程加载来实现攻击
一切要你输入网址的地方和可以输入ip的地方,都是ssrf的天下。
二、从URL关键字中寻找
在对功能上存在SSRF漏洞中URL地址特征的观察,通过收集,大致有以下关键字
如果利用google 语法加上这些关键字去寻找SSRF漏洞,耐心的验证,现在还是可以找到存在的SSRF漏洞
一切要你输入网址的地方和可以输入ip的地方,都是ssrf的天下。
SSRF漏洞挖掘–总结
1.社交分享功能:获取超链接的标题等内容进行显示
2.转码服务:通过URL地址把原地址的网页内容调优使其适合手机
3.屏幕浏览在线翻译:给网址翻译对应网页的内容
4.图片加载/下载:例如富文本编辑器中的点击下载图片到本地;
5.通过URL地址加载或下载图片云服务厂商:它会远程执行一些命令来判断网站是否存活等,所以如果可以捕获相应的信息,就可以进行ssrf测试
6.编码处理
7.可以利用google 语法加上这些关键字去寻找SSRF漏洞。
从远程服务器请求资源----》找SSRF
SSRF具体利用
http://:探测内网主机存活、端口开放情况
gopher://:发送GET或POST请求;攻击内网应用(可以实现多个数据整合发送,gopher服务器可以将多个数据包捆绑发送到客户端)
dict://:泄露安装软件版本信息,查看端口,操作内网远程访问等
file://:读取本地文件
一.内网访问
使用http协议对内网的Web应用进行访问
?url=http://127.0.0.1/flag.php
CTFhub例题:题目要求访问127.0.0.1的flag.php,直接拼接进行访问即可
得到flag。
二、伪协议读取文件
php伪协议 PHP支持的伪协议
file:// — 访问本地文件系统
http:// — 访问 HTTP(s) 网址
ftp:// — 访问 FTP(s) URLs
php:// — 访问各个输入/输出流(I/O streams)
zlib:// — 压缩流
data:// — 数据(RFC 2397)
glob:// — 查找匹配的文件路径模式
phar:// — PHP 归档
ssh2:// — Secure Shell 2
rar:// — RAR
ogg:// — 音频流
expect:// — 处理交互式的流
尝试读取web目录下的flag.php,web目录下的文件,一般网站的目录都放在
/var/www/html/目录下
?url=file:///var/www/html/flag.php
页面显示???后,查看网页源代码即可看到flag
三、端口扫描
在SSRF中,dict协议与http协议可以用来探测内网主机存活与端口开放情况、和指纹
信息。
?url=dict://127.0.0.1:8000
?url=http://127.0.0.1:8080
03 SSRF具体利用
dict 协议是一个在线网络字典协议,这个协议是用来架设一个字典服务的。允许客户端在
使用过程中访问更多字典。Dict服务器和客户机使用TCP端口2628。不过用的比较少,所
以网上基本没啥资料(包括谷歌上)
题目又提示端口的范围是8000-9000,那我们就使用burpsuite攻击模块
请求不存在的服务器或未开放的端口,会返回以下信息,可以通过返回的状态信息不同,来判断对应端口开放的状态。
cURL是与各种的服务器使用各种类型的协议进行连接和通讯的工具。它是一个强大的库支持http、https、ftp、telnet、file等协议,同时也支持HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。
pikachu靶场练习
- 访问外网:
?url=www.baidu.com - 通过file协议读取文件:
?url=file:///C:/WINDOWS/win.ini - 使用dict协议查看端口:
?url=dict://127.0.0.1:80
4.使用php伪协议:查看ssrf.php源码
…/ssrf_fgc.php?file=php://filter/read=convert.base64-encode/resource=ssrf_fgc.php
SSRF具体验证
排除法:
对疑似有SSRF漏洞的地方(允许输入网址、ip的地方),要验证是否存在SSRF漏洞,
可以首先请求外网,比如:
http://read.******.com/image?image=http://www.baidu.com/img/bd_logo1.png
你可以直接右键图片,在新窗口打开图片,如果是浏览器上URL地址栏是http://www.baidu.com/img/bd_logo1.png,说明不存在SSRF漏洞。
SSRF防御与绕过
SSRF漏洞形成的原因主要是服务器端所提供的接口中包含了所要请求的内容的URL参数,并且未对客户端所传输过来的URL参数进行过滤
一般的防御措施是对URL参数进行过滤,或者使得URL参数用户不可控,但当过滤方法不当时,就存在Bypass的不同方式
通常有一下 5 个思路:
• 过滤返回信息,验证远程服务器对请求的相应,是比较容易的方法。如果 Web 应用获取某种类型的文件,那么可以在把返回结果展示给用户之前先验证返回信息是否符合标准。
• 统一错误信息,避免用户根据错误信息来判断远程服务器端口状态。
• 限制请求的端口为 HTTP 常用端口,比如 80、443、8080、8090
• 黑名单内网 IP,避免应用被用来获取内网数据,攻击内网。
• 禁用不需要的协议。仅仅允许HTTP和HTTPS请求。可以防止类似于file://、ftp://等引起的问题
SSRF绕过技巧
1、利用@符号 绕过当网站限制只能访问 http://www.xxx.com类型的域名
2、添加端口号
3、利 用 短 地 址
4、利 用 特 殊 域 名
5、利 用封闭式字母数字
6、利用句号 。或利用 [::] 绕过
7、利 用 进 制 转 换
8、利用302跳转
04 SSRF绕过技巧
绕过限制请求IP不为内网地址
更多参考资料:https://www.secpulse.com/archives/65832.html
利用302跳转、利 用 短 地 址、利用其他协议绕过限制请求只为http协议
1)利用@符号
SSRF绕过中我们通常使用@符号进行绕过例如:http://example.com@127.0.0.1
2)添加端口号
SSRF绕过中我们通常使用添加端口号绕过
例如:http://127.0.0.1:8080
3)利用短地址
SSRF绕过中我们通常使用短地址进行绕过
例如:http://dwz.cn/11SMa
4)利用特殊域名
SSRF绕过中我们通常使用特殊域名进行绕过
例如:xip.io
5)利 用封闭式字母数字 E nclosed Alphanumerics
例:ⓔ ⓧⓐ ⓜⓟ ⓛⓔ .ⓒ ⓞⓜ >>> example.com
清单:
①② ③ ④ ⑤ ⑥ ⑦⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳ ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇
⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛
⒜ ⒝ ⒞ ⒟ ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ ⒰ ⒱ ⒲ ⒳ ⒴
⒵ Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ ℗ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ
Ⓨ Ⓩ ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ
ⓧ ⓨ ⓩ ⓪⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴ ⓿
6)利用。
SSRF绕过中我们通常使用。进行绕过
例如:http://127。0 。0 。1
7)利用进制转换绕过
SSRF绕过中我们通常使用进制转换进行绕过
例如: h ttp://2130706433/
8)协议绕过
Dict:// dict://@:/d:
SFTP:// ssrf.php?url=sftp://example.com:11111/
TFTP:// ssrf.php?url=tftp://example.com:12346/TESTUDPPACKET
LDAP:// ssrf.php?url=ldap://localhost:11211/%0astats%0aquit
DNS重新绑定是计算机攻击的一种形式。 在这种攻击中,恶意网页会导致访问者运行客户端脚本客户端脚本,攻击网络上其他地方的计算机。它利用了同源策略的漏洞在网页浏览过程中,用户在地址栏中输入包含域名的网址,浏览器通过DNS服务器将域名解析
为IP地址,然后向对应的IP地址请求资源,最后展现给用户。而对于域名所有者,他可以设置域名所对应的IP地址,当用户第一次访问,解析域名获取一个IP地址,然后,域名持有者修改对应的IP地址,用户再次请求该域名,就会获取一个新的IP地址,对于浏览器来说,整个过程访问的都是同一域名,所以认为是安全的。(浏览器同源策略) 这就是DNS Rebinding攻击。
https://blog.csdn.net/qq_36348899/article/details/119297854
可以利用这个网站获取一个测试用的域名:
https://lock.cmpxchg8b.com/rebinder.html