Saturday, January 30, 2021

Başarılı bir SQL Injection Saldırısını Telegram Botu Üzerinden Öğrenmek

İç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

Görseller






0 yorum:

Post a Comment

Note: Only a member of this blog may post a comment.

 

Copyright © 2021 Vulnerability Database | Cyber Details™

thank you Templateism for the design - You should have written the code a little more complicated - Nothing Encrypted anymore