很久没写ctf的wp了,今天这道题写了俩个小时,从工具安装配置到使用,总之费了不少心思,所以就来写个wp。
首先这道题是通过用moeny买flag,初始你有20元,但是需要花费9990000元才可以,唯一的途径就是买彩票。
第一步:
首先我们拿到网址,利用御剑扫描,或者在kali利用dirsearch工具扫描
此时我们扫到了git,所以这道题八成是git泄露。
第二步:
我们可以通过Githack来将这些文件保存下来进行代码分析。
GitHack是一个.git泄露利用脚本,通过泄露的.git文件夹下的文件,重建还原工程源代码。
渗透测试人员、攻击者,可以进一步审计代码,挖掘:文件上传,SQL注射等web安全漏洞。
python3 GitHack.py 网页地址
拿到泄露的源码之后开始分析代码,我们尝试在彩票号码这里动手脚,我们发现
这里是将输入的numbers跟正确的彩票号码进行比较,这里双等于不考虑数据类型,true1,true2,在这里通过强制类型转换,只要不是0,都是正确的。
这里补充一个知识点“=”“”“=”的区别
在PHP中,=,和=是三种不同的操作符,用于不同的用途:
-
“=”:赋值操作符。它用于将一个值赋给一个变量,例如: a = 10 ; 将 10 赋给变量 a = 10; 将10赋给变量 a=10;将10赋给变量a。
-
“==”: 等于操作符。它用于比较两个值是否相等,不考虑数据类型。如果两个值相等,则返回true;否则返回false。例如: a = = 10 ; 判断 a == 10; 判断 a==10;判断a是否等于10。
-
“===”: 全等操作符。它用于比较两个值是否相等,且要求数据类型也相同。如果两个值相等且数据类型相同,则返回true;否则返回false。例如: a = = = 10 ; 判断 a === 10; 判断 a===10;判断a是否全等于10。
下面是一个示例来说明它们的区别:
```php
$a = 10; // 赋值操作
$b = "10";
$c = 20;
var_dump($a == $b); // 输出: bool(true),因为在进行比较时,会自动进行类型转换,将字符串转换为整数,所以相等
var_dump($a === $b); // 输出: bool(false),因为全等操作要求值和类型都相同,而$a是整数型,$b是字符串型
var_dump($a == $c); // 输出: bool(false),因为$a和$c的值不相等
var_dump($a === $c); // 输出: bool(false),为$a和$c的值不相等
总结:
- "="是赋值操作符,用于将一个值赋给一个变量。
- "=="是等于操作符,用于比较两个值是否相等,不考虑数据类型。
- "==="是全等操作符,用于比较两个值是否相等,且要求数据类型也相同。
### 第三步
既然true可以使得2==true的话,我们可以想到,把7个号全改成true,这样进行匹配的时候,就可以获得最高奖项。话不多说,直接抓包重放,修改形式:"numbers"=[true,true,true,true,true,true,true]即可
![在这里插入图片描述](https://img-blog.csdnimg.cn/ecaf4ff0c03c41edb7312e3b86ee6450.png#pic_center)
构造两次钱就够了(要注意当生成的win_number中不含0时才会得5000000,构造两次得的钱不够的话再构造一次就好了)
### 总结涉及知识点
设计工具:御剑,GitHacK,bp
涉及知识点:git泄露,代码审计,弱比较