标签: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
标签:black image 文件中 数据类型 ber 就会 int rabl lazy
原文地址:https://www.cnblogs.com/c0d1/p/14876384.html