CTF-WEB进阶与学习

PHP弱类型

= = =在进行比较的时候,会先判断两种字符串的类型是否相等,再比较
= =在进行比较的时候,会先将字符串类型转化成相同,再比较
如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换成数值
并且比较按照数值来进行

转化规则

字符串的开始部分决定了它的值,如果该字符串以合法的数值开始,则使用该数值,否则其值为0。
e和E表示科学计数法
CTF-WEB进阶与学习_第1张图片

md5绕过

弱类型比较绕过

弱类型比较绕过
题目:

$a!=$b
md5($a)==md5($b)

解题思路:

找到不同$a和$b,两者的md5值均为0e开头的形式

CTF-WEB进阶与学习_第2张图片

null值绕过

题目:

$a=$b
md5($a)===md5($b)

解题思路:

使$a和$b为两个不同的数组 (array),
两者的md5值均为null。

CTF-WEB进阶与学习_第3张图片

碰撞绕过

题目:

(string)$a!=(string)$b
md5($a)===md5($b)

解题思路:

md5碰撞,找到两个不同的数据,但是两者的md5值相同。

CTF-WEB进阶与学习_第4张图片

习题讲解

第一关:
intval是取整的意思 
在php7中intval(‘2e4’) 等于20000 而intval(‘2e4’+1)等于20001 这个是正常的值
在php5中intval(‘2e4’) 等于2	 而intval(‘2e4’+1)等于20001 这个是因为php5有bug
我们通过查看http请求报文get可以看到往下移可以看到他使用的协议是php5
第二关:
他判断我们也没有传入md5的值有的话他会把我们传入的这个值赋值给md5然后判断我们赋值的md5是否等于我们当前值进行md5运算后的值
这里我们可以通过= =是不完全比较我们可以通过0e类型来绕过
第三关:
我们可以看到我们输入一个get_flag 他一眼是吧我们传入的这个参数给get_flag 
strstr是判断这个变量里面有没有空格前面加个!那就是里面这个参数不能有空格
他对我们这个变量进行str_irplace 这个函数是php中替换的函数如果我们变量里面有第一个cat他会进行替换成wctf2020 system是输出get_flag这个值就是我们要的东西
那我们就用ls查看文件发现我们要的文件是flag.php ${IFS}是空格的意思
more${IFS}flag.php

CTF-WEB进阶与学习_第5张图片
CTF-WEB进阶与学习_第6张图片
CTF-WEB进阶与学习_第7张图片

你可能感兴趣的:(网络安全)