漏洞原理
SSRF挖掘
SSRF具体利用
SSRF具体验证
SSRF防御与绕过
Gopher伪协议
SSRF302重定向绕过
DNS重新绑定绕过
SSRF命令执行
SSRF进行POST提交
SSRF对tomcat写入
漏洞原理
这个漏洞允许攻击者去利用服务端的功能,来请求其他网络资源
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是指攻击者能够从易受攻击的
Web应用程序发送精心设计的请求的对其他网站进行攻击。
一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。
利用一个可以发起网络请求的服务,当做跳板来攻击其它服务
简单来说就是:
A让B帮忙访问C,如果是在B是不知情的情况下呢?
漏洞成因
SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。ssrf是利用存在缺陷的web应用作为代理去攻击远程和本地的服务器。
也就是说,对于为服务器提供服务的其他应用没有对访问进行限制,如果
构造好适当的访问包,那我就有可能利用目标服务对他的其他服务器应用
进行调用。
原理
如果我们将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漏洞,可以发现包括淘宝、百度、新浪等国内知名公司都曾被发现过分享功能上存在SSRF的漏洞问题。
二、从URL关键字中寻找
SSRF漏洞挖掘–总结
1.社交分享功能:获取超链接的标题等内容进行显示
2.转码服务:通过URL地址把原地址的网页内容调优使其适合手机
3.屏幕浏览在线翻译:给网址翻译对应网页的内容
4.图片加载/下载:例如富文本编辑器中的点击下载图片到本地;
5.通过URL地址加载或下载图片云服务厂商:它会远程执行一些命令来判断网站是否存活等,所以如果可以捕获相应的信息,就可以进行ssrf测试
6.编码处理
7.可以利用google 语法加上这些关键字去寻找SSRF漏洞。
从远程服务器请求资源----》找SSRF
SSRF具体利用
http://:探测内网主机存活、端口开放情况
gopher://:发送GET或POST请求;攻击内网应用(可以实现多个数据整合发送,gopher服务器可以将多个数据包捆绑发送到客户端)
dict://:泄露安装软件版本信息,查看端口,操作内网远程访问等
file://:读取本地文件
http:// — 访问 HTTP(s) 网址
ftp:// — 访问 FTP(s) URLs
php:// — 访问各个输入/输出流(I/O streams)
zlib:// — 压缩流
data:// — 数据(RFC 2397)
phar:// — PHP 归档
ssh2:// — Secure Shell 2
rar:// — RAR
ogg:// — 音频流
expect:// — 处理交互式的流
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
通常有一下 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
若传入的私网地址被限制可以使用302重定向绕过。这需要一台公网服务器和它的公网IP,在服务器中创建重定向的代码文件,提交公网IP路径下的重定向代码文件,使SSRF漏洞服务器或主机访问从而重定向到自己内网地址或本机地址。
简单的重定向代码,将其保存在公网服务器中命名为1.php
提交公网地址访问重定向文件,端口可以在公网服务器设置开放哪个端口,主要是为了方便访问文件。