php中
== 转化为相同类型后比较
=== 先判断数据类型后比较数值
var_dump("asdf"==0);#bool(true)
var_dump("asdf"==1);#bool(false)
var_dump("0asdf"==0);#bool(true)
var_dump("1asdf"==1);#bool(true)
1、md5撞库
例:
<?php
include_once("flag.php");
if(isset($_GET['username'])&&isset($_GET['password'])){
$logined=true;
$username=$_GET['username'];
$password=$_GET['password'];
echo "username md5:";
print(md5($username));
echo "<br />"."password md5:";
print(md5($password));
echo "<br />";
if(!ctype_alpha($username)){$logined=false;}
if(!is_numeric($password)){$logined=false;}
if(md5($username)!=md5($password)){$logined=false;}
if($logined){
print($flag);
}else{
echo "falied";
}
}
?>
ctype_alpha函数,检验字符串是否为纯字母
is_numeric函数,校验字符串是否为纯数字或纯数字字符串
使用以0e开头的md5值即可绕过(0e科学计数);
tipes:md5等字符串处理函数没有对数组的处理能力且返回值为null;
例:
<?php
include_once("flag.php");
$a=$_GET['a'];
$b=$_GET['b'];
var_dump(md5($a));
var_dump(md5($b));
if(md5($a)===md5($b)){
print($flag);
//echo 'success';
}
var_dump(sha1($a));
?>
例:
<?php
$password="qaz123";
if(isset($_REQUEST['password'])){
if(strcmp($_REQUEST['password'],$password)==0){
echo "success";
exit();
}else{
echo "password wrong";
}
}
?>
该漏洞触发点为strcmp函数无法处理数组,导致了函数值会返回空
s w i t c h
json
<?php
if(isset($_POST['a'])){
$a=json_decode($_POST['a']);
$key="**********";
//var_dump("asdfaasdasdf"==0);#该问题核心
if($a->key == $key)
{
echo "flag";
}
}
else{
echo "on no!";
}
?>
payload:a={"key":0}
is_array array_search
<?php
if(!is_array($_GET['a'])){
echo "is not array!";
exit();}
$a=$_GET['a'];
for($i=0;$i<count($a);$i++){
if($a[$i]==="admin"){
echo "error1";
exit();
}
$a[$i]=intval($a[$i]);
}
if(array_search("admin",$a)===0){
echo "flag";
}
else{
echo "error2";
}
?>
上方代码先校验是否为数组,之后遍历数组,之后检查所有数组是否有admin字段,如果有则会退出, 之后对数组中的值进行了int整型强转,又要求再数组中必须有admin字段;