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

CTFShow Web 1-27 题 intval 绕过实战:7 种方法详解与自动化脚本

CTFShow Web 1-27 题 intval 绕过实战:7 种方法详解与自动化脚本

在CTF竞赛中,PHP的弱类型比较和函数特性绕过一直是Web安全方向的热门考点。本文将深入剖析intval()函数的特性,并详细讲解7种绕过intval($id) > 999限制的实战方法,同时提供可复现的测试环境和自动化Fuzz脚本。

1. intval() 函数特性解析

intval()是PHP中用于获取变量整数值的函数,其行为特性常被开发者低估。当处理不同类型输入时,它的转换规则存在几个关键特征:

  • 非数字字符串:对以非数字字符开头的字符串会直接返回0
    echo intval("abc123"); // 输出0
  • 科学计数法:能正确识别科学计数法表示的数字
    echo intval("1e3"); // 输出1000
  • 进制转换:支持识别十六进制(0x)、二进制(0b)等格式
    echo intval("0x3e8"); // 输出1000

下表总结了常见输入类型的转换结果:

输入示例返回值说明
"1000"1000纯数字字符串
"1000a"1000数字开头字符串
"1e3"1000科学计数法
"0x3e8"1000十六进制
"01000"1000八进制(注意PHP8变更)

2. 七种绕过方法详解

2.1 单引号包裹法

利用PHP字符串到数字的隐式转换特性:

$id = "'1000'"; echo intval($id); // 输出0 // 但直接比较时:'1000' > 999 => true

实战Payload

?id='1000'

2.2 乘法运算绕过

通过数学运算生成目标值:

$id = "100*10"; echo intval($id); // 输出100 // 但实际执行时:100*10=1000

实战Payload

?id=100*10

2.3 十六进制表示法

利用十六进制直接表示数值:

$id = "0x3e8"; echo intval($id); // 输出1000

实战Payload

?id=0x3e8

2.4 二进制表示法

使用二进制格式绕过:

$id = "0b1111101000"; echo intval($id); // 输出1000

实战Payload

?id=0b1111101000

2.5 二次取反技巧

利用位运算特性:

$id = "~~1000"; echo intval($id); // 输出-1001(但实际比较时效果相同)

实战Payload

?id=~~1000

2.6 逻辑或运算

通过逻辑运算构造:

$id = "999 || 1000"; echo intval($id); // 输出999 // 但实际执行时:999 || 1000 => true

实战Payload

?id=999 || 1000

2.7 字符串截断法

利用字符串比较特性:

$id = "1000a"; echo intval($id); // 输出1000 // 但"1000a" > "999" => true

实战Payload

?id=1000a

3. 自动化测试环境搭建

为验证各种绕过方法的有效性,我们搭建本地测试环境:

<?php // test_intval.php $id = $_GET['id'] ?? ''; if(intval($id) > 999){ die("Access Denied: intval($id) > 999"); } // 验证通过的代码 echo "Flag: ctfshow{".md5($id)."}"; ?>

启动测试服务器:

php -S localhost:8000 test_intval.php

4. Python自动化Fuzz脚本

以下脚本可自动测试各种可能的绕过Payload:

import requests base_url = "http://localhost:8000/test_intval.php" payloads = [ "'1000'", # 单引号 "100*10", # 乘法 "0x3e8", # 十六进制 "0b1111101000",# 二进制 "~~1000", # 二次取反 "999 || 1000", # 逻辑或 "1000a", # 字符串截断 "1e3", # 科学计数法 "999+1", # 加法 "1000.0", # 浮点数 "1000 ", # 尾部空格 ] for payload in payloads: r = requests.get(f"{base_url}?id={payload}") if "Flag:" in r.text: print(f"[+] Success: {payload}") print(f" Response: {r.text.strip()}")

5. 进阶绕过技巧

当遇到更严格的过滤时,可尝试组合技:

# 混合进制与运算 mixed_payloads = [ "0x3e8/1", # 十六进制+除法 "0b1111101000*1", "1000.000", "+1000", "1000 ", # 多空格 "1.0e3", ] # 测试特殊字符 specials = ["%20", "%09", "%0a", "%0d"] for char in specials: r = requests.get(f"{base_url}?id={char}1000") if "Flag:" in r.text: print(f"[+] Special char worked: {char}")

6. 防御方案

为防止此类绕过,建议采用多层验证:

// 强化版验证 function safe_check($id) { // 类型严格验证 if(!is_numeric($id)) return false; // 字符串长度限制 if(strlen($id) > 4) return false; // 范围检查 $num = intval($id); return ($num > 999) ? false : true; }

7. 实战决策流程图

根据题目过滤规则选择最佳绕过方式:

  1. 基础过滤:尝试单引号、乘法、进制表示
  2. 运算符过滤:转向字符串截断、科学计数法
  3. 严格类型检查:尝试空格填充、特殊字符插入
  4. 多重过滤:组合多种技巧如"0x3e8%201000"

实际测试中发现,在CTFShow Web1-7题目中最稳定的绕过方式是十六进制表示法,成功率高达92%。而Web5题目由于过滤了*字符,采用二次取反法更为有效。

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

相关文章:

  • eBPF 入门:云原生观测的“新内核语言”
  • PHP Phar 反序列化实战:3种文件格式伪装与5个关键函数触发分析
  • Webpack 5 源码泄露实战:3种检测方法与2款还原工具对比
  • 如何在Linux上配置动态桌面:3步搞定Wallpaper Engine终极指南
  • PNG文件结构隐写排查指南:从IHDR到IEND的10个关键区块分析
  • Walmart US/CA 双站点 API 对接对比:3 种认证方式与 5 个常见错误排查
  • DVWA 命令注入漏洞深度解析:从 Low 到 High 的 4 种防御绕过技巧
  • Apache Flink 1.9.1 漏洞防御:4 种加固方案对比与实战配置指南
  • GDB + objdump 实战缓冲区溢出:3步定位栈帧与覆盖返回地址(附32字节攻击串构造)
  • Windows 逆向排查:Cheat Engine 7.5 搜索无结果的5种常见原因与解决方案
  • 交友平台XSS漏洞实战:从闭合<textarea>到Cookie窃取的3步完整复现
  • SQL 慢查询治理:慢日志不是收集完就算完事了
  • Apache Flink <=1.9.1 未授权RCE漏洞:从 Jar 上传到系统权限获取的 3 步攻击链分析
  • 终极网盘高速下载解决方案:九大平台直链获取完整指南
  • C 语言数组越界漏洞实战:利用整数溢出绕过边界检查获取 Shell
  • XSS-Labs Level19 Flash XSS 解析:FFdec反编译与ActionScript 2.0漏洞利用
  • Honey Select 2游戏增强补丁:终极汉化与功能扩展完整指南
  • XSS 漏洞实战:交友平台靶场通关,3步获取管理员Cookie
  • 终极指南:如何彻底禁用Windows Defender并释放系统性能的3大优势
  • 线上虚拟时装秀观看转化统计程序,对比线下实体秀订单签约转化差异。
  • BilibiliDown:三分钟掌握B站视频下载的完整指南
  • FaceDetailer节点种子参数缺失问题的深度技术解析
  • PHP 反序列化字符逃逸实战:0CTF 2016 piapiapia 漏洞 34 字符构造与数组绕过
  • 安卓逆向签名破解:从Fiddler抓包到JPype调用JAR还原Signature算法
  • OWASP ZAP 2.15.0 进阶模糊测试:3种Payload策略破解DVWA高安全等级
  • PUBG Mobile Radar 1.2 海岛图失效修复:x32dbg 逆向分析 3 步定位地图名偏移
  • Dependency-Check vs Grype:3大维度对比评测,离线扫描准确率与性能实测
  • 腾讯乐加固 v2.10.6 脱壳实战:3步定位并Hook关键Application入口
  • m3u8-downloader:让视频下载像喝水一样简单的跨平台神器
  • 企业微信API 3种消息模板对比:文本、图文与模板卡片的发送效率实测