
一、Lottery
打开靶场后加载稍慢,但提供了源码。先不看代码,熟悉一下网站逻辑。
这应该是一个类似猜数字的游戏,选对 7 个号码即可得到相应奖励。

注册登录后,随便输入 7 个数字,发现一个也没中,扣了 2 元。

尝试点击其他功能,发现想要获取 flag 需要对应的余额。

思路很直接:利用 Burp Suite 抓包,看看能不能修改余额参数。

看似成功了,试着去换 flag,系统却提示没有足够的钱。原来页面上的数字修改后刷新就会变回原值,前端修改无效。

既然不能改余额,那就看看猜数字的页面有没有突破口。访问 api.php 进行代码审计。
核心逻辑如下:随机生成七位数字(random_win_nums),然后赋值给 $win_number。关键点在于判断传入数字和随机生成的数字时使用了两个等号 ==。在 PHP 中,这是弱类型比较,不检查类型,可以直接利用 true 来绕过验证。

核心代码如下:
{
{
= (, );
= ();
} ( >= );
(!){ (); }
/= ;
(());
}
{
= ;
(=; <; ++){
.= ();
}
;
}
{
();
();
= [];
= [];
= ();
= ;
(=; <; ++){
([] == []){
++;
}
}
() {
: = ; ;
: = ; ;
: = ; ;
: = ; ;
: = ; ;
: = ; ;
: = ; ;
}
+= - ;
[] = ;
([=>,=>, =>, =>, =>]);
}














