0x02 函数说明
1.ereg函数
ereg()函数搜索由指定的字符串作为由模式指定的字符串,如果发现模式则返回true,否则返回false。搜索对于字母字符是区分大小写的。
2.strlen函数
成功则返回字符串 string 的长度;如果 string 为空,则返回 0。
3.strpos函数
查找字符串首次出现的位置,没找到返回false
0x03 ereg正则%00截断 CTF题解析
1.当我们传入payload:1e7%00*-*,路由过程如下
代码第1-2行:判断是否有password参数传入DEBUG:1.$_GET:{password => "1e7*-*"},这里有参数,所以pass
代码第3-6行:ereg函数正则限制password格式,只能是一个或者多个数字、大小写字母,否则输出You password must be alphanumeric。DEBUG:1.$_GET:{password => "1e7*-*"},由于传入了%00,故截断了后面的*-*,所以pass
代码第7-8行:strlen函数判断是不是长度< 8且大小 >9999999。DEBUG:1.$_GET:{password => "1e7*-*"},由于传入了%00,故截断了后面的*-*,且1e7为10的7次方,长度小于8大小大于99999999,所以pass
代码第9-11行:strpos函数查找*-*的位置。DEBUG:1.$_GET:{password => "1e7*-*"},*-*存在,故而爆出了密码
if (isset ($_GET['password'])) //如果password存在
{
if (ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE)//限制password格式,只能是一个或者多个数字、大小写字母
{
echo '<p>You password must be alphanumeric</p>';
}
else if (strlen($_GET['password']) < 8 && $_GET['password'] > 9999999)//判断是不是长度< 8且大小 >9999999
{
if (strpos ($_GET['password'], '*-*') !== FALSE) //strpos — 查找字符串首次出现的位置*-*
{
die('Flag: ' . $flag);//错误并爆出密码
原文始发于微信公众号(鲲哥的Bypass之旅):奇淫巧计 ereg正则%00截断
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论