php代码审计(基础)

常见审计题


  • PHP类型比较缺陷
    -‘== ’ 与 ‘ ===’

==先转换为相同类型再比较,又称松散比较。
而 ===先判断类型,如果类型不相同返回false。


  • hash比较缺陷
    如果是==比较,hash值为’oe’开头直接判断为相等

  • 布尔欺骗
    -当存在json_decode 和 unserialize的时候,部分结构会被解释成bool类型,也造成欺骗.

a:2:{s:4:“user”;b:1;s:4:“pass”;b:1;}
经过反序列化 都为bool;


  • 数字转换欺骗
$user_id = 0.99999999999999
var_dump($user_id == 1) ⇒ true
$uid = 1.1
var_dump($uid =1) ⇒ true


php当中的一些松散函数

  • strcmp()
    比较两个字符串,str1>str2 返回>0,str1str1. 两者相等,返回0,如果传入的一个是array则返回0;

  • MD5
    -md5需要的是一个string类型的参数,但当传递一个array是,MD5无法正常比较,会导致任意的两个MD5值相等

  • 生日攻击

在n个人中选取k个人,当k为多大能保证有两个人生日是相同的?
k=366?
从统计学的角度来看,k<<<366
k=70时,两个人生日相同的概率就高达99.9%
k=100时,概率可达99.99997%

hash函数 : f(x) = y 只有f(x)足够复杂才能抵御被猜测的风险。
由此说明hash函数可以通过少量的输入值碰撞相同的输出值;所以hash函数是 不安全的


  • switch

#此处返回flag

  • is_numeric()

如果指定的变量是数字和数字字符串则返回 TRUE,否则返回 FALSE

如果指定的变量是16进制0x1321e45644d6
会被判断为真,此时如果传入16进制后的sql语句,数据库在查询的时候会将hex解码为字符串,造成sql注入;


  • is_array() 函数
    php代码审计(基础)_第1张图片
    当我们没有设置第三个参数时,它默认为false,那么它是个松散比较- -

  • array_search()
    -原理同于in_array()

  • empty()

当var存在,并且时一个非空非零的值时返回false 否则返回ture
以下被认为是空的:
“”(空字符串)
0(作为整数0)
0.0(作为浮点数的0)
“0”(作为字符串的0)
NULL
FALSE
array()(一个空数组)
$var; (一个声明,但是没有值的变量)


  • $$导致的变量覆盖问题
$_value)  
    {
        $$_key=  $_value;     //    id为$_key      1为$_value
    }                          //变成了    $id=1
}
$id = isset($id) ? $id : 2;       //$id设置了   执行第一项
if($id == 1) {                         //$id为1    执行if语句
    echo "flag{xxxxxxxxxx}";
    die();
}
echo $id;
?>
————————————————
版权声明:本文为CSDN博主「mo0rain」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41173457/article/details/81590579

  • extract()
    -函数从数组中将变量导入到当前的符号表
    https://www.cnblogs.com/xiaozi/p/7768580.html

  • parse_str()

你可能感兴趣的:(短篇,代码审计)