最近玩的时候想找一下SSRF的相关知识,去自己博客上一看,WTF竟然还没有!好吧。。那就写一个吧,方便自己以后查看,大牛们多多指点。
Know it
(让我装个逼,模仿下猪猪侠的词。。。)
什么是SSRF
Freebuf:很多web应用都提供了从其他的服务器上获取数据的功能。使用用户指定的URL,web应用可以获取图片,下载文件,读取文件内容等。这个功能如果被恶意使用,可以利用存在缺陷的web应用作为代理攻击远程和本地的服务器。这种形式的攻击称为服务端请求伪造攻击(Server-side Request Forgery)
一句话就是:利用一个可以发起网络请求的服务,当作跳板来攻击其他服务。
SSRF能干什么
- 探测内网信息
- 攻击内网或本地其他服务
- 穿透防火墙
- 。。。
怎么找SSRF漏洞
- 能够对外发起网络请求的地方
- 请求远程服务器资源的地方
- 数据库内置功能
- 邮件系统
- 文件处理
- 。。。
举几个例子:
- 在线识图,在线文档翻译,分享,订阅等,这些有的都会发起网络请求。
- 根据远程URL上传,静态资源图片等,这些会请求远程服务器的资源。
- 数据库的比如mongodb的copyDatabase函数,这点看猪猪侠讲的吧,没实践过。
- 邮件系统就是接收邮件服务器地址这些地方。
- 文件就找ImageMagick,xml这些。
- 从URL关键字中寻找,比如:
source
,share
,link
,src
,imageurl
,target
等。
SSRF怎么形成的
SSRF形成的原因就是由于服务端提供了能够发起网络请求或者从其他服务器获取相关资源数据等,但是没有对相关目标地址做任何的限制或过滤,从而导致SSRF漏洞。
Hack it
漏洞复现
主要模仿curl来请求资源,写入相关文件,之后并显示相关数据。
ssrf.html
ssrf.php
这里使用192.168.1.113作为边界服务器,192.168.2.3作为内网服务器。
数据内网服务器地址
成功显示内网服务器信息
漏洞实践
这里以weblogic的SSRF为例(猪猪侠所说的神洞)。如图显示则就是存在SSRF漏洞了。
好了,到现在咱们已经知道存在这个漏洞了,然后应该怎样快速定位该服务器所在的内网地址呢?
这里目前我知道的有三种方法:
- 使用脚本爆破
192.168.*.*
,172.16.*.*-172.31.*.*
,10.*.*.*
这三个内网段 - 使用burp爆破同上
- 使用
file:///
,gophar://
,ftp://
等这些服务器允许的协议去读取proc里可能包含IP地址信息的相关文件
这里我就先简单粗暴的使用burp来一发吧。
。。。运气真特么的好。
内网探测
探测内网内的所有主机及开放的端口信息。
SSRF绕过技巧
1、@
|
|
2、添加端口号
|
|
3、短地址
|
|
4、特殊域名
|
|
5、ip进制转换
|
|