İçerik
- Giriş
- SQL Injection Nedir
- SQLmap Nedir
- SQLmap'i verimli kullanma
- SQLmap üzerinde yapılandırma dosyası oluşturma
- SQL Injection tespit edildiğinde işletim sistemi üzerinde komut çalıştırma
- Telegram botu oluşturma
- Tespit edilen SQL Injection zafiyeti sonrası bot üzerinden mesaj gönderme
- Bonus
Giriş
Herkese merhaba, web uygulama güvenliği ile uğraşan birçok kişi, SQL Injection zafiyetini defalarca sömürmüştür. SQL Injection zafiyetini seven ve temellerini iyi bilen biri olarak, bug bounty programlarında araştırma yapıyordum;
Bug bounty yaparken, SQL Injection zafiyetinden emin olduğum adreslere sqlmap taraması başlatıyor ve başka herhangi bir bulgu var mı diye adresi/adresleri kontrol etmeye koyuluyordum. Bu süreçte açık birçok terminal ekranı arasında boğulurken sqlmap'i kontrol etmekte bir hayli gecikiyordum. Bugün sizlerle bu gecikmeyi ortadan kaldıracak basit bir bot yaratacağız.
SQL Injection Nedir
SQL Injection zafiyeti, veritabanı ile konuşan, kullanıcıdan veri alan herhangi bir dinamik uygulama üzerinde bulunabilir. İstemciden uygulamaya değiştilerek gönderilen bir verinin, veritabanı üzerinde sql sorgusu gibi çalıştığı durumlara SQL injection zafiyeti diyebiliriz. SQL injection zafiyetini kullanan kötü niyetli kişi;
- Veritabanı içerisinde yer alan hassas bilgileri okuyabilir, değiştirebilir veya silebilir.
- Sunucuya erişebilir.
- Yazılımın kaynak kodlarına erişebilir. (sql ve http servisi aynı makine üzerinde çalışıyorsa)
Yukarıdaki maddeler kullanıcı yetkisine ve izinlerine göre değişiklik gösterebilir!
SQLmap Nedir
SQL Injection saldırıları için biçilmiş kaftan olan SQLmap, 2006 yılında Daniele Bellucci tarafından kodlanmaya başlanmış ve daha sonra Miroslav Stampar ve Bernardo Damele tarafından geliştirilmeye devam edilmiştir.
Kararlı sürümü, 27 Şubat 2016'da yayınlandı ve bugüne kadar gelişerek geldi. SQL Injection zafiyetini otamatik olarak tespit etmek için kullanılan açık kaynak kodlu bir araçtır. SQLmap; veritabanında bulunan verileri çekmek, işletim sistemi üzerinde komut çalıştırmak, dosya sistemine erişmek gibi geniş bir özellik yelpazesine sahiptir.
Referanslar:
- https://github.com/sqlmapproject/sqlmap
- http://sqlmap.org/
SQLmap'i verimli kullanmak
Sqlmap arkaplanda çok fazla sayıda sql payloadının(yük) bulunduğu http paketi gönderdiği için firewall amcaya yakalanabilir. Bu durumda Sqlmap'i daha güçlü bir araç yapmak için aşağıdaki adımları uygulayabiliriz.
- Her istekte sürekli değişecek şekilde user-agent başlıkları göndermek. (--random-agent)
- İki istek arasındaki bekleme süresini ayarlamak. (--delay 10)
- Http isteklerini akıllı bir telefon üzerinden gidiyormuş gibi göndermek. (--mobile)
- Gönderilen sql paremetreler tamper scriptleri ile waf(Web Uygulama Güvenlik Duvarı) amcanın anlayamayacağı şekilde değiştirerek göndermek. (--tamper randomcase | INSERT / InsERt)
Yukarıdaki maddelere uygun bir sqlmap payloadını aşağıdaki şekilde oluşturabiliriz;
sqlmap -u https://cyberdetails.org/users.php?id=1 --random-agent --delay=10 --tamper randomcase --level 5 --risk 3
Her seferinde yukarıdaki yapılandırmayı terminele yazmak istemedeğimiz zaman, kendi özel yapılandırma dosyamızı oluşturabilir ve -c komutu ile çağırabiliriz;
$ cat sqlmap.conf
[Target]
[Request]
delay = 10
randomAgent = True
mobile = True
level = 5
risk = 3
tamper = randomcase
Daha fazla bilgi için : https://github.com/sqlmapproject/sqlmap/blob/master/sqlmap.conf
Artık yeni sorgumuzu aşağıdaki şekilde yazabiliriz;
sqlmap -u https://cyberdetails.org/users.php?id=1 -c sqlmap.conf
SQL Injection tespit edildiğinde işletim sistemi üzerinde komut çalıştırma
SQLmap üzerinde işletim sistemi komutu çalıştırmak için --alert parametresi kullanılabilir;
sqlmap -u https://cyberdetails.org/users.php?id=1 -c sqlmap.conf --alert "python3 uygulama.py"
Telegram üzerinde bot oluşturma
Telegramda bot oluşturmak oldukça kolay. Telegram tarafından hazırlanan BotFather ile konuşarak kendi botumuzu oluşturabiliriz.
/start komutu ile BotFather'la konuşmaya başlıyoruz.
/newbot ile yeni bir bot oluşturacağımızı söyledikten sonra bot ismini ve kullanıcı adını sırasıyla BotFather'a gönderiyoruz.
Elde edilen tokenı kullanarak isteklerimizi göndermeye başlayabiliriz.
Bildirimleri doğru kişiye göndermek
API üzerinden yapacağımız isteklerde, botumuzun mesaj göndereceği kişinin chatID'sini bilmesi gerekiyor. chatID'nizi öğrenmek için aşağıdaki adımları uygulayabilirsiniz:
- Botunuza merhaba yazın.
- https://api.telegram.org/bot*api-key*/getUPdates yıldızlar olmadan api anahtarınızı bot kelimesinin yanına yapıştırın.
- Hazırladığınız url tarayıcıda ziyaret edin.
Tespit edilen SQL Injection zafiyeti sonrası bot üzerinden mesaj gönderme
Aşağıdaki python dosyası, Sqlmap ile çalıştırıldığı zaman uygulamaya girilen chatID'ye bildirim göndermeye başlayacaktır.
sqlmap -u http://testphp.vulnweb.com/artists.php?artist=1 -p artist --alert="python3 script.py tarama1"
import requests
import argparse
import pdb
class cyberdetails:
def __init__(self, token, chatIDs=[]):
self.chatIDs = chatIDs
self.token = token
self.url = "https://api.telegram.org/bot"
self.parser = argparse.ArgumentParser(description="github.com/ferhatcil")
self.parser.add_argument('--name', required=False)
self.args = self.parser.parse_args()
def IFoundAnSql(self):
for i in self.chatIDs:
text = "Congratulations! You found an sqli%0A{}".format(self.args.name)
url = self.url + self.token + "/sendMessage?chat_id={}&text={}&parse_mode=Html".format(i, text)
requests.get(url)
app = cyberdetails("api-key", ['chatid'])
app.IFoundAnSql()
Bonus
Yukarıda paylaştığım scriptin biraz daha gelişmiş versiyonunu github hesabıma ekledim. Github hesabımdaki script ile:
- Botunuza taranmasını istediğiniz linki mesaj olarak gönderebilir ve tarama işlemini telefonunuz üzerinden yapabilirsiniz.
- Botunuzu belirli bir saniye kadar duraklatabilirsiniz.
https://github.com/ferhatcil/sqlimother
0 yorum:
Post a Comment
Note: Only a member of this blog may post a comment.