xctf攻防世界 Web高手进阶区 lottery

1. 直接进入实验环境,按照提示玩一遍

在这里插入图片描述
玩完后,直接账户为0,好家伙,赌博真不行,就这运气迟早输到裸奔。。。

再点点兑奖页面,发现购买flag需要$9990000,于是大胆猜测,这一题提示我们要想办法赢钱,去获得足够的money去购买到最终的flag!

2. 解题开始

  1. 猜测响应页面
    于是乎对于提示窗口信息,追溯到控制台,查看响应页面,发现是api.php页面触发回显,因此,我猜测后端响应页面api.php的代码审计对解题至关重要。
    在这里插入图片描述

  2. 思考如何拿到源码
    对于此类的非直接代码审计的问题,无非是拿到后台代码,控制台又没有直接显示,因此联想到之前的遇到的解法,利用.git泄露漏洞尝试拿到后台代码。

在此,我们尝试使用GitHack工具。代码仓库链接:https://github.com/BugScanTeam/GitHack注意,需要使用python2的环境运行!

git clone https://github.com/BugScanTeam/GitHack

如图:
在这里插入图片描述

运行脚本,克隆仓库

python2 GitHack.py http://111.200.241.244:64897/.git/

如图:
在这里插入图片描述

  1. 拿到了代码,根据1的思路,审计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++;
		}
	}
	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;
	}
	$money += $prize - 2;
	$_SESSION['money'] = $money;
	response(['status'=>'ok','numbers'=>$numbers, 'win_numbers'=>$win_numbers, 'money'=>$money, 'prize'=>$prize]);
}

我们可与看到if($numbers[$i] == $win_numbers[$i]),这个判断条件是非严谨的判定,当true与任何数字对比,结果都返回true,因此,可以想到伪造payload,实现后台判断逻辑的欺骗。

3. burpsuite走起

抓到购买彩票的包,如图:
在这里插入图片描述
将其中的numbers修改为bool类型的数值,如图:
在这里插入图片描述
刷新页面可以看到钱增加了,于是开心的多刷了几次,假装感受一下中间的快乐

4. 开心的购买flag

在这里插入图片描述

5. 总结

  • 考察.git漏洞
  • 代码审计和追踪
  • burpsuite抓包和测试

总之这道题还是很温柔的,如有问题,请指正

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

l8947943

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值