目录扫描,扫出robots.txt 访问看一下。
访问config.txt
源代码
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');
?>
代码分析:
定义了一个类master,其中有几个方法,我们逐个分析。
stream_open()
对path的传参和name的传参从字符串到变量,做了一个方法对应。
那个正则匹配有点看不懂。
upload()
对上传的文件内容中存在 < " ’ . 全部替换为 !
然后如果匹配到 /file: http pre etc/is 就会报错
最后输出文件内容和文件路径
search()
判断了是否存在 p a t h 路 径 , 对 当 前 目 录 进 行 遍 历 , 存 在 和 path路径,对当前目录进行遍历,存在和 path路径,对当前目录进行遍历,存在和name相同的文件或者目录替换为空
并列出当前目录。
发现一个上传点,但是如果你这里的积分低于100的话会爆出一个权限不够,不能上传,比如我随便注册一个账号
这里是可以使用在注册的时候,把推荐人写成一个账号,然后一个账号的推荐人10个积分,0nce7mochu就是这样刷了100分,这样才有上传权限。
我们随便上传一个一句话木马上去。找到图片地址,发现这里存在一个目录遍历
可以发现我们的<被替换成了!,这里在源码里我们也看了。对上传文件的内容进行了一些敏感字符的替换。
可以上传.htaccess文件,那么就可以用.htaccess修改配置文件。
这里为什么要将后面两个/编码原因未知,但是经过测试如果不编码的话执行不了就会失效。
php_value auto_append_file master://search/path=%2fhome%2f&name=flag
这里也是使用了在源码中唯一开启的伪协议master://
把这个.htaccess文件上传上去的话,然后水边上传一个php文件然后访问这个php文件就可以执行命令
再次修改.htaccess文件内容为:
php_value auto_append_file /home/hiahiahia_flag