Lottery
打开靶场后发现加载缓慢,并提供了源码。该功能类似猜数字游戏,选对 7 个号码即可得到相应奖励。
注册后输入任意 7 个数字发现未中奖。尝试访问网站其他功能发现获取 flag 需要对应余额。
尝试使用抓包工具修改余额,但刷新页面后余额恢复原状,无法直接通过前端修改。
检查猜数字页面的 api.php 代码审计。核心逻辑中随机生成七位数字(random_win_nums),赋值给$win_number。判断传入数字与随机生成数字是否相等时使用了两个等号(==)进行弱类型比较。
代码如下
//部分代码
function random_num(){
do {
$byte = openssl_random_pseudo_bytes(10, $cstrong);
$num = ord($byte);
} while ($num >= 250);
if(!$cstrong){ response_error('server need be checked, tell admin'); }
$num /= 25;
return strval(floor($num));
}
function random_win_nums(){
$result = '';
for($i=0; $i<7; $i++){
$result .= random_num();
}
return $result;
}
function buy(){
();
();
= [];
= [];
= ();
= ;
(=; <; ++){
([] == []){
++;
}
}
() {
: = ; ;
: = ; ;
: = ; ;
: = ; ;
: = ; ;
: = ; ;
: = ; ;
}
+= - ;
[] = ;
([=>,=>, =>, =>, =>]);
}


