攻防世界WEB高手进阶之blgdel
CISCN final
打开页面
扫描目录
Robots.txt
Config.txt
代码审计
<?php class master { private $path; private $name; function __construct() { } function stream_open($path) { if(!preg_match('/(.*)\/(.*)$/s',$path,$array,0,9)) return 1; $a=$array[1]; parse_str($array[2],$array); if(isset($array['path'])) { $this->path=$array['path']; } else return 1; if(isset($array['name'])) { $this->name=$array['name']; } else return 1; if($a==='upload') { return $this->upload($this->path,$this->name); } elseif($a==='search') { return $this->search($this->path,$this->name); } else return 1; } function upload($path,$name) { if(!preg_match('/^uploads\/[a-z]{10}\/$/is',$path)||empty($_FILES[$name]['tmp_name'])) return 1; $filename=$_FILES[$name]['name']; echo $filename; $file=file_get_contents($_FILES[$name]['tmp_name']); $file=str_replace('<','!',$file); $file=str_replace(urldecode('%03'),'!',$file); $file=str_replace('"','!',$file); $file=str_replace("'",'!',$file); $file=str_replace('.','!',$file); if(preg_match('/file:|http|pre|etc/is',$file)) { echo 'illegalbbbbbb!'; return 1; } file_put_contents($path.$filename,$file); file_put_contents($path.'user.jpg',$file); echo 'upload success!'; return 1; } function search($path,$name) { if(!is_dir($path)) { echo 'illegal!'; return 1; } $files=scandir($path); echo '</br>'; foreach($files as $k=>$v) { if(str_ireplace($name,'',$v)!==$v) { echo $v.'</br>'; } } return 1; } function stream_eof() { return true; } function stream_read() { return ''; } function stream_stat() { return ''; } } stream_wrapper_unregister('php'); stream_wrapper_unregister('phar'); stream_wrapper_unregister('zip'); stream_wrapper_register('master','master'); ?>
还发现有sql.txt
给出了数据库名,数据表,列名,字段名
访问User.php
发现有文件上传点
访问发现等级过低
估计要拿一个高分的账户
后面注意到注册页面有个推荐人,试了一下,注册一个新账户给10个积分
到达一百个积分的时候可以上传文件
上传一个图片马
上传失败,回头看看代码config.php
这里过滤了尖括号,代码尽管上传成功,但是无法执行
代码被替换了
无法上传php马,但是在尝试过程中发现.htaccess可以被上传,意味着我们可以包含文件
.htaccess相关介绍,在这里
链接:
https://www.cnblogs.com/adforce/archive/2012/11/23/2784664.html
https://blog.csdn.net/cmzhuang/article/details/53537591
后面实在看不出东西,无奈WP大法
说的比较详细,大概意思是可以通过构造这个master协议来搜索文件,包含成功的话,这个文件的内容会映射到test.php里面
构造
php_value auto_append_file master://search/path={}&name={}
wp说的要把正斜杠编码传入才行,试了一下,确实不行,原因未知
编码一下
php_value auto_append_file master://search/path=%2fhome%2f&name=flag
然后放进.htaccess里面,上传
访问1.php
直接包含进来
php_value auto_append_file /home/hiahiahia_flag
Flag拿到了