Once More分值:10
啊拉?又是php审计。已经想吐了。
hint:ereg()函数有漏洞哩;从小老师就说要用科学的方法来算数。
格式:CTF{}
解题链接: http://ctf5.shiyanbar.com/web/more.php
<?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>';
}
}
?>
第一个条件绕过:
if (ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE) :传入的数组ereg()后为NULL,(NULL===FALSE) ===》FALSE
第二个条件绕过【参见截图,get请求结果用$p代替】:
else if (strlen($_GET['password']) < 8 && $_GET['password'] > 9999999) :strlen()===》NULL,(NULL< 8) ==》true,后面那个倒是真的有点东西了
第三条件:
if (strpos ($_GET['password'], '*-*') !== FALSE):strpos ($_GET['password'], '*-*')==》NULL,(NULL)!==FALSE ==》TRUE,,
所以可以出flag.