进入场景后根据提示输入 yulige
,发现只能输入 yuli
。打开开发者工具(F12),修改input框中的选项,把 maxlength
参数的值改为一个较大的值(只要大于 yulige
长度即可)。提交按钮被禁用,打开开发者工具,取消 disabled
参数,即可提交。
此时进入maxlenth.php页面,页面中提示 flag不在这,I prepared a shell for you : sh3ll.php
,访问 sh3ll.php
。
页面内容如下
<?php
error_reporting(0);
highlight_file(__FILE__);
//echo "flag is in fl4g_is_here.php";
$cmd = $_POST['cmd'];
if(preg_match("/[A-Za-ko-z0-9]+/", $cmd)){
die("hacker!");
}
$blacklist = "~!@#%^$&\/*()()<>《》-_{}[]'/\":,";
foreach(str_split($blacklist) as $char) {
if(strchr($cmd, $char) !== false)
die('Big Hacker!!');
}
system($cmd);
?>
可以看到 preg_match("/[A-Za-ko-z0-9]+/", $cmd)
该函数并没有过滤 m、l、n
这三个字母,且 blacklist
该黑名单中并没有过滤 ?
这个通配符。
最终payload:cmd=nl ????????????????
注意:需要有16个 ?
,因为上述代码中给出 fl4g_is_here.php
具有16个字符。
查看网页源码即可