PHP代码审计基础:PHP弱类型

本文介绍了PHP中的弱类型特性,包括变量类型、操作之间的比较,如empty()与isset()的用法,以及在CTF挑战中的常见应用。重点讨论了字符串与数字的比较,如何利用md5()、strcmp()、in_array()进行绕过或判断,并通过实例展示了array_search()在特定情况下的行为。最后提到了switch语句在整数匹配上的陷阱。
摘要由CSDN通过智能技术生成

变量类型

  • 标准类型:布尔型、整型、浮点、字符
  • 复杂类型:数组、对象
  • 特殊类型:资源

操作之间的比较

  • 字符串与数字
  • 字符串与数组
  • 数字与数组
  • 数字+e+数字

以上几点都包含在下面的代码中了:

<?php

# 字符串与数字
var_dump(0=="admin");   # True
var_dump(0=="1admin");  # False
var_dump(0=="admin1");  # True

# 字符串与数组
$arr = array();
var_dump("0"==$arr);    # False

# 数字与数组
var_dump(0==$arr);      # False

# xxexx
var_dump(0e123456==0e654321);   # True
var_dump(1e1==10);      # True
empty()与isset()
  • 变量为:0,“0”,null,’’,false,array()时,使用empty函数,返回的都为True
  • 变量未定义或者为null时,isset函数返回的都是faluse,其他都为true
<?php

$a = 0;
$b = null;
$c = '';

echo '<h2>empty</h2>';
var_dump(empty($a));
var_dump(empty($b));
var_dump(empty($c));

echo '<h2>isset</h2>';
var_dump(isset($a));
var_dump(isset($b));
var_dump(isset($c));

运行结果:
在这里插入图片描述

md5()

这个函数在CTF中还是比较常见的,一般就是一个if判断,两个用户可控的值传进来,经过md5()加密,对比加密后的结果,相等就输出flag,不等就终止程序。
在这里插入图片描述

<?php
error_reporting(0);
$arr1 = array('test1');
$arr2 = array('test2');
echo '<h1>数组绕过md5函数</h1>';
var_dump(md5($arr2)==md5($arr1));
echo '<h1>科学计数法绕过md5函数</h1>/';
var_dump(md5(QNKCDZO)==md5(s155964671a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值