Bu makalede, Python kodlarını basit ve gelişmiş şekilde ele alarak bir zafiyet tarama scripti oluşturacağz. Her iki yaklaşım da farklı seviyelerde kullanıcı için özelleştirilmiştir. Ayrıca bu kodların her bir komutunu detaylıca açıklayarak ne yaptıklarını anlamanıza yardımcı olacağız.


Basit Zafiyet Tarama Scripti

Kullanılan Modüller

  1. socket – Ağ bağlantıları için.
  2. requests – HTTP istekleri için.

Kod Parçası ve Açıklamaları

import socket
import requests
  • socket: TCP ve UDP protokolleriyle ağ bağlantıları kurmak için kullanılır.
  • requests: HTTP protokolü kullanarak GET ve POST gibi istekler yapmak için kullanılır.
def menu():
    print("\n=== Basit Zafiyet Tarama Aracı ===")
    print("1. Port Tarama")
    print("2. HTTP Durum Kontrolü")
    choice = input("Seçiminizi yapın (1-2): ")
    return choice
  • menu: Kullanıcının hangi işlemi yapmak istediğini seçmesine olanak tanır.
  • input: Kullanıcıdan veri alır ve bir değişkene kaydeder.
def port_scan(target):
    print("\n[+] Port tarama başlıyor...")
    for port in range(1, 1025):
        with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
            s.settimeout(0.5)
            if s.connect_ex((target, port)) == 0:
                print(f"Port {port} açık.")
  • port_scan: Belirtilen hedefin açık portlarını tarar.
  • range(1, 1025): 1 ile 1024 arasındaki portları tarar (yaygın portlar).
  • socket.connect_ex: Port bağlantısını test eder; 0 dönerse başarılı bir bağlantı vardır.
def http_check(target):
    print("\n[+] HTTP durum kontrolü yapılıyor...")
    try:
        response = requests.get(f"http://{target}")
        print(f"HTTP Durumu: {response.status_code}")
    except requests.RequestException as e:
        print(f"HTTP Bağlantı Hatası: {e}")
  • http_check: Hedef adresin HTTP durum kodunu kontrol eder.
  • requests.get: Belirtilen URL’ye bir GET isteği yapar.
  • try-except: Hataları yakalamak için kullanılır.
def main():
    target = input("Hedef IP ya da Alan Adı: ")
    if not target:
        print("Hedef belirtilmedi, script sona eriyor.")
        return

    choice = menu()

    if choice == '1':
        port_scan(target)
    elif choice == '2':
        http_check(target)
    else:
        print("Geçersiz seçim!")

if __name__ == "__main__":
    main()
  • main: Kullanıcıdan hedef bilgisi alır ve seçilen işlemi yürütür.
  • if __name__ == "__main__": Kodun doğrudan çalıştırılıp çalıştırılmadığını kontrol eder.

Gelişmiş Zafiyet Tarama Scripti

Kullanılan Modüller

  1. socket – Ağ bağlantıları için.
  2. requests – HTTP istekleri için.
  3. os – Sisteme yönelik işletim sistemi komutları.
  4. nmap – Ağ taraması için (“python-nmap” kütüphanesi kullanılıyor).
  5. json – Sonuçları kaydetmek için.

Kod Parçası ve Açıklamaları

import socket
import requests
import os
import nmap
import json
  • os: Sistem seviyesindeki işletim komutlarını kullanmak için.
  • nmap: Nmap aracını Python üzerinden kontrol etmek için.
  • json: Verileri JSON formatında kaydetmek veya işlemek için kullanılır.
def menu():
    print("\n=== Gelişmiş Zafiyet Tarama Aracı ===")
    print("1. Port Tarama")
    print("2. HTTP Durum Kontrolü")
    print("3. Belirli Zafiyetleri Tespit Et")
    print("4. Tüm Seçenekleri Kullan")
    choice = input("Seçiminizi yapın (1-4): ")
    return choice
  • Ekstra seçenekler sunarak kullanıcıya daha fazla kontrol verir.
def port_scan(target):
    print("\n[+] Port tarama başlıyor...")
    scanner = nmap.PortScanner()
    scanner.scan(hosts=target, arguments='-sS -Pn -T4')
    results = []
    for host in scanner.all_hosts():
        print(f"\nHedef: {host}")
        for proto in scanner[host].all_protocols():
            ports = scanner[host][proto].keys()
            for port in ports:
                state = scanner[host][proto][port]['state']
                results.append({"port": port, "state": state})
                print(f"Port: {port}, Durum: {state}")
    return results
  • nmap.PortScanner: Hedefi Nmap ile tarar.
  • -sS: TCP SYN taraması.
  • -Pn: Ping atmadan tarama yapar.
def http_check(target):
    print("\n[+] HTTP durum kontrolü yapılıyor...")
    try:
        response = requests.get(f"http://{target}")
        print(f"HTTP Durumu: {response.status_code}")
        return {"url": target, "status_code": response.status_code}
    except requests.RequestException as e:
        print(f"HTTP Bağlantı Hatası: {e}")
        return {"url": target, "error": str(e)}
  • HTTP kontrolü JSON formatında detaylı sonuç döndürür.
def vuln_scan(target):
    print("\n[+] Zafiyet tespiti yapılıyor...")
    common_vulnerabilities = {
        "CVE-2022-1234": "Zafiyetli Apache Sunucusu",
        "CVE-2021-5678": "SSH Brute Force Açığı",
        "CVE-2023-2345": "Zafiyetli FTP Sunucusu",
    }
    open_ports = []
    try:
        for port in range(1, 1025):
            with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
                s.settimeout(0.5)
                if s.connect_ex((target, port)) == 0:
                    open_ports.append(port)
        print(f"Açık Portlar: {open_ports}")
        print("Zafiyetler:")
        for cve, desc in common_vulnerabilities.items():
            print(f"{cve}: {desc}")
        return {"open_ports": open_ports, "vulnerabilities": common_vulnerabilities}
    except Exception as e:
        print(f"Hata: {e}")
        return {"error": str(e)}
  • common_vulnerabilities: Belirli CVE zafiyetlerini listeleyen bir sözlük.
def save_results(results, filename="scan_results.json"):
    with open(filename, "w") as file:
        json.dump(results, file, indent=4)
    print(f"Sonuçlar {filename} dosyasına kaydedildi.")
  • JSON formatında tarama sonuçlarını kaydeder.

Tepkiniz ne oldu ?

Heyecanlı
0
Mutlu
0
Aşık
0
Emin değilim
0
Şapşal
0

İlginizi Çekebilir

Bir cevap bırakın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Daha fazlası:Geliştirme