【攻防世界】lottery

弱比较+代码审计

本题已提供源码,如果没提供,输入/robots.txt,发现/.git

php 复制代码
function buy($req){
	require_registered();
	require_min_money(2);

	$money = $_SESSION['money'];//接受用户原有money
	$numbers = $req['numbers'];//接受输入的数字
	$win_numbers = random_win_nums();//生成随机中奖号码
	$same_count = 0;//中奖数字的个数
	for($i=0; $i<7; $i++){
		if($numbers[$i] == $win_numbers[$i]){ //这里是一个弱比较==,如果数组中的值都是true的话,比较永远都是正确的
			$same_count++;
		}
	}

循环7次,每次输入的数据要与随机数字相同 。

随便输入7个数字,抓包,把numbers改为数组:true,true,true,true,true,true,true

知识点

在PHP中当转换为 boolean 时,以下值被认为是 FALSE :

(1) 布尔值 FALSE 本身

(2) 0

(3) 0.0

(4) 空字符串,以及字符串 "0"

(5) 空数组 (注意,一旦包含元素,就算包含的元素只是一个空数组,也是true)

(6)不包括任何成员变量的对象(仅 PHP 4.0 适用)

(7)特殊类型 NULL(包括尚未赋值的变量)

(8)从空标记生成的 SimpleXML 对象

(9)所有其它值包括-1都被认为是 TRUE (包括任何资源)

多刷几次,得到足够的钱买flag。

通过本题你要知道:

(1)尽管代码在多,也要认真看(一般靠直觉 )。

(2)弱比较。

相关推荐
鶴哥只手遮天11 小时前
Gitea源码深度剖析-第6章 Git 底层封装与仓库存储
git·开源
鶴哥只手遮天11 小时前
Gitea源码深度剖析-第2章 启动流程与配置体系
git·开源
鶴哥只手遮天11 小时前
Gitea源码深度剖析-第4章 数据库层与 ORM 体系(xorm)
git·开源
鶴哥只手遮天11 小时前
Gitea源码深度剖析-第5章 权限体系
git·开源
鶴哥只手遮天11 小时前
Gitea源码深度剖析-第13章 前端工程与模板体系
git·开源
鶴哥只手遮天11 小时前
Gitea源码深度剖析-第9章 REST API v1 体系
git·开源
鶴哥只手遮天11 小时前
Gitea源码深度剖析-第8章 Pull Request 全生命周期:Gitea 最复杂的子系统
git·开源
除不掉的灰色11 小时前
git回退提交前
git
认真恰饭11 小时前
Git push时警告邮箱暴露,推送失败
git
A心有千千结14 小时前
通过 SSH 反向代理让服务器借用本机网络访问 GitHub 的最佳实践
linux·服务器·网络·git·ssh·github