Yavuzlar
Ana sayfaTelegram
  • Yavuzlar
  • VulnLab
  • CodinLab
  • 📚EĞİTİM
    • PHP
      • XAMPP kurulumu
      • VS Code Kurulum
      • 1.0 PHP Nedir
      • 1.1 Dosya Oluşturma
      • 1.2 Syntax (Yazım Kuralları)
      • 1.3 PHP'de Echo ve Print
      • 1.4 PHP'deki yorumlar
      • 1.5 PHP Değişkenleri
      • 1.6 Operatörler (Operators)
      • 1.7 Veri Türünü Alma
      • 1.8 PHP'de String
      • 1.9 PHP'de Sabitler
      • 2.0 PHP'de If Else Elseif
      • 2.1 Switch Case
      • 2.2 PHP'de Döngüler
      • 2.3 PHP'de Diziler (Arrays)
      • 2.4 PHP'de Süper Global Değişkenleri
      • 2.5 PHP'de Cookie (Çerez) Ve Session (Oturum) Yöntemleri
      • 2.6 Form işlemleri
    • C++
      • 1.0 Temeller
        • 1.1 Dosya Oluşturma
        • 1.2 Syntax (Yazım Kuralları)
        • 1.3 Yorum Satırları
        • 1.4 C++ Değişkenleri
          • 1.4.1 Değişken Türleri
        • 1.5 Operatörler (Operators)
        • 1.6 Namespace
        • 1.7 Kullanıcı Girdisi (User Input)
        • 1.8 C++ Stringleri (C++ Strings)
        • 1.9 Matematik (Math) Fonksiyonları
        • 1.10 Booleans
        • 1.11 If Else
        • 1.12 Switch
        • 1.13 While Döngüsü
          • 1.13.1 Do While Döngüsü
        • 1.14 For Döngüsü
        • 1.15 Break/Continue
        • 1.16 Diziler
        • 1.17 Structures
        • 1.18 Enums
        • 1.19 References
        • 1.20 Pointers
      • 2.0 Fonksiyonlar
      • 3.0 Sınıflar
        • 3.1 OOP
        • 3.2 Sınıflar ve Objeler
        • 3.3 Sınıf Methodları
        • 3.4 Yapıcılar (Constructors)
        • 3.5 Erişim Belirleyicileri (Access Specifiers)
        • 3.6 Kapsülleme (Encapsulation)
        • 3.7 Inheritance
        • 3.8 Polimorfizm (Polymorphism)
        • 3.9 Dosyalar (Files)
        • 3.10 İstisnalar (Exceptions)
        • 3.11 Tarih ve Zaman (Date and Time)
      • 4.0 Veri Yapıları (Data Structures)
        • 4.1 Veri Yapıları ve STL
        • 4.2 Vektörler (Vectors)
        • 4.3 Listeler (Lists)
        • 4.4 Yığınlar (Stacks)
        • 4.5 Kuyruklar (Queues)
        • 4.6 Deque (Çift Uçlu Kuyruk)
        • 4.7 Küme (Set)
        • 4.8 Maps
        • 4.9 Iterator
        • 4.10 Algoritmalar
  • 🛠️ARAÇLAR
    • Aircrack-ng
    • Airgeddon
    • Arjun
    • BeEF
    • Bettercap
    • Docker
    • Gelişmiş Wireshark Kullanımı (Advanced Wireshark Usage)
    • Google Dorks
    • Hping3
    • John the Ripper
    • Metasploit Framework
    • Netcat
    • Nmap
    • OSINT Framework
    • PEASS-ng
    • Sublist3r
    • XSS Scanner
    • Wireshark
    • ZAP
    • HYDRA
  • 🖥️İŞLETİM SİSTEMLERİ
    • Linux101
    • MBR
  • 🔑KRİPTOLOJİ
    • Dijital Sertifika ve İmzalar
    • Sezar Şifrelemesi
    • Steganografi
    • Veri Şifreleme (Data Encryption)
  • 🔏Network
    • Domain Name Server (DNS)
    • Firewall Nedir? Nasıl Çalışır ?
    • Ortadaki Adam Saldırısı (Man In The Middle Attack)
    • OSI Modeli
    • Sanal Özel Ağlar (VPN)
    • World Wide Web (WWW)
  • 🔐PRIVILEGED
    • Docker Escape
  • 📨Protokoller
    • ARP
    • DHCP
    • FTP
    • HTTP/HTTPS
    • SSH
    • TCP/IP
    • UDP
    • Wİ-Fİ Güvenlik Protokolleri (WEP/WPA/WPA2/WPA3)
  • 💻SİBER TEHDİT İSTİHBARATI
    • Gelişmiş Siber Tehdit İstihbaratı Nedir?
  • 🔒WEB GÜVENLİĞİ
    • 403 ByPass
    • API Güvenliği (API Security)
    • Broken Access Control
    • Bulut Güvenliği (Cloud Security)
    • Command Injection
    • Cross Origin Resource Sharing
    • Cross Site Request Forgery (CSRF)
    • Cyber Kill Chain
    • DDoS Saldırıları
    • File Upload Zafiyeti Nedir?
    • HTTP Request Smuggling
    • Insecure Direct Object Reference (IDOR)
    • Incident Response
    • Local File Inclusion (LFI)
    • NoSQL Injection
    • Pentest 101
    • Race Condition
    • Server Side Request Forgery (SSRF)
    • Server Side Template Injection (SSTI)
    • Spring4Shell
    • Two Factor Authentication Bypass
    • XML External Entity Attack (XEE)
  • 🤖YAPAY ZEKA
    • ChatGPT for Hacking
    • Siber Güvenlik ve Yapay Zeka
    • Yapay Zeka ile Sahte Fotoğraf Tespiti
  • 🌐YAZILIM
    • Düzenli İfadeler (Regular Expressions)
    • Elasticsearch Nedir?
    • Front-end Teknolojileri
    • Golang'da Arayüzler (Interfaces)
    • Go'da Concurrency ve Uygulamaları
    • Güvenli Kodlama (Secure Coding)
    • Java Overloading vs Overriding
    • JSON Web Token (JWT)
    • Material-UI
    • NextJS Nedir?
    • ReactJS Kancalar (Hooks)
    • ReactJS Nedir?
    • Redux Toolkit
    • SOLID Yazılım Geliştirme Prensipleri
    • SQL 101
    • UI / UX Nedir?
    • Veri Taşıma Nedir? (Database Migration)
    • Versiyon Kontrol Sistemleri ve GIT
  • 🔷DİĞER
    • Bug Bounty (Hata Ödülü) Nedir?
    • Popüler Yazılımların Kurulumları
      • Ubuntu Server 24.04 LTS Kurulumu
      • Ubuntu için Güncel Docker Engine Kurlumu
    • Güvenlik Operasyonları Merkezi Nedir?
    • Honeypot (Bal Küpü)
    • IoT Güvenliği Nedir?
    • ShellShock Exploit
    • Yük Dengeleyici (Load Balancer) Nedir?
Powered by GitBook
On this page
  • XSS Nedir?
  • Proje Genel Bakış
  • Gereksinimler
  • Kod Anlatımı
  • UrlCrawler Sınıfı
  • Adım adım bakalım:
  • XssScanner Sınıfı
  • Adım adım bakalım:
  • Kullanım
  • Başarılı Sonuç Veren Örnek Lablar
  • Sonuç
  • References

Was this helpful?

  1. ARAÇLAR

XSS Scanner

PreviousSublist3rNextWireshark

Last updated 4 months ago

Was this helpful?

XSS Nedir?

Cross-Site Scripting (XSS), bir bilgisayar korsanının diğer kullanıcılar tarafından görüntülenen web sayfalarına istemci tarafı komut dosyası enjekte etmesine olanak tanıyan bir tür bilgisayar güvenlik açığıdır. Kötü niyetli komut dosyası genellikle JavaScript ve HTML gibi istemci tarafı programlama dillerinde yazılır. XSS, kullanıcıların güvenliğini tehlikeye atan ve web uygulamalarını savunmasız bırakan bir tehdittir.

Proje Genel Bakış

Bu projede iki temel bileşen olan bir web crawler ve bir XSS tarayıcısından oluşur. Web crawler belirtilen bir web sitesini keşfeder, ilgili URL'leri yakalar ve bu URL'leri XSS tarayıcısına ileterek tarama yapar. XSS tarayıcısı, her URL'yi önceden tanımlanmış saldırı yükleriyle sistemli bir şekilde test ederek potansiyel güvenlik açıklarını tespit eder.

Gereksinimler

  • requests: Bu kütüphane HTTP isteklerini yönetmek için kullanılır.

  • BeautifulSoup: HTML içeriğini ayrıştırmak için kullanılır.

  • urllib3: SSL sertifikası uyarılarını bastırmak için kullanılır.

  • pprint: Veri yapılarını düzenli bir şekilde görüntülemek için kullanılır.

Bu kütüphaneleri aşağıdaki komutları kullanarak yükleyebilirsiniz:

pip install requests beautifulsoup4 urllib3 pprint

Kod Anlatımı

Projemiz iki temel sınıf içerir: UrlCrawler ve XssScanner.

UrlCrawler Sınıfı

UrlCrawler sınıfı, bir web sitesini keşfetmeye ve ilgili URL'leri kaydetmeye odaklanır.

class UrlCrawler:
    def __init__(self, base_url, max_depth=10, max_retries=3, retry_delay=5, timeout=10):
        self.base_url = base_url
        self.max_depth = max_depth
        self.max_retries = max_retries
        self.retry_delay = retry_delay
        self.timeout = timeout
        self.visited_urls = set()  
        self.urls_to_visit = [(self.base_url, 0)]  
        self.relevant_urls = set()  
        self.script_dir = os.path.dirname(os.path.abspath(__file__))
        self.output_file = os.path.join(self.script_dir, "url.txt")
        
    def clear_output_file(self):
        
        with open(self.output_file, "w") as f:
            pass
    
    def crawl_and_record_urls(self):
        self.clear_output_file()  
        
        while self.urls_to_visit:
            current_url, depth = self.urls_to_visit.pop(0)
            if current_url in self.visited_urls or depth > self.max_depth:
                continue
            self.visited_urls.add(current_url)
            if not current_url.startswith(self.base_url):
                continue
            retries = 0
            while retries < self.max_retries:
                try:
                    
                    response = requests.get(current_url, timeout=self.timeout, verify=False)
                    if response.status_code == 200:
                        soup = BeautifulSoup(response.text, 'html.parser')
                        with open(self.output_file, "a") as f:
                            f.write(current_url + '\n')
                            self.relevant_urls.add(current_url)
                        for link in soup.find_all('a'):
                            new_url = urljoin(current_url, link.get('href'))
                            if new_url.startswith(self.base_url):
                                self.urls_to_visit.append((new_url, depth + 1))
                        break
                except (requests.exceptions.RequestException, TimeoutError) as e:
                    print(f"Hata: {current_url} işlenirken hata oluştu: {e}")
                    retries += 1
                    time.sleep(self.retry_delay)
            if retries == self.max_retries:
                print(f"{current_url} adresi {self.max_retries} tekrar denemeden sonra işlenemedi")

        print("Bulunan ilgili URL'ler:")
        for url in self.relevant_urls:
            print(url)

Adım adım bakalım:

  • Başlatma: Sınıf, temel URL, maksimum derinlik, yeniden deneme yapılandırmaları vb. gibi parametrelerle başlatılır.

  • Keşif ve URL'leri Kaydetme: crawl_and_record_urls() yöntemi, keşif sürecini yönetir. Ziyaret edilecek URL'lerin bir sırasını korur ve ziyaret edilen URL'leri izler. Bu URL'lere HTTP istekleri yapılır ve HTML içeriği requests kütüphanesi kullanılarak çıkarılır.

  • Bağlantıları Ayrıştırma: İçerik alındığında, BeautifulSoup kütüphanesi HTML içeriğindeki tüm bağlantıları (<a> etiketleri) çıkarmanıza yardımcı olur. Bu bağlantılar temel URL ile birleştirilerek daha fazla keşif için yeni URL'ler oluşturulur.

  • Yeniden Deneme Mekanizması: Yeniden Deneme Mekanizması: Kod, bağlantı hatalarını zarif bir şekilde ele almak için bir yeniden deneme mekanizması içerir. Bir istek başarısız olursa, sistem belirtilen sayıda yeniden deneme yapmadan önce bekler.

  • Çıktı: İlgili URL'ler, url.txt adlı bir metin dosyasında saklanır.

XssScanner Sınıfı

XssScanner sınıfı, saldırı yükleri kullanarak XSS açıklarını tespit etmeye odaklanır.

class XssScanner:
    COLOR_RED = '\033[91m'
    COLOR_GREEN = '\033[92m'
    COLOR_YELLOW = '\033[93m'
    COLOR_END = '\033[0m'

    def __init__(self):
        self.vulnerabilities = []  

    def print_fail(self, message):
        print(f"{self.COLOR_RED}[!] {message}{self.COLOR_END}")

    def print_success(self, message):
        print(f"{self.COLOR_GREEN}[+] {message}{self.COLOR_END}")

    def print_info(self, message):
        print(f"{self.COLOR_YELLOW}[*] {message}{self.COLOR_END}")

    def get_all_forms(self, url):
        soup = BeautifulSoup(requests.get(url).content, "html.parser")
        return soup.find_all("form")

    def get_form_details(self, form):
        details = {}
        action = form.attrs.get("action", "").lower()
        method = form.attrs.get("method", "get").lower()
        inputs = []
        for input_tag in form.find_all("input"):
            input_type = input_tag.attrs.get("type", "text")
            input_name = input_tag.attrs.get("name")
            inputs.append({"type": input_type, "name": input_name})
        details["action"] = action
        details["method"] = method
        details["inputs"] = inputs
        return details

    def submit_form(self, form_details, url, payload):
        target_url = urljoin(url, form_details["action"])
        inputs = form_details["inputs"]
        data = {}
        for input in inputs:
            if input["type"] == "text" or input["type"] == "search":
                input["value"] = payload
            input_name = input.get("name")
            input_value = input.get("value")
            if input_name and input_value:
                data[input_name] = input_value
        self.print_info(f"[*] Payload {target_url} adresine gönderiliyor")
        self.print_info(f"[*] Veri: {data}")
        if form_details["method"] == "post":
            return requests.post(target_url, data=data)
        else:
            return requests.get(target_url, params=data)

    def scan_xss(self, url, payload):
        forms = self.get_all_forms(url)
        self.print_info(f"[*] {url} adresinde {len(forms)} form tespit edildi.")
        is_vulnerable = False
        for form in forms:
            form_details = self.get_form_details(form)
            content = self.submit_form(form_details, url, payload).content.decode()
            if payload in content:
                self.print_success(f"[+] {url} adresinde XSS tespit edildi")
                ##self.print_info("[*] Form ayrıntıları:")
                #pprint(form_details)
                is_vulnerable = True
                self.vulnerabilities.append({
                    "url": url,
                    "form_details": form_details,
                    "payload": payload,
                })
                break

        if not is_vulnerable:
            self.print_fail("[-] Bu payload için herhangi bir güvenlik açığı bulunamadı.")
        return is_vulnerable

    def scan_urls_with_payloads(self, urls, payloads):
        for url in urls:
            url = url.strip()
            self.print_info(f"Test Edilen URL: {url}")
            for payload in payloads:
                payload = payload.strip()
                is_vulnerable = self.scan_xss(url, payload)
                if is_vulnerable:
                    self.print_success("Güvenlik Açıkları:")
                    for vuln in self.vulnerabilities:
                        self.print_success(f"URL: {vuln['url']}")
                        self.print_info("Form Ayrıntıları:")
                        pprint(vuln["form_details"])
                        self.print_success(f"Yüklenen Payload: {vuln['payload']}")
                    break

        self.print_info("Tüm URL'lerin testi tamamlandı.")

Adım adım bakalım:

  • Form Çıkarımı: get_all_forms() fonksiyonu, belirtilen URL'nin HTML içeriğini çözümleyerek içerdiği tüm HTML formlarını çıkarır. Formlar, kötü niyetli komut dosyalarının potansiyel giriş noktalarıdır.

  • Form Ayrıntıları: get_form_details() fonksiyonu, her bir formu ayrıştırarak işlem URL'si, yöntem (GET/POST) ve giriş alanları gibi bilgileri toplar.

  • Saldırı Yüklerinin Gönderilmesi: submit_form() fonksiyonu bir formun ayrıntılarını alır ve giriş alanlarına saldırı yüklerini gönderir. Bu noktada gerçek güvenlik açığı testi gerçekleşir.

  • Güvenlik Açığı Tespiti: Her bir form için tarayıcı bir saldırı yükü gönderir ve yanıtta yükün yansıyıp yansımadığını kontrol eder. Eğer yansıyorsa, form zayıf olabilir ve XSS saldırısı başarılıdır.

Kullanım

  • Depoyu Klonlama: İlk olarak, projenin GitHub deposunu klonlayarak başlayın.

git clone https://github.com/iyad-alahmad/web-crawler-xss-scanner.git
  • Dizin Değiştirme ve Çalıştırma: Proje dizinine geçin ve betiği çalıştırın.

cd web-crawler-xss-scanner
python xss-scanner.py
  • Etkileşim ve İzleme: Ekrandaki talimatları takip ederek hedef bir URL girmeniz ve betiğin web sitesini keşfetmesi, URL'leri kaydetmesi ve XSS güvenlik açıklarını tarayabilmesini izleyebilirsiniz.

Başarılı Sonuç Veren Örnek Lablar

Sonuç

Bu şekilde projeyi sadece tanıtmakla kalmayıp temel bileşenlerini de açıklamış olduk. URL'leri keşfetmek için bir web crawler oluşturmanın ve potansiyel güvenlik açıklarını tespit etmek için bir XSS tarayıcısı oluşturmanın nasıl yapıldığını öğrenmiş olduk. Güvenlik dinamik bir alan olduğundan, bu tür pratiğe dayalı projeler anlayışımızı önemli ölçüde artırabilir.

References

  • Cross-Site Scripting (XSS) - Python Code

  • Cross-Site Scripting (XSS) - PortSwigger

  • Cross-Site Scripting (XSS) - OWASP

🛠️
XSS-Game
Vulnweb
Portswigger
Portswigger-encoded
iyad-alahmad - OverviewGitHub
Bu yazı Iyad Alahmad tarafından hazırlanmıştır.
Logo