网安入门24——PHP代码审计

intval()

PHP intval() 函数 菜鸟教程

  1. 这段代码先GET传入一个num
  2. isset函数确认非空
  3. 然后赋值给num变量
  4. 由preg_match来做正则匹配,如果检测到字符0-9,程序死亡
  5. 如果intval($num)的值为true,则回显flag

仔细看这些要求,只有给num传入一个非空的array,才可以返回1
在这里插入图片描述
payload:默认只给数组下标为0的地方赋值
?num[]=w
?num[]=

新的一道题:
在这里插入图片描述
这里简单分析,需要$num==="4476"为false,又需要intval($num,0)===4476为true
那就需要intval的第二个参数来决定进制了
在这里插入图片描述
payload:
?num=0x117c ?num=01054 ?num=4476.1 ?num=4476w

弱类型

官方文档在这里插入图片描述在这里插入图片描述

PHP是个弱类型语言,不需要赋给初始类型
==是弱类型校验,只校验值不校验类型
先将字符串类型转化成相同,再比较
===是强类型校验,既校验值也校验类型
先判断两种字符串的类型是否相等,再比较
<、>、<=、>=都存在和==相同的弱类型,原理相同!!!
在这里插入图片描述
这段代码与上一段不同,变成了两个等号,上一关的方法只有?num=4476.1还可以用,其他都不行了

md5()

PHP md5() 函数 菜鸟教程
PHP处理0e开头md5时hash字符串漏洞
当字符串与数字使用==进行比较时,会将字符串类型转换成数字型再进行比较(如果两边都是字符串,则双方都转换为数字型),只比较转换后的数值的大小

  1. 当字符串的开始部分不存在数值时会把该字符串转换成数值0
  2. 当字符串的开始部分有合法数值时,会把该字符串转换成该合法数值(取从最开始后面连续的数值,可以见下面的例子)
  3. 当字符串中存在合法数值但合法数值不在开始部分,那么字符串仍然会转换成数值0
  4. 当字符串中包含e或E时,系统会将其识别为科学记数法(0^n均为0)(0e123456=0E789=0)

1,2,3点总结:字符串的开始部分决定了它的值,如果该字符串以合法的数值开始,则使用该数值,否则其值为0。
在这里插入图片描述
观察代码,需要a!=b,又需要md5(a)=md5(b)
在这里插入图片描述
那就可以使用处理数组返回null的特性了
payload:a[]=1&b[]=2
还有就是0e开头科学计数法的特殊姿势
payload:a=QLTHNDT&b=EEIZDOI
在这里插入图片描述

最后就是对应的强类型关卡,先比较类型的话,就只能用数组了
payload:a[]=1&b[]=2

is_numeric()

PHP is_numeric() 函数
payload,代码,如图在这里插入图片描述

parse_str()

PHP parse_str() 函数 菜鸟教程
payload,代码,如图
在这里插入图片描述
在这里插入图片描述

$$变量覆盖

两个$$是 可变变量,就是一个变量的变量名可以动态的设置和使用

<?php
 $a="hello";
 $hello="world";
 echo $a." ".$$a;
?> 

以上输出 hello world
payload,代码,如图
在这里插入图片描述

在这里插入图片描述
最后了解一个函数
PHP var_dump() 函数 菜鸟教程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

挑不动

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

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

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

打赏作者

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

抵扣说明:

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

余额充值