这题其实纯粹的累傻小子,当然,可能有大佬知道如何绕过那个图片验证码但是没有写wp的话,那当我没说,我已经注册好了,zhaoxian 打开场景,看看源码,没找到啥可利用的点,那就扫目录吧,扫出来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');
是PHP代码,把php,phar,zip伪协议过滤了,加入了自己写的master协议,然后master协议后面每个方法都进行了相应的过滤 同时之前扫目录的时候扫出来uploads目录和upload.php,由于权限不够,所以要注册10个用户,邀请人填要加分的用户名,然后就是一个上传问题 由于文件内容被做了过滤,考虑.htaccess文件,.htaccess是apache的配置文件,你上传的新文件会覆盖原有的.htaccess 在.htaccess文件里写入 php_value auto_append_file master://search/path=%2fhome%2f&name=flag //在home目录下查找flag文件,/在stream_open被过滤了 //用%2f代替 再随便上传一个php文件,这样你会神奇的发现,新上传的php文件会自动回显之前的查找结果/home/hiahiahia_flag 于是修改.htaccess文件
php_value auto_append_file /home/hiahiahia_flag
显示文件内容,拿到flag
参考视频链接:https://www.bilibili.com/video/BV1Zf4y1A7Lm/
|