PHP WEB练习题

使用hackbar简单设置参数

第一题非常简单,看代码其实就是submit设置参数了就可以看到flag了。

  
if (isset($_POST["submit"]))  
{
    include("flag2.php");
    echo "Congratulations! FLAG is : ".$flag;
}
show_source(__FILE__);
?>

但是页面上也没有提交,而且使用了post方法,所以要用一个很好用的插件:hackbar。是火狐浏览器的附加插件。
PHP WEB练习题_第1张图片
在这里可以搜索new hackbar
PHP WEB练习题_第2张图片
然后只要随便给submit设置一个值,run一下。
PHP WEB练习题_第3张图片PHP WEB练习题_第4张图片

%00内容截断

  
if (isset($_POST["submit"]))  
{
  if (isset($_POST['Luc1fer']))
  {
    if (ereg("^[a-zA-Z0-9]+$", $_POST['Luc1fer']) === FALSE)
    {
      exit('');
    }
    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('');
      }
      }
      else
      {
        exit('');
      }
    }
    else
    {
      exit('');
    }
  }
}
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

PHP WEB练习题_第5张图片
首先要设置这里的intercept on,然后设置浏览器代理为127.0.0.1端口为8080。
重新打开题目的网址会有点卡,然后回到这个burpsuite会看到界面里已经有了一些内容。点forward让它通过,这时网页会显示出原来的内容。
然后使用hackbar传参发送。
PHP WEB练习题_第6张图片
然后forward直到这个地址出现了params信息。
PHP WEB练习题_第7张图片
然后将变量修改为我们构造出的内容,重新forward发送,回到浏览器页面就得到了flag。PHP WEB练习题_第8张图片

你可能感兴趣的:(PHP WEB练习题)