[羊城杯2020]Blackcat

源码看看:发现他要我们听听歌,发现可以下载,直接编辑一下发现:

1

1
2
3
4
5
6
7
8
9
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']);

分析代码:

1.要使用POST方式提交参数Black-Cat-Sheriff和One-ear;
2.getenv()函数定义:取得系统的环境变量;
3.使用POST方式提交White-cat-monitor,使用hash_hmac函数加密key为 clandestine赋值给变量clandestine,再次使用hash_hmac函数加密,密钥为clandestine,此时的clandestine为White-cat-monitor加密的结果,赋值给变量hh;
使hh===Black-Cat-Sheriff;
One-ear可控.

hash_hamc函数是关键点,学习一下
hash_hmac($algo, $data, $key)
当传入的$data为数组时,加密得到的结果固定为NULL;那么第二次的hash_hmac就是可控的.

预测hh的值,将其赋值给Black-Cat-Sheriff
2

payload(flag在环境变量里):

1
White-cat-monitor[]=0&Black-Cat-Sheriff=afd556602cf62addfe4132a81b2d62b9db1b6719f83e16cce13f51960f56791b&One-ear=;env

参考链接:https://blog.csdn.net/qq_46263951/article/details/119796671