题目
<?php
show_source(__FILE__);
$username = "this_is_secret";
$password = "this_is_not_known_to_you";
include("flag.php");//here I changed those two
$info = isset($_GET['info'])? $_GET['info']: "" ;
$data_unserialize = unserialize($info);
if ($data_unserialize['username']==$username&&$data_unserialize['password']==$password){
echo $flag;
}else{
echo "username or password error!";
}
?>
思路
要解决这个问题,我们需要构造一个特殊的序列化数组,利用 PHP 松散类型比较的特性,使得无论$username和$password的值如何修改,比较结果都为真。
分析
-
代码逻辑:通过反序列化
info参数得到一个数组,检查其username和password是否与当前脚本中的变量值相等。 -
松散比较(==):PHP 在松散比较时会将不同类型的数据转换后再比较。例如,如果数组中的
username和password的值是true,而当前脚本中的password的值是非空字符串,那么比较也会成立。

最低0.47元/天 解锁文章
1014

被折叠的 条评论
为什么被折叠?



