函数:

in_array()(判断一个值是否在某一个数组列表里面)
is_numeric()(判断一个变量是否是数字)
==(双等于==与三等于===的区别在于双等于在判断前会做变量转换,而三等于不会)

0×01 in_array()函数

<?php $family = array(“xy”, “wjw”); if (in_array($_GET[‘id’], $family)) { echo “匹配已找到”; } else { echo “匹配未找到”; } ?>

如果请求/test.php?id=xy则结果如下:
匹配已找到
将id改为1,结果则是匹配未找到,将上面的代码改一下进行此函数的漏洞测试

<?php $family = array(1,2,3,4); if (in_array($_GET[‘id’], $family)) { echo “匹配已找到”; } else {

echo “匹配未找到”;

}

?>

如果我们请求/test.php?id=1’ union
select…最终输出竟然也是“匹配已找到”,因此可以看到,虽然我们输入的不是数组里面的值,但是还是可以绕过这个检测并且注入成功,因为in_array函数存在一个问题,就是比较之前会自动做类型转换,而这种漏洞的形成是因为我们没有设置第三个参数,用于严格的执行漏洞检查。

0×02is_numeric()函数

<?php echo is_numeric(1234); # 1 echo is_numeric(‘1234’); # 1 echo is_numeric(0x1234); # 1 ?>

可以发现当传入的参数为hex的时候则通过并返回ture,而mysql是可以直接使用hex编码代替字符串明文的,所以这块虽然不能直接注入SQL语句,但是存在二次注入的隐患,将‘or
1=1’hex编码之后为‘0x276f7220313d3127’,就可能导致注入漏洞

0×03双等于和三等于

<?php

echo($_GET[‘var’]==99);

?>

当我们请求为’/test.php?var=1’的时候,页面无输出,说明两个值不相等,当我们请求为’/test.php?var=99’的时候,页面输出1,说明此时两个量值相等,当我们请求为’/test,php?var=99qwqacwef’的时候,此时页面也输出的是1,也就是在此处判断之前完成了变量类型转换

账户体系中的越权漏洞

类型:
水平越权
垂直越权

未exit或return引发的安全问题

常见支付漏洞

Ecshop漏洞错误注入分析

会话认证漏洞

Espcms任意用户登录分析