Once More分值:10
来源: iFurySt 难度:易参与人数:2567人Get Flag:798人答题人数:814人解题通过率:98%
啊拉?又是php审计。已经想吐了。
hint:ereg()函数有漏洞哩;从小老师就说要用科学的方法来算数。
格式:CTF{}
解题链接: /web/
源码:
<?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漏洞,百度可以知道存在截断的问题:ereg读到%00的时候,就截止了,
那么在字符串里面包括%00即可;
接着需要长度小于8但要大于9999999,想到hint里的科学方法,使用科学计数法即可;
还要求有-,最后构造password=1e9%00*-*,直接在地址栏提交,通过表单提交不会把%00看作截断符。