Order by SQL Injection

14 Ocak 2015 Çarşamba

S.a. gençler.
Hek içerikli blog açtık ama hiç SQL Injection yazısı yazmadık dikkat ettiyseniz.
Bunun 2 sebebi vardı aslında.


1. si basında hakkımızda bu zamana kadar çıkan haberler sayesinde kendimizden çok SQL Injection'ı meşhur ettik. Bu da herkesin bu konuda az çok fikir sahibi olmasına sebep oldu. Yani bu alanda her konuda temel düzeyde de olsa döküman bulmak mümkün.

2. si biz yine de kendi bakış açımızla bir döküman yazmak istedik. Ama bu döküman baştan sona kitap olacak kadar uzun olacağı için, yeterli vaktimiz yok. Ama yine de piyasada geçmeyen mevzular, püf noktalar, ileri saldırı teknikleri hakkında ara sıra bir şeyler karalamaya devam edeceğiz.

Order by - SQL Injection

Mevzumuza gelelim. Bir sql cümlesi düşünün;

Select id,baslik,icerik,tarih from haberler order by tarih limit 20;

Burada haberler tablosundan id, baslik, icerik, tarih kolonları okunacak ve tarihe göre sıralanıp en üstteki 20 kayıt getirilecek.

Burada eğer;
Select id,baslik,icerik,tarih from haberler order by limit 20;
dersek, 4. kolona göre sırala manasına gelir. Yani gene tarih'e göre sıralama yapmış oluruz. Ama burada mevzu esasında şudur; kolon ismi yerine pseudo kolon isimleri kullanılabilmekte. Hatta view bile oluşturulup kullanılabilir.

Aslında bu order by ile sonlanmış sql cümlesinden sonra union kullanılarak injection çekebilmek mümkündür ancak her zaman değil. Bunun mümkün olmadığı durumlarda blind injection yapmak gerekir.

Order by cümlesinin sayfada kullanımını tahmin etmek gerekir. Şu tarz sayfalarda yüksek ihtimalle order by kullanılmaktadır.

haber.php?catid=6&order=title
haber.php?catid=6&order_by=title
haber.php?catid=6&sort=title
haber.php?catid=6&sort_by=title

Bu sayfalarda alınan bu parametreler, eğer bir if/switch vb. süzgeçten geçirilmediyse sorguya yüksek ihtimalle şu şekilde yansıyacaktır;

select * from haberler where catid=6 order by title;

dikkat ettiyseniz title kolonu dışarıdan alınır ve ' ve " özel karakterleri kullanılmadan alınmakta. Bu da demektir ki bu order by dan sonra cümleye müdahale edebiliriz.

Burada blind injection kasacağımız için ve ben denemeleri localhostta mysql üzerinde yapacağım için(aslında apache.org üzerinde yapacaktım da başımızı belaya sokmayak şimdi), mysql de hata bazlı(error based) blind injection yapmakla ilgili bi ufak kod paylaşayım.

Şimdik mysql de tür dönüşümleri yüzünden iç sunucu hatası alınmadığından dolayı, diğer db ler gibi error based çekemiyoruz. Biz de onun yerine if kullanarak, if true döndüğünde hata vermesini sağlıyoruz. Örnek kod aşağıdaki gibidir;

if((select table_name from information_schema.tables where table_name like '%admin%' limit 1),(select 1 union select 2),1)

yani, içinde admin geçen bir tablo mevcutsa (select 1 union select 2), değilse 1 döndür.
Eğer soru sonucu doğruysa Subquery returns more than 1 row  hatası alınır. Tabi hata sayfada görünür veya görünmez mevzu o değil. Mevzu iç sunucu hatası veya orjinalden farklı bir sayfa elde edebilmek. Daha sonra bu sorguyu Blind Injection için kullanacağız.

Yani özetlee;

haber.php?catid=6&order=(select if((select table_name from information_schema.tables where table_name like '%25user%25'),(select 1 union select 2),1))

veya 

haber.php?catid=6&order=if((select 1 from information_schema.tables where table_name like '%25user%25' limit 1),1,(select 1 union select 2))

çektiğimizde, eğer sorgu doğruysa iç sunucu hatası veya orjinal sayfanın dışında bir hata sayfası alınır. Eğer sorgu sonucu boş döndüyse, orjinal sayfa açılır. Bu şekilde denemelere devam edilir.

Localhost görüntüsü;



Video aşağıdadır, vimeo mal gibi, youtube forever;



Kaynak göstermeden alıntı yapanın ta.





Share this article :

7 yorum:

  1. okudum öğrendim eline sağlık dostum

    YanıtlaSil
  2. Windows veya Kali Linux üzerinde kullanabileceğimiz bir ddos yöntemi veya programı varmı?
    Ddos saldırıları ve günümüzdeki yeterlilik düzeyi hakkında bilgi verebilirmisiniz?

    YanıtlaSil
    Yanıtlar
    1. geçenlerde kerem yeni yayınlanan bi dos yönteminden bahsetmişti. şurda linki:
      https://code.google.com/p/slowhttptest/wiki/SlowReadTest
      http servisine yapılan, web application serverların zafiyetiyle alakalı dos yöntemi

      Sil
    2. ddos saldırılarını firewall'lar veya cloudflare gibi ara dns sunucuları bi nebze engelleyebilse de tamamen engellemenin teknik olarak bir yolu yok. çünkü sizin bandwidthiniz ne kadarsa, o kadar saldırı engelleyebilirsiniz. gigabitlik serverlar üzerinden saldırılar yapabilmek mümkün. işin içine bi de botnet girerse zaten gigabitleri de aşmak mümkün. zaten sırf o sebeple blogspot kullanıyoruz. geçmişte sitelerimiz aylar boyu dos saldırıları yüzünden kapalı kalmıştı, artık bunlarla uğraşmak istemiyoruz.

      Sil
    3. Sağolun. Peki kali linux veya windows üzerinden saldırı yapabiliceğimiz bir ddos programı varmı.

      Sil
    4. valla kardeş bilemiyorum hiç dos çekmedim ama bizim zamanımızda juno diye bi script vardı hala iş görüyomu bilmiyorum

      Sil
  3. junoyu editlerseniz iş görür. sisteme göre değişir.
    Bu Arada konu güzel olmuş.Kolay gelsin turksec.

    YanıtlaSil

 
Support : Copyright © 2014. Diary of Injector - All Rights Reserved