CTF新手避坑指南:攻防世界Lottery靶场.git泄露与逻辑漏洞的双重利用

张开发
2026/4/18 22:56:24 15 分钟阅读

分享文章

CTF新手避坑指南:攻防世界Lottery靶场.git泄露与逻辑漏洞的双重利用
CTF新手避坑指南攻防世界Lottery靶场双重漏洞实战解析刚接触CTF比赛时面对各种靶场题目总有种无从下手的感觉。记得我第一次做Lottery这道题时盯着购买界面整整半小时明明感觉有漏洞却不知道如何利用。直到后来系统学习了.git泄露和弱类型比较漏洞的组合利用才发现这类题目其实有章可循。今天我们就以攻防世界Lottery靶场为例手把手带你破解这个典型的信息泄露逻辑漏洞组合题。1. 靶场初探与常见误区新手接触Lottery靶场时往往会陷入几个典型误区。首先是盲目操作——注册账号后直接进入buy界面随意输入7个数字发现余额增加了5元就以为找到了财富密码。实际上这种随机尝试不仅效率低下还可能触发系统的防刷机制比如弹窗警告。另一个常见错误是忽略基础侦察。很多选手一上来就盯着buy.php页面反复刷新却忘了检查是否存在目录遍历或源码泄露。我曾见过有队伍花了三小时逆向JavaScript最后发现关键漏洞其实在服务端api.php里。典型的新手操作流程注册test/test账号进入buy界面输入7个随机数发现余额异常变动后反复操作遇到防刷机制被阻断陷入僵局不知如何继续关键提示CTF比赛中当表面功能没有明显漏洞时一定要检查页面源代码注释常见敏感文件如.git/.svn接口通信数据包非常规输入测试2. 信息泄露漏洞挖掘实战成熟的CTF选手解题时第一步永远是信息收集。对于Web类题目目录扫描是必备技能。推荐使用dirsearch工具进行基础扫描python3 dirsearch.py -u http://靶场地址 -e php,git,bak扫描结果中若发现.git目录就是重大突破。这时可以用GitHack工具完整下载源码python2 GitHack.py http://靶场地址/.git/获取到的源码中重点检查以下文件文件路径重要性可能包含的关键信息api.php★★★★★核心业务逻辑代码config.php★★★★数据库配置/flagbuy.php★★★前端交互逻辑register.php★★用户注册逻辑在Lottery靶场中api.php暴露了所有关键逻辑。特别要注意buy函数中的这段代码for($i0; $i7; $i){ if($numbers[$i] $win_numbers[$i]){ $same_count; } }这里的弱比较就是突破口。同时config.php可能直接包含flag价格和内容$flag_price 9990000; $flag CTF{this_is_sample_flag};3. PHP弱类型漏洞深度利用PHP的弱类型比较是个老生常谈但屡试不爽的漏洞点。在Lottery靶场中我们需要让用户输入的7个数字全部等于系统生成的随机数。根据PHP的弱比较规则true 任何非空字符串123 1231e5 100000最可靠的利用方式是构造布尔值true。用Burp Suite拦截购买请求POST /api.php HTTP/1.1 Content-Type: application/json {action:buy,numbers:[true,true,true,true,true,true,true]}这样无论系统生成什么随机数7个位置的比较都会返回true每次可获得最高奖金5000000。实际操作时要注意先注册账号获取初始资金20元每次抽奖消耗2元净收益4999998通常2-3次抽奖即可攒够购买flag的金额漏洞原理对照表输入类型比较规则适用场景true任何字符串通用方案1e91000000000数字比较123abc123字符串转数字[]false数组特殊情况4. 组合漏洞的完整攻击链将.git泄露和弱类型漏洞结合可以构建标准化攻击流程信息收集阶段目录扫描发现.git泄露使用GitHack下载完整源码分析api.php找到buy函数漏洞分析阶段定位到弱比较研究PHP类型转换规则设计true数组的利用方案漏洞利用阶段Burp拦截修改请求体构造7个true值的数组多次请求快速积累资金flag获取阶段达到9990000余额调用flag接口购买获取完整flag内容这个流程不仅适用于Lottery靶场也是CTF比赛中信息泄露逻辑漏洞类题目的通用解法。建议新手在本地搭建测试环境修改不同参数观察响应变化比如尝试以下变种将true改为true观察效果差异测试混合类型如[true,1e3,123]修改Content-Type头看过滤机制5. 防御方案与学习建议作为开发者要防范此类漏洞需要注意信息泄露防护# Nginx配置禁止访问.git location ~ /\.git { deny all; }严格类型判断// 使用严格比较 if($numbers[$i] $win_numbers[$i]){ $same_count; }输入验证// 检查是否为合法数字 function is_valid_number($num){ return is_numeric($num) $num0 $num9; }对于CTF学习者我建议系统学习PHP类型转换规则掌握常见源码泄露利用工具建立标准的漏洞检查清单多分析历年CTF赛题wp最后分享一个实用技巧在Burp中可以把成功的数据包保存为模板下次遇到类似题目时快速修改重用。我习惯按漏洞类型分类存储请求样本比如/templates/type_juggling/http_request.bin/templates/git_leak/exploit.py

更多文章