攻防世界进阶web买彩票
题目分析
首先是注册好一个账号,之后可以看到想要找到flag的条件是通过买彩票赚到足够的钱才能够买flag
查看附发现robots协议

可以知道这一道题是Git源码泄露问题,使用Githack-master下载好Git文件(其实也就是题目给出的附件,不过还是要知道怎么下载)
首先是要在命令行里使用Githack,先使用cd指令把当前目录切换到下载好Githack的目录下面,
我的话是直接打开Githack在的文件夹之后再路径框里面直接代开命令行
实际上Githack是通过里面的一个Python文件工作的
使用的方式是
python GitHack.py http:// (目标网址)/.git/

这是我踩的一个坑,后面才知道这理报错是因为pytohn2和python3的语法不一样,现在的话这个Githack要通过python2的版本来使用,也可以按照报错把Githack.py里面的25行改一下,,,这里的话我安装的是双版本的python,所以直接使用python2快来执行这一指令
下载好之后会在Githack的目录下出现下载好的Git文件,

像是这样的,,,之后就是代码审计
可以发现有用的代码是在api.git
代码太长不全部放上来
1:首先是注册的函数,还有没有注册的返回的话
2:然后是钱不够时候的处理方法的函数
3:接下来是彩票的数字的随机数产生的方法(感觉这个是和c语言一样的)
4: 买彩票的函数定义
unction 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++;
}
}
switch ($same_count) { ///通过switch函数来实现功能,之前是有一个用户输入的数字和赢的数字的相同时的计数器same_count
case 2:
$prize = 5;
break;
case 3:
$prize = 20;
break;
case 4:
$prize = 300;
break;
case 5:
$prize = 1800;
break;
case 6:
$prize = 200000;
break;
case 7:
$prize = 5000000;
break;
default:
$prize = 0;
break;
}
}
5: 下面是一个界面处理动作的函数 也是使用了开关函数
switch ($data['action']) {
case 'buy':
require_keys($data, ['numbers']);
buy($data);
break;
case 'flag':
flag($data);
break;
case 'register':
require_keys($data, ['name']);
register($data);
break;
default:
response_error('invalid request');
break;
}
6: 关键点是这段
for($i=0; $i<7; $i++){
if($numbers[$i] == $win_numbers[$i]){
$same_count++;
}
这段的话看得出条件的判断“==”这是弱比较,在python学过弱比较的话ture 和数字字符串是相等的,,在python;里面视角做布尔类型,
而且数字是一个个比较的 所以可以构造payload={true,true,true,true,true,true,true} ,这样的话每次返回的值都是真的计数器都会加一
这里的话就是漏洞;;;;;接下来的话那就顺理成章了
做法 !!!!!!!!!!!!!!!
使用burpsuit 抓包改包 具体的操作现在的话应该来说是应该是不需要记下来了
和以前的不一样的是要记得放包,最后还是在浏览器端赚够钱获得flag。

总结一下:
首先是Git泄露 robots协议
Githack使用
代码审计
burpsuit使用