PHP 黑魔法

PHP 黑魔法

弱比较

若字符串以数字开头,则取开头数字作为转换结果,若无则输出0

<?php 
echo "---------------- 弱比较黑魔法 -------------------------";
echo "<br>";echo "<br>";
if (1 == "1abc") {
   
	if (0 == "abc") {
   
		if ("0e132456789" == "0e7124511451155") {
   
			#常见于md5弱比较绕过
			echo "两个'=='的弱比较成功";
		}
	}
}

md5(),sha1()

md5()是不能处理数组的,md5(数组)会返回null,两个null相等绕过
sha1()也是同理

<?php 
echo "---------------- md5(),sha1()黑魔法 -------------------------";
echo "<br>";echo "<br>";
if (md5($md5_bug1[]=1) === md5($md5_bug2[]=1)){
   
	if (sha1($md5_bug1[]=1) === sha1($md5_bug2[]=1)){
   
		echo "md5传入数组绕过成功";
	}
}

转换

php会自动进行转换,比如16进制,科学计数法等,有时也用这点绕过

<?php 
echo "---------------- 转换黑魔法 -------------------------";
echo "<br>";echo "<br>";
echo "0x1e240 自动转换10进制:",0x1e240;
echo "<br>";
echo "123456 十进制数:",123456;
echo "<br>";
echo "1e240 科学计数法自动转换:",1e240;
---------------- 转换黑魔法 -------------------------<br><br>0x1e240 自动转换10进制:123456<br>123456 十进制数:123456<br>1e240 科学计数法自动转换:1.0E+240

strcmp()

int strcmp ( string $str1 , string $str2 )
参数 str1第一个字符串。str2第二个字符串。
如果 str1 小于 str2 返回 < 0;
如果 str1 大于 str2 返回 > 0;
如果两者相等,返回 0。

strcmp()函数只有在相等的情况下返回0。
php在5.3版本之前若传入的是一个非字符串类型数据,比如数组和对象,则会报错,但在报错的同时会返回0,那么我们传入一个数组,它会返回NULL,而判断使用了== ,但是NULL==0是bool(true),这样就成功绕过。

<?php
echo "---------------- strcmp()黑魔法 -------------------------";
echo "<br>";echo "<br>";
$strcmp_bug[]=1;
if (@strcmp($strcmp_bug, "you_don't_know_this_string") == 0){
   
	echo 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liu'1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值