1.弱类型比较
2.MD5 compare漏洞
PHP在处理哈希字符串时,如果利用”!=”或”==”来对哈希值进行比较,它把每一个以”0x”开头的哈希值都解释为科学计数法0的多少次方(为0),所以如果两个不同的密码经过哈希以后,其哈希值都是以”0e”开头的,那么php将会认为他们相同。
常见的payload有
0x01 md5(str)
QNKCDZO
240610708
s878926199a
s155964671a
s214587387a
s214587387a
0x02 sha1(str)
sha1('aaroZmOk')
sha1('aaK1STfY')
sha1('aaO8zKZF')
sha1('aa3OFF9m')
同时MD5不能处理数组,若有以下判断则可用数组绕过
if(@md5($_GET['a']) == @md5($_GET['b']))
{
echo "yes";
}
//http://127.0.0.1/1.php?a[]=1&b[]=2
现在更厉害了…自从王小云教授提出了MD5碰撞之后这个就成了大热门,现在网上流传一个诸多密码专家写的MD5碰撞程序,是根据一个文件,然后填充内容生成两个MD5值一样的文件(有一定失败率其实),然后生成的内容MD5就相同了…强网杯签到题,简直震惊…软件是fastcoll_v1.0.0.5,自行下载吧
3.ereg函数漏洞:00截断
ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE
字符串对比解析
在这里如果 $_GET[‘password’]为数组,则返回值为NULL
如果为123 || asd || 12as || 123%00&&&**,则返回值为true
其余为false
4.$key是什么?
别忘记程序可以把变量本身的key也当变量提取给函数处理。
<?php
print_r(@$_GET);
foreach ($_GET AS $key => $value)
{
print $key."\n";
}
?>
5.变量覆盖
主要涉及到的函数为extract函数,看个例子
<?php
$auth = '0';
// 这里可以覆盖$auth的变量值
print_r($_GET);
echo "</br>";
extract($_GET);
if($auth == 1){
echo "private!";
} else{
echo "public!";
}
?>
extract可以接收数组,然后重新给变量赋值,过程页很简单。