攻防世界 simple_php
<?php
show_source(__FILE__);//显示 PHP 文件的源码
include("config.php");// 包含了一个config.php文件
$a=@$_GET['a'];//获取GET 参数 a 和 b
$b=@$_GET['b'];
if($a==0 and $a)
{
echo $flag1;
}
if(is_numeric($b))//防止数字输入
{
exit();
}
if($b>1234)//如果 $b 大于 1234,将输出 $flag2
{
echo $flag2;
}
?>
代码审计
总结:a==0 且 a 为真,b 不是数字且 b>1234 这些条件同时满足才会返回 flag
PHP中,== 会自动转换类型然后进行比较,当一个字符串和一个数字进行比较时,PHP会尝试将这个字符串转换为一个数字。如下图这个例子中,字符串"2025a"会被转换为数字2025,因为在遇到非数字字符"a"时,转换就会停止。如果字符串不包含任何数字,那么它将被转换为0
所以
a可以构造成任意一个没有数字的字符串
b可以构造成2222a(任意一个比1234大的数+a),类型转换后为2222,大于1234
?a=='a'&b=2222a