攻防世界进阶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使用

 

posted @ 2021-01-20 20:59  ctfliar  阅读(480)  评论(0)    收藏  举报