0x1函数解析
ereg():
*用指定的模式搜索一个字符串中指定的字符串,如果匹配成功返回true,否则,则返回false。
搜索字母的字符是大小写敏感的。
* 此函数存在两个漏洞:
①%00截断及遇到%00则默认为字符串的结束
②当ntf为数组时它的返回值不是FALSE
*科学计数法的表示是1e9=1000000000,e一定是小写
strpos():
*查找字符串在另一字符串中第一次出现的位置。
*例:stpos("ehfvfslnvjsdknv","ehfv")
查找ehfv在字符串中第一次出现的位置
拓展eregi():此函数与ereg()的区别在于此函数不区分大小写
0x2题目解析
题目链接:http://www.shiyanbar.com/ctf/1805
#1.查看源码:
<?php
if (isset ($_GET['password'])) {
if (ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE)
{
echo '<p>You password must be alphanumeric</p>';
}
else if (strlen($_GET['password']) < 8 && $_GET['password'] > 9999999)
{
if (strpos ($_GET['password'], '*-*') !== FALSE)
{
die('Flag: ' . $flag);
}
else
{
echo('<p>*-* have not been found</p>');
}
}
else
{
echo '<p>Invalid password</p>';
}
}
?>
ereg():输入的password必须是大小写字母和数字
strlen():输入值必须大于999999999并且长度小于8
strops():输入的值中必须含有‘*-*’
#2.总结步骤一中的要求后,利用ereg函数的截断漏洞可以构造playload:1e9%00*-*
由于做了url编码,所以需要在url里面直接传参
得到flag