题目
目标
- git 泄露 源码审计
- php 弱类型
环境
- 无
工具
- burpsuite
解题思路
- 首先 访问 /robots.txt 或者 /.git/ 发现 Git 仓库可以 GitHack 拿到源码
- 漏洞在 api.php
function buy($req){ require_registered(); require_min_money(2);
$money = $_SESSION['money'];
$numbers = $req['numbers'];
$win_numbers = random_win_nums();
$same_count = 0;
for($i=0; $i<7; $i++){
if($numbers[$i] == $win_numbers[$i]){
$same_count++;
}
}
其中 $numbers
来自用户json
输入 {"action":"buy","numbers":"1122334"}
,没有检查数据类型。$win_numbers
是随机生成的数字字符串。
使用 PHP 弱类型松散比较,以"1"
为例,和TRUE
,1
,"1"
相等。 由于 json 支持布尔型数据,因此可以抓包改包,发送:
{"action":"buy","numbers":[true,true,true,true,true,true,true]}
当每一位中奖号码都不是0时即可中最高奖,攒钱买flag。
进入题目发现是一个购买彩票的网站,大概猜出flag是要买的
解题过程
输入任意用户名注册
在Claim Your Prize
栏果然看到需要买flag,但现在余额不足
通过看网站的robots.txt文件发现有.git
文件泄露(其实为了方便题目附件中已经给出了源码)
用工具GitHack
还原源代码发现api.php
文件中的一段抽奖代码存在true绕过
利用此处漏洞购买彩票,输入任意七位数字点击Buy抓包
将POST数据改成{"action":"buy","numbers":[true,true,true,true,true,true,true]}
多发送几次
然后回来购买flag,得到答案cyberpeace{d4f41f7632aa0c21782f6794aa631411}