明显是代码审计
<?PHP
error_reporting(0);
require ‘flag.PHP‘;
$value = $_GET[‘value‘];
$password = $_GET[‘password‘];
$username = ‘‘;
for ($i = 0; $i < count($value); ++$i) {
if ($value[$i] > 32 && $value[$i] < 127) unset($value);
else $username .= chr($value[$i]);
if ($username == ‘w3lc0me_To_ISCC2019‘ && intval($password) < 2333 && intval($password + 1) > 2333) {
echo ‘Hello ‘.$username.‘!‘, ‘<br>‘, PHP_EOL;
echo $flag, ‘<hr>‘;
}
}
highlight_file(__FILE__);
Get方法传参,value的值不能在32到127之间,那怎么可能等于w3lc0me_To_ISCC2019。经查资料,得知chr()函数是除以256取余,那我们将w3lc0me_To_ISCC2019转换成ascii然后加256就OK了。
然后看password,GET的password的值是字符串,intval(‘十六进制‘)会返回0,但是intval(‘16进制+1‘),就会将16进制字符串强制转换为数型。所以就很容易绕过了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。