题目

[攻防世界]-WEB高手进阶区-lottery_php

[攻防世界]-WEB高手进阶区-lottery_弱类型_02

目标

  • 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是要买的

解题过程

输入任意用户名注册

[攻防世界]-WEB高手进阶区-lottery_攻防世界_03

在​​Claim Your Prize​​栏果然看到需要买flag,但现在余额不足

[攻防世界]-WEB高手进阶区-lottery_弱类型_04

通过看网站的robots.txt文件发现有​​.git​​文件泄露(其实为了方便题目附件中已经给出了源码)

[攻防世界]-WEB高手进阶区-lottery_弱类型_05

用工具​​GitHack​​还原源代码发现​​api.php​​文件中的一段抽奖代码存在true绕过

[攻防世界]-WEB高手进阶区-lottery_CTF_06

利用此处漏洞购买彩票,输入任意七位数字点击Buy抓包

[攻防世界]-WEB高手进阶区-lottery_CTF_07

将POST数据改成​​{"action":"buy","numbers":[true,true,true,true,true,true,true]}​​多发送几次

[攻防世界]-WEB高手进阶区-lottery_git_08

然后回来购买flag,得到答案cyberpeace{d4f41f7632aa0c21782f6794aa631411}

[攻防世界]-WEB高手进阶区-lottery_php_09