使用hackbar简单设置参数
第一题非常简单,看代码其实就是submit设置参数了就可以看到flag了。
<?php
if (isset($_POST["submit"]))
{
include("flag2.php");
echo "Congratulations! FLAG is : ".$flag;
}
show_source(__FILE__);
?>
但是页面上也没有提交,而且使用了post方法,所以要用一个很好用的插件:hackbar。是火狐浏览器的附加插件。
在这里可以搜索new hackbar
然后只要随便给submit设置一个值,run一下。
%00内容截断
<?php
if (isset($_POST["submit"]))
{
if (isset($_POST['Luc1fer']))
{
if (ereg("^[a-zA-Z0-9]+$", $_POST['Luc1fer']) === FALSE)
{
exit('<script>alert("have fun:)")</script>');
}
elseif (strlen($_POST['Luc1fer']) < 11 && $_POST['Luc1fer'] > 999999999)
{
if (strpos($_POST['Luc1fer'], '#CCUT#') !== FALSE)
{
if (!is_array($_POST['Luc1fer'])) {
include("flag.php");
echo "Congratulations! FLAG is : ".$flag;
}
else
{
exit('<script>alert("nonono")</script>');
}
}
else
{
exit('<script>alert("nonono")</script>');
}
}
else
{
exit('<script>alert("sorry")</script>');
}
}
}
show_source(__FILE__);
?>
看一下代码要求:
- submit需要设置一个值。
- 变量Luc1fer的内容只能从[a-zA-Z0-9]里面选择,也就是没有符号内容。
- 对于它的长度,需要在11位以内,同时它的值需要大于9个9。
- Luc1fer变量里面必须包含#CCUT#。
- Luc1fer变量不能是数组。
可以看到其中有两个要求似乎有点儿矛盾,不能有符号内容又必须包含#。
这里有一个ereg函数来对比变量的内容,ereg函数存在NULL截断漏洞,导致了正则过滤被绕过,所以可以使用%00截断正则匹配。
于是我们按照要求构建变量内容,首先一定包含#CCUT#这是六位,然后要用%00截断它,所以是%00#CCUT#,当然在传输时%00会变成空白,所以还剩下五位内容使得值大于9位9,于是我们使用科学计数法,科学计数法中E/e后的数表示10的多少次方,1e9即是数10的9次方,所以答案就是1e9%00#CCUT#。
当然这里还有一个问题就是post方法是不能传送%00, %00 截断在 GET 中被 url 解码之后是空字符。但是在 POST 中 %00 不会被 url 解码,所以只能通过 burpsuite 修改。
burpsuite
首先要设置这里的intercept on,然后设置浏览器代理为127.0.0.1端口为8080。
重新打开题目的网址会有点卡,然后回到这个burpsuite会看到界面里已经有了一些内容。点forward让它通过,这时网页会显示出原来的内容。
然后使用hackbar传参发送。
然后forward直到这个地址出现了params信息。
然后将变量修改为我们构造出的内容,重新forward发送,回到浏览器页面就得到了flag。