SQL Injection Nedir? SQL Injection Nasıl Yapılır?

SQL Injection
3
(3)

Merhaba, ben Ali Kaan BAŞHAN ; Bu yazımda SQL Injection Nasıl Yapılır? Sorusunu cevaplayıp detaylı bir anlatım gerçekleştireceğim. Bu yazıyı okuduktan sonra veri tabanı, sql injection, sql injection teknikleri, sql injection tespiti ve bazı sql injection payloadları konusunda bilgi sahibi olacak ve internetteki çoğu yazıdan çok daha kaliteli ve detaylı bir sql injection hakkında bir yazı yazacağımı burada belirtmek isterim.

SQL İnjection Nedir?

Sql Injection veritabanı ile internet sitesi arasında iletişimi sağlayan internet sitesi kodları arasında güvenlik açığı bulunması sonucunda, saldırganın veritabanı işlemlerine müdahalede bulunması, okuması, değiştirmesi ve eğer gerekli izinler verilmiş ise veritabanı kullanıcısına “sql injection ile işletim sistemi komutu çalıştırmaya” imkan veren bir veritabanı açığıdır.

Veritabanı Nedir?

Veritabanı verilerin bulunduğu yerdir. Kullanıcı isimleri, bilgileri, giriş bilgileri, sitedeki içerikler. Kısacası kullanıcılar tarafından yada site yönetimi tarafından eklenen her şey aslında veritabanına kaydedilir ve internet sitesi ilgili sayfaları kullanıcıya gösterirken veritabanından ilgili kısımları çekerek gösterir kullanıcıya.

Veritabanının Nasıl Çalıştığını Anlamak için Bir Örnek

Örneğin bu resimde url deki adrese göre internet sitesi veritabanına bağlanıyor ve veritabanında bu url adresi ile eşleşen bilgileri çekiyor. Resimde gördüğünüz gibi yazı başlığını çekmiş ve son kullanıcı olan bize başlığı göstermiştir. Bu yalnızca veritabanı nedir? sorusuna cevap olması için gösterdiğim bir örnek.

Veritabanı Saldırıları Nedir?

Zaten asıl konumuz bu, sql injection “veritabanı saldırıları” tanımına denk gelmektedir. Siz sql injection yaparken veritabanına bir saldırıda bulunuyorsunuz ve eğer bir güvenlik açığı tespit edebilmiş iseniz o güvenlik açığını sömürmeye ve ilgili işlemleri yapabilmeyi amaçlıyorsunuz.

Veritabanı Saldırıları ile Neler Yapılabilir?

İnternet sitesindeki her şey değiştirilebilir! , internet sitesindeki tüm verileri okuyabilir ve işletim sistemi komutu çalıştırmaya kadar giden ciddiyette şeyler yapılabilir. Birilerinin kullanıcı adı şifreleri alınabilir, onların sayfalarındaki bilgiler değiştirilerek onlara reflected xss saldırısında bulunulabilir, kişisel bilgileri çalınabilir, site yönetiminin bilgileri alınarak internet sitesi yönetim paneline girerek tüm yönetici hesaplarına erişim sağlanabilir. Kısacası veritabanı ile ilgisi olan her şey yapılabilir sql injection yani veritabanı saldırısı ile.

Veritabanı Türleri Nelerdir?

MySQL

Microsoft Access

Microsoft SQL Server

Oracle Database

dBASE

Firebird

FileMaker

MS Access

Sıfırdan İleri Seviyeye SQL Injection Yöntemleri

Öncelikle her şeyin başlangıcında sql injection saldırısının başarılı olabilmesi için sql zafiyetini tespit etmemiz gerekiyor. Bu durumu tespit ettiken sonra saldırı yöntemlerine geçebilir ve içeriden veri çıkarmayı deneyebilir yada içerideki verileri değiştirmeyi deneyebiliriz. Sizinde farkettiğiniz gibi “deneyebiliriz” kelimesini kullanarak bahsettim buradan çünkü: Bazen sql injection güvenlik açığını tespit etsekte içeride işlem yaptıramadığımız durumlar olabiliyor güvenlik duvarı, waf, ön sunucu güvenliği ve diğer sebeplerden dolayı. Detaylı anlatıma başlayarak ileri seviye sql injection yöntemlerinden bahsetmeden önce yeni başlayanların yaptığı bir hata “sql injection saldırılarını yanlış yere yapılması” konusundan bahsederek, bu saldırının nereye yapılması gerektiğini açıklayacağım.

SQL Injection Saldırısı Nereye Yapılır?

Veritabanı saldırısı olarak isimlendirdiğimiz bu saldırı internet sitelerinin yada sunucuların veritabanlarına yapılır.  SQL kelimesinin ingilizce açılımı “Structured Query Language” olmaktadır. Sizinde farkettiğiniz gibi bir dil ve bu dil üzerine saldırıda bulunuyoruz. İnternet sitelerinde veritabanının kullanıldığı ve kullanıcıdan girdi ( input ) alan her yerde sql injection saldırısı yapılabilir. Örneğin hedef internet sitesinde bir url ye girdiğiniz zaman, girdiğiniz url ye göre başlık ve yazı içeriği geliyorsa internet sitesinde url alanı sizin için input demektir ve tüm sql injection tespit yöntemi saldırılarınızı buraya yapmanız gerekmektedir. İnput almayan yere sql injection yapılmaz! Bir url var ve hiçbir parametre almıyorsa gidip kendiniz sitede çalışmayan rastgele parametreler ile sql injection tespiti denemesi yapmayın lütfen, hedefe yönelik tespit çalışmalarında bulunmanız değerli zamanınız için faydalı olacaktır.

Sql Injection Yalnızca URL Adresine mi Yapılabilir?

Hayır, internet tarayıcınızda bir internet sitesine input (girdi) göndermek istediğiniz zaman yalnızca url adresi ve site içi arama menülerini kullanabildiğinizden dolayı öyle yazdım. Aslında internet tarayıcıları bizler için işleri çok kolaylaştırıyorlar. Örneğin: site.com/profilim kısmına girdiğiniz zaman eğer siz kendi hesabınız ile girerseniz aynı url olmasına rağmen sizin profil bilgileriniz size gösterilirken, başka bir kullanıcı girdiği zaman onun profil bilgileri ona gösteriliyor. Kısacası internet tarayıcılarının bizlere olabildiğince kolay bir kullanım sunmasından kaynaklı normal şekilde tam erişim yapamıyoruz gönderdiğimiz internet sitesi isteklerine. Hedefimizdeki internet sitesine dilediğimiz gibi http isteklerini gönderebilmek için bu alanda en çok kullanılan hacker aracı ve pentest aracı olan burp suite pro programını öneriyorum. Burp suitenin normal sürümü yerine pro sürümünü öneriyorum çok fazla özellik katkısı sağladığından dolayı. Ayrıca Burp suite pro sürümü ücretli ben nasıl alayım? Gibi sorularınız varsa en ufak endişeye yer yok ben size ücretsiz, YASAL ve LEGAL şekilde nasıl burp suite pro sürümünü alabileceğinizi resimlerle çok detaylı bir şekilde anlattım. Burp Suite Pro Ücretsiz Nasıl Alınır? Buradaki yazımı inceleyerek bedava şekilde burp suite pro sürümüne yasal şekilde ulaşabilirsiniz. Bazen bir şeyleri nasıl kullanacağını bilmek önemli oluyor. Şimdi size neden sql injection saldırısı yani veritabanı saldırısını tespit ederken neden internet tarayıcısı yerine burp suite programını kullanmanız gerektiğini açıklayacağım.

Neden İnternet Tarayıcısı Yerine Burp Suite Hacker Aracını Tercih Etmeliyim?

Çünkü giden parametreleri kontrol edebileceğiniz manuel bir web pentest aracına ihtiyacınız var. İnternet sitelerinde url kısmına “+” ( artı ) yazarsanız boşluk karakteri olarak gidiyor fakat burp suite ile ne yazarsanız öyle gidiyor. Yani internet tarayıcısı sizin yazdığınız şeyi göndermeden önce son defa encode ederek gönderirken burp suite ile böyle bir durumla karşılaşmadan direkt gönderebiliyorsunuz. Aşağıdaki örnek resimde web pentester olarak açmış olduğum internet sitem Web Pentester Ali Kaan BAŞHAN internet siteme burp suite ile http isteği gönderdim ve giden bağlantıyı burp suitenin içindeki proxy ile yakalayıp ekran görüntüsü aldım.

 

BAŞLIYORUZ! Burp Suite ile Adım Adım SQL Injection Tespit Etme Yöntemleri

Öncelikle bir internet sitesi veritabanına nasıl bağlanıyor, veritabanına bağlantıktan sonra sql yani veritabanı bağlantısı ile verileri nasıl çekiyor ve bize gösteriyor, bizden aldığı verileri nasıl veritabanı tablosuna kaydediyor bunu göstereceğim. Bir yerlerde güvenlik açığı arayabilmek için önce onun nasıl çalıştığını öğrenmeliyiz.

Bir İnternet Sitesi Veritabanı ile Bağlantıyı Nasıl Kuruyor?

Çok fazla internet sitesi dinamik programlama dili olsada ben dünyada en çok kullanılan internet sitesi dinamik programlama dili olan “PHP” ve yeni yeni sağda solda popülerleşmeye başayan “Python” programlama dilleri ile internet sitelerinin veritabanı ile bağlantıyı nasıl kurduğunu, veritabanından yani sql den verileri nasıl çekip son kullanıcı olan bizlere gösterdiğinden bahsedeceğim. Ayrıca iki progamlama dilide yani PHP ve Python farklı olsada veritabanı bağlantısı aynı, aynı şekilde yazılıyor, aynı şekilde istek yapılıyor, aynı şekilde parametreler ekleniyor. Bunun sebebi de veritabanı bağlantısının yapısından kaynaklanıyor. Yani bu yazıyı okuduktan sonra ben yalnızca PHP ve Python ile yazılmış internet sitelerinde sql açığı arayabilecek şey öğrendim demeyecek onun yerine “Ben gelmiş geçmiş bütün programlama dillerinde kullanılan veritabanı bağlantısının nasıl olduğunu gördüm ve tüm programlama dillerinde aynı şekilde kullanılan veritabanı bağlantısının veritabanı güvenlik testlerini yapabilecek durumdayım” diyeceksiniz.

PHP Veritabanı Bağlantısı Kodu

$conn = mysqli_connect($servername, $username, $password, $database);
Python Veritabanı Bağlantısı Kodu
mydb = mysql.connector.connect(
host = “localhost”,
user = “root”,
password = “”)
Gördüğünüz gibi her ikisinde de içlerine parametreler alıyorlar ve veritabanı bağlantısını başlatıyorlar. Asıl iş bundan sonrası çünkü bizim buraya müdahele edebilme imkanımız yok, sql açığı bizden aldığı inputları yani girdileri kullanarak veritabanı işlemlerindeki güvenlik açığından kaynaklanan bir güven açığı olduğundan dolayı biz “bizden aldıkları parametreleri kullandıkları yerleri inceleyerek, oraya sql injection tespitinde ve saldırısında bulunacağız.”
PHP ile Veritabanında Herhangi Bir İşlem
$sorgu = $baglanti->query(“SELECT kisi_adi, kisi_soyadi, kisi_eposta FROM kisiler”);
Python ile Veritabanında Herhangi Bir İşlem
dbcursor.execute(“SELECT kisi_adi, kisi_soyadi, kisi_eposta FROM kisiler”);
Sizinde farkettiğiniz gibi her iki programlama dilinde de ilgili fonksiyonlar çağırılıyor ve çift tırnak içine sql sorugusu yazılıyor. Yani ne yazarsan yaz sql sorgusunda çalışırken çift tırnaklar arasında string (düz yazı) değişkeni olarak yazılıp çalışacak. Bizim internet sitelerinde gönderdiğimiz parametrelerde string olarak alınır ve çeşitli işlemler ile başka türlere dönüşür buna değişken türü dönüşümü denir. Bir input ile direkt işletim siteminde çalışacak $ (dolar işareti) gönderemesekte, string gönderebiliyoruz çünkü varsayılan gönderim türü zaten string. Bundan dolayı sql açığı denilen bir şey var, bundan dolayı biz sql açığı tespiti konusunda bu kadar araştırmalar yapıyoruz.

Sql Açığı Tespiti

Burp suite programımızı açtık ve hedef sitemize girdik. Öncelikle bu internet sitesi bizden nerelerde girdi (input) alıyor bunu incelemeliyiz. Örneğin internet sitesinde arama kutusu var mı? Biz buraya bir şeyler yazınca bizim arama kelimelerimize göre mi içerikler geliyor? İçerik arama kısmında yada bize gösterilen içerik kısmında filtreleme yapabiliyor muyuz? İstediğimiz filtreleme parametrelerini gönderebiliyor muyuz? Sayfa numaraları var mı? Biz 1. sayfaya basınca 1. sayfadaki içerikler, ikinci sayfaya basınca ikinci sayfadaki içerikler mi geliyor? bir kullanıcı profiline bastığımızda o kullanıcının profil sayfası mı açılıyor? Bir yazının linkine bastığımızda üst kısımda o yazının url adresi görünerek o yazıya özel alan mı geliyor? Yorum yada başka şeyler yaparak bir şekilde bir input girişi yapabiliyor muyuz? Kayıt ol, şifremi unuttum, giriş yap gibi menülerden bir şekilde internet sitesine bizden bazı bilgiler alarak ona göre işlem yapmasını sağlayabiliyor muyuz? Bunların hepsinin sonucunda veritabanı bağlantısı kurulup işlemler yapılıyorsa ( bize sonucun gösterilmesine gerek yok ) biz bu kısımlarda sql açığı taraması yapabiliriz.

SQL Injection 1. Bölüm – Girdi Alanı Belirleme ve İlk SQL Injection Tespiti Saldırısı

Hedef site: alikaanbashan.org ( kendi internet sitem )

Hedef siteyi açıyoruz

Hedef siteyi açtıktan sonra input alanları belirliyoruz, bunun için internet sitesini biraz kullanmamız, sayfalar arası geçişler yapmamız, çeşitli butonlara tıklamamız gerekebilir.

Biraz hedef sitede gezindikten sonra sql injection tespiti yapabilmek için şunları tespit ettik

  1. Arama kısmında bir şeyler yazdığımız zaman hedef site oraya yazdığımız inputa göre tepki veriyor ve veritabanında bulunan içeriklerden bize sunum yapıyor.
  2. Sol taraftaki içeriklerde kategorilere bastığımızda url kısmında kategori adı yazıyor ve ilgili kategoriye ait içerikler geliyor
  3. Sol taraftaki yazılara bastığımızda ilgili yazı ile ilgili yazılmış olan bilgilerin sayfası açılıyor ve veritabanından bu yazı hakkındaki içerikler bize sunum yapılıyor.

Sql Injection tespiti yapabilmek için herhangi bir input alanında teste başlıyoruz. Seçtiğimiz alan “arama kutusu” hedef olarak bunu seçmemizin herhangi özel bir durumu yok, zaten bütün inputların tek tek denenmesi gerekir. Hangisinde ne var ne yok tek tek denenmesi gerekiyor. Burp suite ile proxy yakalama özelliğini açtık ve arama kutusuna “siber” yazdık.

SQL Injection

Resimde gördüğünüz gibi burp suite ile yaptığımız istekte arama kutusuna yazdığımız kelime parametre olarak gitmiş ve bunun sonucunda veritabanı bağlantısında işlemler yapılarak bize parametremize uygun işlem sonucu gösteriliyor. Burada dikkat edilmesi gereken kısım “veritabanında güvenlik açığı ararken yaptığımız işlemlerin bize gösterilmesine gerek yok, veritabanında herhangi bir işlem yapılıyor olması yeterli“.

Haydi Şimdi SQL İnjection Payloadları Konusuna Geçelim!

Payload Nedir?

Hedef sistemde istediğimiz sonucu alabilmek için yazdığımız hedefe yönelik işimize yarayan yazım. Yani eğer şuanda tespit etmek için bazı inputlar yazıyorsan “merhaba” kelimesi bile olur, buda bir payloaddır. Şuanda merhaba kelimesinden payload olur mu demeyin, nasıl olacağını göstereceğim.

SQL Injection Tespit Payloadı Nedir?

Sql injection tespit payloadı bu sql açığını tespit etmeye yarayan girdiğimiz girimdir. Çeşitli girimler ile hedef sitede sql açığının tespitini yapmaya çalışırız.

SQL Injection Tespiti İlk Payload Time Sleep

Şimdi öncelikle nereye saldıracağımızı biliyoruz. Saldıracağımız kısım çift tırnaklar arasında bulunan string kısım. İnternet sitesine istek yaptığımız zaman bizim isteğimizde string olarak gidiyor. İnputlardan gönderdiğimiz parametreler bu veritabanı bağlantısını gerçekleştiren çift tırnaklar arasına yazılıyor ve dinamik programlama dillerindeki veritabanı bağlantısını sağlayan fonksiyonlardaki çift tırnaklar arasına yazılarak ilgili sql (veritabanı) işlemleri oluyor. Şimdi sorumuz şu “Biz ne yazacağız?” Cevap veriyorum: SQL sorgusunun anlayacağı ve alışılmışın dışında tepki vermesine sebep olabilecek herhangi bir şey. Örneğin bu sql sorgusundaki “siber” kelimesi kullanıcıdan gelen input olsun

SQL Sorguları ve SQL Injection anlatımı Mysql Veritabanı üzerine yapılmıştır. Diğer veritabanlarında da benzer şekilde sorgular yapılmaktadır. Sql Injection konusunu anladıktan sonra İlgili diğer veritabanların komutlarını inceleyebilirsiniz, sonuç aynı olacaktır. Yalnızca birinde satır sonu noktalı virgül ile bitiyorsa diğerinde iki nokta ile bitiyor gibi düşünebilirsiniz.

“SELECT * FROM user_table WHERE username = siber”;

eğer biz sql sorgusu olan ; (noktalı virgül) ile parametremizin sonuna başka bir sql sorgusu yazarsak ne olur? Örneğin sql sorgusu ile 5 saniye uyu dersek. Yani yeni sql sorgusu

“SELECT * FROM user_table WHERE username = siber; select sleep(5)”;

Bu durumda eğer bizden alınan input değerini kontrol etmeden direkt kullanıyorsa veritabanı ile işlem kuran internet sitesi dinamik altyapısı (PHP , Python örnek verilebilir) , direkt bizim sql payloadımız devreye girmiş ve veritabanında beklenenin dışında bir işlem yaptırmış oluruz. Bu SQL Injection tespitinin sonunda yalnızca hedef site uyudu ve hiç bir değişiklik olmadı evet. Fakat bizim istediğimiz şey öncelikle SQL Injection zafiyetinin tespiti. Tespit ettikten sonra isteğimize göre işlemler yaptıracağız. Bu SQL Injection tespiti konusunda tespit payloadımız “siber; select sleep(5)” oldu.Çift tırnaklar olmadan olan payloadımız haberiniz olsun. Bu payload eğer çalışıyorsa hedef site normalden 5 saniye sonra daha geç cevap verir. Sayıyı arttırarak daha kesin sonuç alabilirsiniz.

SQL Injection Tespiti Payload Error Based

“SELECT * FROM user_table WHERE username = siber”;

Örnek sql sorgumuzu üstte belirttim. siber kelimesini hedeflediğimiz internet sitesi bizden parametre olarak alıyor ve direkt veritabanı işlemlerinde kullanıyor. SQL sorguları bazen tek tırnak, çift tırnak, parantez içi gibi durumlarda yazılabilir. Yani bu dediklerimi bizim örnek sql sorgumuza uyarlayacak olursak

“SELECT * FROM user_table WHERE username = ‘siber’ “;

“SELECT * FROM user_table WHERE username = “siber” “;

“SELECT * FROM user_table WHERE username = (siber) “;

gibi durumlar olabilir. SQL sorgusunun çok doğru olup olmaması ilgilendirmiyor sizi şuanda, oraya takılmayın. Sizinde bildiğiniz gibi sql soruları string ve bizden alınan inputta string. O zaman eğer biz tek tırnaklar içine yazılmış bir şeye payload olarak tek tırnak bulunduran bir şey koyarsak ne olur? Yani örnek sorgumuz şu şekilde olacak

SQL Injection payload: siber’

Veritabanında işlenen sql sorgusu hali: “SELECT * FROM user_table WHERE username = ‘siber‘ “;

buradaki kırmızı ile belirtilmiş olan tek tırnağı farkettiniz mi? sql sorgumuz hatalı yapılmış ve bunun sonucunda syntax hatası verecek. Ekrana bunu yazdırabilir de yazdırmayabilirde. Bazen güvenlik sebebi ile ekrana log düşürmeyi kapatıyorlar. Bundan dolayı tek tırnak koyunca hata mesajı gelmiyorsa sql açığı yoktur demeyin lütfen. Normalde yapması gereken işlemi herhangi bir sorun olmadan yapıyorsa sql açığı yoktur demek daha yüksek doğruluğu olan bir ihtimal. Eğer tek tırnak koyduğunuzda ekranda syntax hatası yada benzeri bir şey oluyorsa sql açığı vardır diyebiliriz. Bunu ekrana hata mesajı olarak yazdırıyor olmalı. Bunu yaparken burp suite kullanarak yapın ve sayfanın kaynak kodlarına bakın çünkü bazen bu hatayı yorum satırı olarak gösterebiliyor internet siteleri. Burp suiteyi açın, isteği yapın ve reponse kısmındaki arama kutusuna syntax yazabilir yada sayfa uzunluğunda aşırı bir değişim varsa oradan farkedebilir yada basit bir şekilde sayfanın kaynak kodlarına bakabilirsiniz.

SQL Injection

diğer payload varyasyonları bu şekilde olacaktır. Başka sql sorguları varsa onlara göre uyarlayabilirsiniz.

SQL Injection payload: siber’

Veritabanında işlenen sql sorgusu hali: “SELECT * FROM user_table WHERE username = ‘siber‘ “;

 

SQL Injection payload: siber”

Veritabanında işlenen sql sorgusu hali: “SELECT * FROM user_table WHERE username = “siber‘ “;

 

SQL Injection payload: siber)

Veritabanında işlenen sql sorgusu hali: “SELECT * FROM user_table WHERE username = (siber)‘ “;

 

SQL Injection Tespiti Payload Tür Dönüşümü

Hemen direkt konuya gireyim. Bazen internet sitesi geliştiricileri kullanıcıdan alınan değerleri integer hale yani tam sayıya çevirme ihtiyacı duyarlar. Bunu yaparkende dinamik programlama dili yerine, veritabanı içinde yapmayı tercih ederler çünkü veritabanında bu işlemi yapmak daha iyi performans sonucu verir. O hız farkından faydalanabilmek için bunu seçerler. Sorun şu ki: Veritabanında 5 olarak gönderilen input başlangıçta string ve siz ona “hey bu 5 string değerini tam sayıya dönüştür” dediğinizde size artık 5 tam sayısını verir. Fakat eğer oraya çevirilemez bir şey yazarsanız o zaman ne olur? Örneğin “siber” işte bunu yazdığınız zaman tür dönüşümünü yapamaz ve ekrana hata mesajı verir sql sorgusu. Bu şekilde içeriden veri çekmeye imkan tanır. İçeriden nasıl veri çekilir, işlemler nasıl yapılır anlatacağım.

Başlığını Bilmediğim SQL Injection Tespit Payloadları

\ (ters bölü işareti) klavyeden alt gr ve soru işareti tuşuna basarsanız bu işaret çıkacaktır. Hemen örnek payloadımızı yazalım

“SELECT * FROM user_table WHERE username = ‘siber’ “;

Eğer siber kelimesinden sonra ters slaş işareti gönderirsek ne olur? Sizinde bildiğiniz gibi ters slaş işareti (\) programlama dilinde kaçış işareti olarak bilinir ve orayı normal işe yaramaz bir karakter haline getirir. Bundan dolayı sql sorgusunun tek tırnak işaretini kapatma olan işaretini etkisiz hale getirir ve ekrana hata mesajı yazar

“SELECT * FROM user_table WHERE username = ‘siber\‘ “;

%00 (yüzde sıfır sıfır yazımı) sizinde bildiğiniz gibi işletim sistemlerinde yazıların sonunu bitirmek için 0x00 kullanılır. Htttp isteklerinde ise bu durum 0x işareti % işaretine dönüşüyor ve bunu alan http sunucusundaki veritabanı yada sunucu işlemi bırakıyor ve ekrana hata mesajı yazdırıyor.

Önce bozup ardından tekrar eskisine dönmeyi kontrol etmemiz gerekebiliyor

Örneğin bir sql sorgusunda payload olarak tek tırnak ile bir payload gönderdiniz. Sayfa hata verdikten sonra tekrar tek tırnak koyarak eski haline dönebiliyor musunuz? Bazen farklı sunuculardan ve veritabanlarından kaynaklanan durumlar sebebi ile tek tırnaklar arasına boşluk, artı, %20 , yada hiç bir şey yada || koymanız gerekebilir ( dikine bölü işaretini alt gr ve alt çizgi tuş kısayollarına basarak yaptım). Bundan dolayı bozduğunuz sql sorgusunu eski haline döndürebilmeniz çok önemli. Çünkü içeride işlemler yaptırırken sql sorgusu düzgün alınmalı ki hedef site tarafından işlenebilsin.

Açık Konuşayım normalde sql injection ile içeriden nasıl veri çıkarılır kısmından da bahsedecektim fakat yoruldum. Bundan dolayı burada bırakıyorum. Konu altına faydalı olabilecek payloadları ekliyorum.

`
‘)
“)
`)
‘))
“))
`))

MySQL
#comment
— comment [Note the space after the double dash]
/*comment*/
/*! MYSQL Special SQL */

PostgreSQL
–comment
/*comment*/

MSQL
–comment
/*comment*/

Oracle
–comment

SQLite
–comment
/*comment*/

HQL
HQL does not support comments

 

MySQL (string concat and logical ops)
1′ + sleep(10)
1′ and sleep(10)
1′ && sleep(10)
1′ | sleep(10)

PostgreSQL (only support string concat)
1′ || pg_sleep(10)

MSQL
1′ WAITFOR DELAY ‘0:0:10′

Oracle
1’ AND [RANDNUM]=DBMS_PIPE.RECEIVE_MESSAGE(‘[RANDSTR]’,[SLEEPTIME])
1′ AND 123=DBMS_PIPE.RECEIVE_MESSAGE(‘ASD’,10)

SQLite
1′ AND [RANDNUM]=LIKE(‘ABCDEFG’,UPPER(HEX(RANDOMBLOB([SLEEPTIME]00000000/2))))
1′ AND 123=LIKE(‘ABCDEFG’,UPPER(HEX(RANDOMBLOB(1000000000/2))))

Bu yazıyı beğendin mi?

Oylamak için yıldıza dokunun!

Ortalama Puan 3 / 5. Oylama puanı: 3

Daha oylayan olmadı, ilk oylamak ister misin?

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?

Author Profile

alikaanbashan
Merhaba, ben Ali Kaan BAŞHAN; Siber güvenlik adına keyifli bir hobi olarak başladığım bu uğraşımı, zaman içinde ilerleterek internet sitelerine web pentest hizmeti olarak sunmaya başladım. Ardından siber güvenlik adına bir blog açmaya karar verip, bu blogu açtım. İmza: Web Pentester Ali Kaan BAŞHAN

You may also like...

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir