2.21.7 ereg
ereg()
语法:
int ereg(string pattern, string originalstring, [array regs]);
ereg()函数用指定的模式搜索一个字符串中指定的字符串,如果匹配成功返回true,否则,则返回false。搜索字母的字符是大小写敏感的。
可选的输入参数规则包含一个数组的所有匹配表达式,他们被正则表达式的括号分组。
在ereg中存在截断漏洞
示例代码
审计得到想要得到flag需要三个条件 1.ereg ("^[a-zA-Z0-9]+$", $_GET['password']) !=== FALSE即提交的password必须是只能是一个或者多个数字、大小写字母。 2.strlen($_GET['password']) < 8 && $_GET['password'] > 9999999 提交的password长度要小于8并且大小要大于99999999 3. strpos ($_GET['password'], '-') !== FALSE password里必须要有’-’
因为ereg()函数存在NULL截断漏洞,导致正则过滤被绕过,所以可以用%00来截断正则匹配 第二个条件长度小于8大小大于99999999可以用科学计数法来绕过
则最后构造password=1e8%00-即可得到flag
Last updated