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

攻防世界 Web 题解:SQL 注入与文件包含漏洞分析

攻防世界 Web 题解涵盖 SQL 注入与文件包含漏洞。Supersqli 题目中,攻击者通过堆叠注入发现特殊表,利用 handler 语句替代 select 绕过关键字过滤获取 flag。Warmup 题目存在 PHP 文件包含,通过构造特定 URL 参数绕过白名单检查及路径截取逻辑,读取隐藏文件获取 flag。重点在于 SQL 注入绕过技巧与 PHP 代码审计中的文件包含漏洞利用方法。

CloudNative发布于 2026/4/5更新于 2026/7/2645 浏览
攻防世界 Web 题解:SQL 注入与文件包含漏洞分析

文章配图


一、Supersqli

打开页面如图所示,初步筛查这应该是一道 SQL 注入题。

文章配图

确认为 SQL 注入题。

1' or 1=1 #

文章配图

接下来查询字段数。

字段数为 2。

1' order by 2 #

文章配图

尝试查询数据库,正常查询发现不行,被过滤了。

文章配图

但是没有过滤分号,那就可以堆叠注入联合 show。

1';show tables ;#

成功查询到一个特殊的表。

文章配图

1';show columns from 1919810931114514;#

查询发现此表含 flag,但 select 被过滤,如何查询 flag?

文章配图

利用 handler 代替 select 查询。

payload: 1';handler 1919810931114514 open as a;handler a read next;#

查询该表的数据,成功拿到 flag。

文章配图


二、Warmup

点开发现有提示 source.php。

文章配图

访问 source.php 和 hint.php。

是一堆代码,进行代码审计。

文章配图

访问 hint.php 提示我们 flag 在 fffffllllaaaagggg。

文章配图


代码审计
<?php highlight_file(__FILE__); //代码高亮 
class emmm {
    public static function checkFile(&$page) //checkFile 用于检查文件参数是否合法 &$page 表示通过引用传递参数,这样在函数内部对 $page 的修改会影响到函数外部的变量。
    {
        $whitelist = ["source"=>"source.php","hint"=>"hint.php"]; //定义一个白名单数组,里面包含允许包含的文件名(source.php 和 hint.php)
        if (! isset($page) || !is_string($page)) { //第一个 if 功能为检查$page 是否存在且为字符串类型如果不是则返回 false
            echo "you can't see it";
            return false;
        }
        if (in_array($page, $whitelist)) { ///检查$page 是否存在于白名单中存在则返回 true
            return true;
        }
        $_page = mb_substr( //截取$page 中?之前的部分存在$_page(mb_substr 是字符串截取函数,mb_strpos 是字符串查找函数)
            $page, 0, mb_strpos($page . '?', '?')
        );
        if (in_array($_page, $whitelist)) { //检查截取后$_page 是否在白名单中存在则返回 true
            return true;
        }
        $_page = urldecode($page); //对$page 进行 url 解码
        $_page = mb_substr( //截取?之前的部分存在$_page 中
            $_page, 0, mb_strpos($_page . '?', '?')
        );
        if (in_array($_page, $whitelist)) { //检查解码并截取后的$_page 是否在白名单中存在则返回 true
            return true;
        }
        echo "you can't see it";
        return false;
    }
}
if (! empty($_REQUEST['file']) && is_string($_REQUEST['file']) && emmm::checkFile($_REQUEST['file'])) //也就是说只有过掉 checkFile 方法才可以包含文件
{
    include $_REQUEST['file'];
    exit;
} else {
    echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
}
?>

经过如上审计我们得知如果想要拿到 flag 就需过掉 checkFile 方法。checkFile 方法有四个 if 判断语句:

  1. 第一个判断语句就是判断我们传进去的是否不为空且是字符串。
  2. 第二个判断语句判断我们传的值是否在白名单中。
  3. 第三个判断截取?之前部分后是否在白名单中。
  4. 第四个判断语句判断对我们传的值 URL 解码截取后是否在白名单中。

总得来说我们正常包含文件时 /source.php?file=........

但是他第三和第四个判断语句只截取?之前的而 file 则被筛掉导致无法包含。

所以只要我们变换一下顺序即可且第二个到第四个 if 判断只要有一个绕过即可。

Payload: ?file=source.php?../../../../../../ffffllllaaaagggg (绕过第三个 if 判断) Payload: /source.php?file=source.php?../../../../../../ffffllllaaaagggg(这样也可以)

成功拿到 flag。

文章配图


三、总结

1. Supersqli

漏洞类型:SQL 注入

考察点:绕过过滤和堆叠注入技巧

解题要点:

  1. 过滤检测:题目对常见的 SQL 注入关键字进行了过滤,如 select, update, delete 等。
  2. 堆叠注入:发现可以使用分号 ; 进行堆叠注入。
  3. 绕过方法:
    • 使用 prepare 和 execute 预处理语句绕过过滤。
    • 或者使用 handler 语句代替 select 进行数据读取。

关键 payload:

1';handler 1919810931114514 open as a;handler a read first;#

学习收获:

  • 堆叠注入的实际应用。
  • 预处理语句在 SQL 注入中的使用。
  • handler 语句作为 select 的替代方案。
  • 字符串拼接绕过关键字过滤的技巧。
2. Warmup

漏洞类型:代码审计与文件包含

解题要点:

  1. 源码分析:通过查看页面源码发现提示 source.php。
  2. 文件包含:访问 source.php 获取源代码进行审计。
  3. 漏洞点:
    • 存在文件包含功能,但添加了 ../ 和 ..\ 的过滤。
    • 使用 checkFile 函数进行白名单检查。
  4. 绕过方法:
    • 利用四层目录结构 ../../../../ 绕过检查。
    • 最终 payload 构造为 file=source.php?../../../../../ffffllllaaaagggg。

学习收获:

  • PHP 代码审计的基本方法。
  • 文件包含漏洞的利用技巧。
  • 目录遍历的绕过方法。
  • 白名单检查机制的绕过思路。
综合对比
方面SupersqliWarmup
漏洞类型SQL 注入文件包含
主要技巧堆叠注入、预处理语句、handler 语法目录遍历、白名单绕过
过滤机制关键字过滤路径符号过滤
解题关键找到未被过滤的替代语法构造足够深的目录结构绕过检查
难度等级简单简单

目录

  1. 一、Supersqli
  2. 二、Warmup
  3. 代码审计
  4. 三、总结
  5. 1. Supersqli
  6. 2. Warmup
  7. 综合对比
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • C++ 迭代器深度解析:从概念到 STL 实践
  • GLM-4.7 vLLM Ascend 推理性能优化实战:12 项核心措施
  • 本地部署开源 IndexTTS 2.0:环境配置与运行步骤详解
  • Python 7 个网络爬虫实战案例及源码解析
  • AR 滤镜触发机制:基于特定图案识别激活特效
  • 大模型落地困境分析与解决思路
  • 5 种生成模型(VAE、GAN、AR、Flow 和 Diffusion)对比与代码实现
  • YOLO12 WebUI 入门:使用最新目标检测模型
  • 基于 YOLOv8-v12 与 SpringBoot 的小麦叶片病害智能检测系统
  • 2024 大模型学习路线:从零基础到精通的系统指南
  • 前端防抖与节流实战:主流库选择与避坑指南
  • C++ 编程笔记:基础语法、核心特性与项目练习
  • C++ 二叉搜索树原理与增删查实现详解
  • Kafka 核心概念、架构与运维管理详解
  • 深入理解大模型预训练与微调:Pre-training 与 Fine-tuning 技术对比
  • Linux 网络基础入门(上)
  • LazyLLM 多 Agent 应用实践:源码部署与可视化 Web 调试
  • Win11 本地部署 OpenClaw 利用 WSL 集成飞书机器人功能
  • Windows Git 安装配置指南:避坑与最佳实践
  • 从原理到实践:AIGC与ASR/TTS技术在智能语音交互中的融合应用

相关免费在线工具

  • 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

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online