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

CTF之WEB(php弱类型绕过)

PHP 的弱类型特性有时会导致意外的行为,特别是在类型比较时。这些特性可以被利用来绕过一些预期的安全检查。以下是一些常见的 PHP 弱类型绕过技巧及其解释:

类型介绍

1. 类型比较 (== vs ===)

在 PHP 中,== 是松散比较,而 === 是严格比较。松散比较会在比较前进行类型转换,而严格比较不会。

// 示例
var_dump(0 == '0'); // 输出: bool(true)
var_dump(0 === '0'); // 输出: bool(false)

2. 字符串与数字比较

PHP 在进行松散比较时,会将字符串转换为数字进行比较(如果可能)。

// 示例

var_dump('0e123' == '0e456'); // 输出: bool(true),因为两者都被视为科学计数法表示的0

var_dump('1e10' == '10000000000'); // 输出: bool(true),因为两者都被视为数值1e10


这种特性可以被用来绕过一些基于哈希值比较的验证,例如在某些密码重置功能中。

3. 布尔类型与字符串比较

PHP 在松散比较时,会将字符串 'false''0'''(空字符串)等视为布尔值 false

// 示例

var_dump('' == false); // 输出: bool(true)

var_dump('0' == false); // 输出: bool(true)

var_dump('false' == false); // 输出: bool(true)

4. 数组与布尔值比较

在松散比较中,空数组 [] 会被视为布尔值 false

// 示例
var_dump([] == false); // 输出: bool(true)
var_dump([] == 0); // 输出: bool(true)
var_dump([] == '0'); // 输出: bool(true)

5. 对象与布尔值比较

如果一个对象在松散比较中被转换为布尔值 false(例如,通过 empty() 函数),它会在比较中被视为 false

// 示例
class MyClass {}
$obj = new MyClass();
var_dump($obj == false); // 输出: bool(false),但注意 empty($obj) 会返回 true

防御措施

为了防范这些弱类型比较带来的问题,可以采取以下措施:

  1. 使用严格比较 (===):始终使用严格比较来避免类型转换带来的意外行为。
  2. 验证输入:严格验证用户输入,确保它们符合预期的类型和格式。
  3. 避免使用不安全的比较:例如,避免使用 == 来比较哈希值或密码。
  4. 类型转换:在比较之前显式地进行类型转换,以确保比较操作基于相同的类型

绕过措施

1.0e绕过

常见的Md5碰撞

QNKCDZO
0e830400451993494058024219903391
s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
s214587387a
0e848240448830537924465865611904
s214587387a
0e848240448830537924465865611904
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675


http://www.kler.cn/a/421618.html

相关文章:

  • Ubuntu 安装Ansible ansible.cfg配置文件生成
  • 解决Tomcat运行时错误:“Address localhost:1099 is already in use”
  • Marvell第四季度营收预计超预期,定制芯片需求激增
  • etcd-v3.5release-(2)-STM
  • Python性能优化:编码、计算与数据处理的极速方案
  • 二百七十八、ClickHouse——将本月第一天所在的那一周视为第一周,无论它是从周几开始的,查询某个日期是本月第几周
  • openGauss极致RTO流程讲解及运维方法
  • vue实现懒加载
  • 30分钟学会正则表达式
  • Wwise SoundBanks内存优化
  • renderExtraFooter 添加本周,本月,本年
  • 数据库——创建索引的原则
  • 学成在线day08
  • k8s 亲和性之Affinity
  • 《Python基础》之Pandas库
  • PostgreSQL认证培训需要什么条件
  • 上天入地,智能诊断,多语言支持,璞华IETM打造产品技术信息管理极致用户体验
  • Python虚拟环境管理工具:Pipenv
  • Linux-Ubuntu16.04摄像头 客户端抓取帧并保存为PNG
  • Golang教程第24篇(语言接口)
  • Meta-Llama-3-8B-Instruct 模型的混合精度训练显存需求:AdamW优化器(中英双语)
  • STM32G4系列MCU的Direct memory access controller (DMA)功能之一
  • 更多开源创新 挑战OpenAI-o1的模型出现和AI个体模拟突破
  • 删除 MySQL 的多余实例
  • Redis使用场景-缓存-缓存击穿
  • pytest(二)excel数据驱动