0x01漏洞简介
很多web应用都提供了从其他的服务器上获取数据的功能。使用用户指定的URL,web应用可以获取图片,下载文件,读取文件内容等。这个功能如果被恶意使用,可以利用存在缺陷的web应用作为代理攻击远程和本地的服务器。这种形式的攻击称为服务端请求伪造攻击(Server-side Request Forgery)
0x02漏洞危害
- 可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息;
- 攻击运行在内网或本地的应用程序(比如溢出);
- 对内网web应用进行指纹识别,通过访问默认文件实现;
- 攻击内外网的web应用,主要是使用get参数就可以实现的攻击(比如struts2,sqli等);
- 利用file协议读取本地文件等。
0x03漏洞原理测试
1 | <!DOCTYPE html> |
后端处理代码如下:
1 |
|
0x04漏洞利用
- 端口扫描
- 攻击应用程序
- 内网web应用指纹识别
- 通过访问下列连接判断是否安装phpmyadmin
- http://localhost/phpMyAdmin/themes/original/img/b_tblimport.png
- http://localhost/wp-content/themes/default/images/audio.jpg
- http://localhost/profiles/minimal/translations/README.txt
- 访问portName.js判断是否是DLink路由器
- manager/images/tomcat.gif
- 攻击内网web应用
- 读取本地文件
0x05绕过姿势
- @ http://abc@127.0.0.1
- 添加端口号 http://127.0.0.1:8080
- 短地址 http://dwz.cn/11SMa
- 可以指向任意ip的域名:xip.io
- 10.0.0.1.xip.io = 10.0.0.1
- www.10.0.0.1.xip.io = 10.0.0.1
- mysite.10.0.0.1.xip.io = 10.0.0.1
- foo.bar.10.0.0.1.xip.io = 10.0.0.1
- ip地址转换成进制来访问
- ip地址转换成进制来访问 115.239.210.26 = 16373751032
- 302绕过
0x06漏洞防御
- 过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
- 统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。
- 限制请求的端口为http常用的端口,比如,80,443,8080,8090。
- 黑名单内网ip。避免应用被用来获取获取内网数据,攻击内网。
- 禁用不需要的协议。仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp:// 等引起的问题。
0x07参考资料
利用 Gopher 协议拓展攻击面
长亭大牛写的,好文章
[安全科普]SSRF攻击实例解析
SSRF的一些总结