Python yordamida Veb-serverlar Zaifliklarini Tahlil Qilish
Zaiflik tahlili veb-serverning xavfsizlik nuqtai nazaridan potentsial zaif joylarini aniqlashni o‘z ichiga oladi. Python dasturlash tili xavfsizlikka oid tahlillar uchun mos keladi va xavfsizlikka oid kutubxonalar ham mavjud. Bu qo‘llanma veb-serverlarda keng tarqalgan zaifliklarni Python yordamida qanday tekshirish mumkinligini o‘rgatadi.
Asosiy Maqsadlar
Zaifliklarni aniqlash: Potensial xatolar va xavfsizlik muammolarini topish.
Avtomatlashtirish: Python orqali skanerlash jarayonlarini avtomatlashtirish.
Hisobot tuzish: Topilgan zaifliklarni hisobot qilish.
Zarur Kutubxonalar
Zaifliklarni aniqlashda requests, BeautifulSoup, va socket kabi kutubxonalar foydali bo‘ladi. Keng tarqalgan kutubxonalarni o‘rnatib olish uchun quyidagi buyruqdan foydalanishingiz mumkin:
pipinstallrequestsbeautifulsoup4
1 Zaiflik Tahlili haqida Asosiy Nazariy Ma'lumotlar
Zaiflik tahlili orqali veb-serverda turli hujum usullari yordamida xavfsizlik xatolarini aniqlash mumkin. Eng keng tarqalgan zaiflik turlari:
SQL Injection (SQLi) – Ma’lumotlar bazasiga maxsus so‘rov yuborib noto‘g‘ri ma’lumotlar olish yoki tahrirlash.
Cross-Site Scripting (XSS) – Veb-sahifa orqali zararli skriptlar kiritish.
Server Versiyalarini Ayyorona Tekshirish – Veb-server va kutubxonalar versiyasidagi potentsial zaifliklarni aniqlash.
Ochilgan Portlarni Tekshirish – Xavfsizlikdan himoya qilinmagan ochiq portlarni aniqlash.
2 Python yordamida Asosiy Zaifliklarni Tekshirish
Server Bannerlarini Tekshirish
Ko‘plab serverlar HTTP javob sarlavhasida o‘zining versiya ma’lumotlarini beradi, bu esa versiyalardagi zaifliklardan foydalanishni osonlashtiradi.
import requestsdefcheck_server_banner(url):try: response = requests.head(url) server_info = response.headers.get("Server")if server_info:print(f"Server: {server_info}")else:print("Server banner topilmadi.")except requests.RequestException as e:print(f"So‘rovda xato yuz berdi: {e}")# URL uchun sinovcheck_server_banner("https://example.com")
SQL Injection Tekshiruvi
SQL Injection zaifligi URL orqali kiritilgan SQL so‘rovlarini noto‘g‘ri ishlashiga sabab bo‘lishi mumkin. Buni oddiy sinov bilan tekshirish uchun ' OR '1'='1 kabi foydalanuvchi kiritmalaridan foydalaniladi.
defsql_injection_test(url): payloads = ["' OR '1'='1","' OR 'a'='a","' OR 'x'='y"]for payload in payloads: test_url =f"{url}?id={payload}" response = requests.get(test_url)if"error"in response.text.lower():print(f"SQL Injection zaifligi topildi: {test_url}")else:print(f"SQL Injection sinovi muvaffaqiyatsiz: {test_url}")# URL uchun sinovsql_injection_test("https://example.com/item")
Eslatma: Bu testlar faqat o‘z serveringizda yoki ruxsat bilan bajarilishi lozim.
XSS (Cross-Site Scripting) Tekshiruvi
XSS zaifligi foydalanuvchi kiritgan zararli JavaScript kodlarni veb-sahifada ishlatish imkonini beradi.
defxss_test(url): payloads = ["<script>alert('XSS')</script>","<img src='invalid' onerror='alert(1)'>"]for payload in payloads: test_url =f"{url}?query={payload}" response = requests.get(test_url)if payload in response.text:print(f"XSS zaifligi topildi: {test_url}")else:print(f"XSS sinovi muvaffaqiyatsiz: {test_url}")# URL uchun sinovxss_test("https://example.com/search")
Ochilgan Portlarni Tekshirish
Ochiq portlar orqali server xavfsizligi zaiflashishi mumkin. socket moduli yordamida ochiq portlarni tekshirish mumkin.
import socketdefcheck_open_ports(ip,ports): open_ports = []for port in ports: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(1)if sock.connect_ex((ip, port))==0: open_ports.append(port) sock.close()if open_ports:print(f"Ochiq portlar topildi: {open_ports}")else:print("Ochiq portlar topilmadi.")# IP uchun sinovcheck_open_ports("192.168.1.1", [80, 443, 21, 22, 8080])
TLS/SSL Sertifikatni Tekshirish
TLS/SSL sertifikatlarining amal qilish muddatini tekshirish orqali xavfsizlikni oshirish mumkin.
Barcha yuqoridagi tekshiruvlarni avtomatlashtiruvchi funksiyani yarataylik. Bu kod bir nechta URL’ni tekshiradi va natijani konsolda chiqaradi.
defvulnerability_scan(url):print(f"\n[+] {url} manzili uchun zaifliklarni tekshirish\n")# 1. Server bannerlarini tekshirishcheck_server_banner(url)# 2. SQL Injection tekshiruvisql_injection_test(url)# 3. XSS tekshiruvixss_test(url)# URL’lar ro‘yxatiurls = ["https://example.com","https://another-example.com"]for url in urls:vulnerability_scan(url)
4 Xulosa va Tavsiyalar
Ushbu qo‘llanma veb-serverlar zaifliklarini Python yordamida qanday tahlil qilish mumkinligini o‘rgatadi. Python’da zaifliklarni aniqlash uchun ko‘plab kutubxonalar mavjud va ular yordamida xavfsizlik tahlilini avtomatlashtirish imkoniyatlari keng.
Tavsiya:
Barcha tahlillarni faqat ruxsat etilgan tizimlarda bajaring.
Topilgan zaifliklarni imkon qadar tezroq bartaraf etish yo‘llarini ishlab chiqing.
Serverlarni muntazam yangilang va xavfsizlik yangilanishlarini amalga oshiring.
Quyida Python yordamida veb-server zaifliklarini tahlil qiluvchi to‘liq dastur taqdim etilgan. Ushbu dastur quyidagi funksiyalarni bajaradi:
Server bannerini tekshirish.
SQL Injection zaifligini aniqlash.
XSS (Cross-Site Scripting) zaifligini aniqlash.
Ochiq portlarni tekshirish.
SSL sertifikatining amal qilish muddatini tekshirish.
Dasturda har bir zaiflikni aniqlash bo‘yicha alohida funksiya va ularni birlashtiruvchi asosiy funksiyani yaratdik.
import requestsimport socketimport sslfrom datetime import datetime# 1. Server bannerini tekshirishdefcheck_server_banner(url):try: response = requests.head(url) server_info = response.headers.get("Server")if server_info:print(f"[Server banneri]: {server_info}")else:print("[Server banneri]: Ma'lumot topilmadi.")except requests.RequestException as e:print(f"[Xato] Server bannerini tekshirishda xatolik: {e}")# 2. SQL Injection zaifligini tekshirishdefsql_injection_test(url): payloads = ["' OR '1'='1","' OR 'a'='a","' OR 'x'='y"] vulnerable =Falsefor payload in payloads: test_url =f"{url}?id={payload}"try: response = requests.get(test_url)if"error"in response.text.lower():print(f"[SQL Injection zaifligi]: {test_url}") vulnerable =Truebreakexcept requests.RequestException as e:print(f"[Xato] SQL Injection sinovida xatolik: {e}")ifnot vulnerable:print("[SQL Injection]: Zaiflik topilmadi.")# 3. XSS (Cross-Site Scripting) zaifligini tekshirishdefxss_test(url): payloads = ["<script>alert('XSS')</script>","<img src='invalid' onerror='alert(1)'>"] vulnerable =Falsefor payload in payloads: test_url =f"{url}?query={payload}"try: response = requests.get(test_url)if payload in response.text:print(f"[XSS zaifligi]: {test_url}") vulnerable =Truebreakexcept requests.RequestException as e:print(f"[Xato] XSS sinovida xatolik: {e}")ifnot vulnerable:print("[XSS]: Zaiflik topilmadi.")# 4. Ochiq portlarni tekshirishdefcheck_open_ports(ip,ports): open_ports = []for port in ports: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(1)if sock.connect_ex((ip, port))==0: open_ports.append(port) sock.close()if open_ports:print(f"[Ochiq portlar]: {open_ports}")else:print("[Ochiq portlar]: Zaiflik topilmadi.")# 5. SSL sertifikatning amal qilish muddatini tekshirishdefcheck_ssl_expiry(hostname): context = ssl.create_default_context() conn = context.wrap_socket( socket.socket(socket.AF_INET), server_hostname=hostname, ) conn.settimeout(5)try: conn.connect((hostname, 443)) ssl_info = conn.getpeercert() expiry_date = datetime.strptime(ssl_info["notAfter"], "%b%d %H:%M:%S %Y %Z") remaining_days = (expiry_date - datetime.now()).daysprint(f"[SSL Sertifikat muddati]: Amal qilish muddati - {expiry_date}")print(f"[SSL Sertifikat muddati]: Qolgan kunlar - {remaining_days} kun")exceptExceptionas e:print(f"[Xato] SSL sertifikatini tekshirishda xatolik: {e}")finally: conn.close()# Asosiy tahlil funksiyasidefvulnerability_scan(url,ip):print(f"\n[+] {url} manzili uchun zaifliklarni tekshirish\n")# 1. Server bannerlarini tekshirishcheck_server_banner(url)# 2. SQL Injection tekshiruvisql_injection_test(url)# 3. XSS tekshiruvixss_test(url)# 4. Ochiq portlarni tekshirishcheck_open_ports(ip, [80, 443, 21, 22, 8080])# 5. SSL sertifikatni tekshirishcheck_ssl_expiry(url.replace("https://", "").replace("http://", ""))# URL va IP adreslarni tahlil qilish uchun misolurl ="https://example.com"ip ="93.184.216.34"# `example.com` IP adresivulnerability_scan(url, ip)
Dastur qanday ishlaydi:
Server bannerini tekshirish: check_server_banner funksiyasi server javobidagi Server header ma’lumotlarini ko‘rib chiqadi va server haqida ma’lumotni chiqaradi.
XSS zaifligi: xss_test funksiyasi URL’ga XSS payloadlarini yuboradi va javobda payloadning mavjudligini tekshiradi.
Ochiq portlarni tekshirish: check_open_ports funksiyasi berilgan IP adresdagi portlarni tekshiradi va ochiq portlarni aniqlaydi.
SSL sertifikat amal qilish muddatini tekshirish: check_ssl_expiry funksiyasi SSL sertifikat amal qilish muddatini ko‘rib chiqadi va qolgan kunlarni aniqlaydi.
Eslatma: Dastur faqat ruxsat etilgan serverlarda ishlatilishi kerak, shuningdek, IP adres va URL lar aniq bo‘lishi lozim.