本文主要是介绍【攻防世界】lottery,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
弱比较+代码审计
本题已提供源码,如果没提供,输入/robots.txt,发现/.git
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)弱比较。
这篇关于【攻防世界】lottery的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!