1.MD5
PHP是一种弱类型语言,不必向PHP声明变量的数据类型
emm还是回到MD5这个函数吧。。。
MD5没什么 主要的错误在于 PHP的问题
他对
var_dump("admin" ==0);
var_dump("1admin" ==1);
var_dump("2admin" ==2);
var_dump("admin1" ==1);
var_dump("admin1" ==0);
会出现这样的问题
所以对于这样的代码绕过:如下
$_GET['name'] != $_GET['password']
MD5($_GET['name']) == MD5($_GET['password'])
一、
emm还是依靠弱类型
240610708 和 QNKCDZO 的MD5值都是0e开头
他们两个比较导致转换成 0==0 =>true
二、
可以利用数组来绕过
构建 =>name[]=1&password[]=1
可以达到 error=error
2、哈希的加密
$_GET['name'] == $_GET['password']
sha1($_GET['name']) === sha1($_GET['password'])
利用报错来处理这个
sha1函数是对字符串的,如果参数是数组就会报错
返回NULL
name[]=0&password[]=2;
3、strcmp比较的问题
if (strcmp($_GET[‘a’], $flag) == 0)
输入参数错误(数组)会返回0,从正常返回逻辑来说,也可以解释为相等
即是:a[]=0
4、部分弱类型的函数问题
is_numeric
:
该函数检测变量是否为数字或者字符串
如果是数字或者数字字符串,则返回TRUE 否则返回FALSE
问题是他是支持十六进制的
也就是说 可以把sql语句转成16进制绕过
//我不确定支不支持00截断。
in_array(value,array)
:
搜索数组中是否有存在的值
它在比较的时候会自动的做类型转换
【??。。我暂时还没有遇到
暂时先这样吧
看郁师傅的博客的时候
郁师傅写的:
加油吧少年,无论怎样未来还是会继续。希望你不要成为半途而废的人。