Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
lighttpd-win32-dotdot-space — lighttpd 1.4.85 — высокий уровень — удалённый — путь — нативный Win32 GET /..%20/ читает за пределами document-root | Kitploit
Инструменты/GitHubGitHub/abraxas/lighttpd-win32-dotdot-space
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийВеб-безопасностьТестирование на ПроникновениеЛаборатории и Практика
GitHubabraxas/lighttpd-win32-dotdot-space

lighttpd-win32-dotdot-space

lighttpd 1.4.85 — высокий уровень — удалённый — путь — нативный Win32 GET /..%20/ читает за пределами document-root

Репозиторий
46 дней назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Abraxas Labs - lighttpd-win32-dotdot-space

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  lighttpd-win32-dotdot-space

Разбор: https://abraxaslabs.tech/research/lighttpd-win32-dotdot-space

lighttpd-win32-dotdot-space

Класс: чтение файлов Доступ: удалённый

lighttpd 1.4.85 (4852959) - lighttpd

Нативный _WIN32 staticfile присоединяет document-root к rel_path после buffer_path_simplify. Simplify сворачивает ../ только когда третий байт равен /. http_response_prepare_physical удаляет завершающие пробелы и точки только из всего пути целиком. Поэтому GET /..%20/windows/win.ini остаётся /.. /windows/win.ini. Затем _wstati64 / _wopen без префикса \\?\ позволяют Win32 удалить пробел в каждом компоненте и трактовать этот сегмент как ...

Неаутентифицированный GET/HEAD на нативном Windows lighttpd читает обычный файл за пределами document-root, который может открыть учётная запись воркера. Unix/Linux — это не тот же остаток. Чтение файлов, не RCE.

Лаборатория — это гаджет тех самых функций закрепления. Это не живой нативный Win32-воркер. Последняя строка использует how=gadget.

IDCVE пока нет
КлассЧтение файлов (обход пути, нативный Win32 ..%20/)
ДоступУдалённый (неаутентифицированный GET/HEAD)
CWECWE-22
CVSSВысокий: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Продуктlighttpd1.4
Затронуто1.4.85 (4852959e67ef51ea68084984400d3264b854c97d) нативный _WIN32
Аутентификациянет. По умолчанию mod_staticfile
ЛицензияGNU Affero GPL v3.0
Лабораториятолько 127.0.0.1, how=gadget

Что может сделать атакующий

Требуется нативный Windows lighttpd, обслуживающий статические файлы. Учётная запись воркера должна иметь возможность открыть целевой обычный файл.

ПривилегияМетод / sinkДоказано в лаборатории или выведено
Чтение файла за пределами document-rootНеаутент. GET /..%20/<name>Доказано в лаборатории (гаджет). Тело HTTP 200 — это секрет из родительского каталога
Тот же класс для другого завершающего ASCII-пробела/точки в нефинальном компоненте ..url-decode, затем simplify сохраняет .. Доказано в лаборатории для %20. Выведено для другого завершающего пробела/точки
HEAD по тому же путиstaticfile HEADВыведено. В лаборатории использовался GET
Отрицательный: настоящий /../buffer_path_simplify сворачивает ../Доказано в лаборатории. 404, упрощённый /windows/win.ini, без свидетеля
Отрицательный: Unix POSIX open несвёрнутой физической строкиopen("/srv/htdocs/.. /windows/win.ini")Доказано в лаборатории. ENOENT

Закрыто в этом остатке: Unix/Linux staticfile; Cygwin (то же удаление, POSIX open); %5C parseopt в 1.4.85; алиас CVE-2018-19052; Host CVE-2014-2324. Не RCE. Не запись.

Как я это нашёл

Я закрепил тег lighttpd-1.4.85. Двадцать охот. Стандартный Unix/Linux staticfile, FastCGI, proxy, TLS, auth, HTTP/2, alias/rewrite: ничего на этой планке. Волна парсера 1.4.81-1.4.85 уже закрыла trailers, конфликты заголовков CGI и недопустимый Content-Length бэкенда.

buffer_path_simplify сворачивает ../ только когда walk[2] == '/'. Удаление WIN32 в http_response_prepare_physical (src/response.c 334-360) — это хвост всего пути. _wstati64 / _wopen (src/fs_win32.c 24-77) передают UTF-16 без \\?\, поэтому Win32 удаляет завершающие пробелы в каждом компоненте и .. становится ... Физическое соединение — это doc_root + rel_path без проверки basedir после stat.

Ошибочные повороты, уже зафиксированные: трактовка Unix ENOENT как «не баг» (это отрицательный контроль); называние Cygwin нативным Win32; утверждение, что %5C в 1.4.85 — это тот самый остаток; раздувание чтения файла до RCE. Театральность: обратная оболочка. Оракул — тело ответа 200 от родительского каталога document-root.

Лаборатория

python3 lighttpd-win32-dotdot-space-Abraxas-Labs.py

или

cd lab
./run.sh

Лабораторная установка точно воспроизводит поведение buffer_urldecode_path, buffer_path_simplify (сопоставление '\\' в Win32), удаление хвостовых символов в response.c и _wstati64 без \\?\. Открытие через Unix POSIX служит отрицательным контролем. Разрешение пути в Win32 реализовано как такое же удаление хвостовых пробелов для каждого компонента, затем обработка . / .., затем открытие разрешённого пути через POSIX. HTTP через loopback 127.0.0.1:19400.

  1. GET /index.html -> 200 public-index, без свидетеля.
  2. GET /../windows/win.ini -> 404, упрощено до /windows/win.ini.
  3. GET /..%20/windows/win.ini -> декодировано в /.. /windows/win.ini, упрощение сохранило пробел, Unix ENOENT, Win32 разрешил в /srv/windows/win.ini, 200 со свидетелем.
SUCCESS lighttpd-win32-dotdot-space how=gadget win32-get=200 unix-open=enoent simplify-kept-dotdot-space=yes LIGHTTPD-WIN32-DOTDOT-SPACE-WITNESS

Исправление

Удаляйте завершающие пробелы и точки для каждого компонента пути перед simplify, либо добавляйте префикс \\?\ к Win32-открытиям и отклоняйте физический путь, который не остаётся внутри document-root.

Ссылки

  • github.com/lighttpd/lighttpd1.4 тег lighttpd-1.4.85 (4852959e67ef51ea68084984400d3264b854c97d)
  • src/buffer.c · src/response.c · src/fs_win32.c
  • Исправлено рядом (не этот остаток): CVE-2025-12642 trailers · 1.4.85 %5C parseopt · CVE-2018-19052 alias · CVE-2014-2324 Host
  • CWE-22

Лицензия

GNU Affero GPL v3.0. См. LICENSE. Только для лабораторной среды с loopback. Без гарантий.

Скачать инструмент