xctf中的Lottery(.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++;
		}
	}
	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]);
}

这个函数出了一点问题。。

当然我这么的菜,肯定是看题解写出来的,上网上一找,找到了苏老大的题解。。。。

自己一开始就专注于分析这个文件(通读代码),于是将用户的输入甩到一边去了。。。。

$numbers = $req['numbers'];//接受到数值
	$win_numbers = random_win_nums();//得到一个7位的随机值
	$same_count = 0;
	for($i=0; $i<7; $i++){
		if($numbers[$i] == $win_numbers[$i]){//没有将我们发过去的值过滤,直接用于比较
			$same_count++;

利用:PHP弱类型的比较,例如 true==[1-9]
于是我们只要传入一个数组都为true的值就可以了

xctf中的Lottery(.git源码泄露)_第1张图片

多发送几次攒够了钱就去买flag233

你可能感兴趣的:(php)