レッドサンコード監査-任意のオブジェクトの脆弱性の3日目のインスタンス化

3日目-スノーフレーク

このトピックはスノーフレークと呼ばれ、コードは次のとおりです。
ここに画像の説明を挿入

脆弱性分析:

このコードには2つのセキュリティホールがあります。1つ目は、脆弱性を含むファイルです。上図の8行目でclass_exists()関数を使用して、ユーザーから渡されたコントローラーが存在するかどうかを判断します。デフォルトでは、プログラムに__autoload関数がある場合、class_exists()関数が使用されます。このプログラムの__autoload関数が自動的に呼び出され、この質問の脆弱性を含むファイルがこの場所に表示されます。攻撃者はパストラバーサルを使用して任意のファイルを含めることができます。もちろん、パストラバーサルシンボルを使用する前提はPHP5から5.3(バージョン5.3を含む)の間です。たとえば、クラス名は次のとおりです。…/…/…/…/ etc / passwd検索ではpasswdファイルの内容がチェックされます。PHPマニュアルのclass_exists()関数の定義を見てみましょう。

class_exists (PHP 4、PHP 5、PHP 7)
特徴 クラスが定義されているかどうかを確認します
定義 bool class_exists(string $ class_name [、bool $ autoload = true])
$ class_nameはクラスの名前です 照合時に大文字と小文字は区別されません。デフォルトでは、$ autoloadはtrueです。$ autoloadがtrueの場合、このプログラムの__autoload関数は自動的にロードされます。$ autoloadがfalseの場合、__ autoload関数は呼び出されません。

ここに画像の説明を挿入

着信クラスにはフィルタリングがないため、組み込みクラスを渡すことができます。

ここでは、PHPの組み込みクラスを直接使用し、最初にGlobIteratorクラスを使用しフラグファイルの名前を検索し、> PHPマニュアルGlobIteratorクラスのコンストラクター定義を確認します

public GlobIterator :: __construct(string $ pattern [、int $ flags = FilesystemIterator :: KEY_AS_PATHNAME | FilesystemIterator :: CURRENT_AS_FILEINFO])

最初のパラメーターは検索するファイルの名前、2番目のパラメーターはキー名としてファイルのどの情報を選択するかです。ここではFilesystemIterator :: CURRENT_AS_FILEINFOを使用することを選択します。対応する定数値は0で、これらを見つけることができます。ここでの定数値なので、最終的な検索ファイルのペイロードは次のようになります。

http://localhost/CTF/index.php?name = GlobIterator&param =。/ *。php&param2 = 0

ここに画像の説明を挿入フラグのファイル名はf1agi3hEre.phpであることがわかります。次に、組み込みのSimpleXMLElementを使用してf1agi3hEre.phpファイルのコンテンツを読み取ります。ここでは、ファイルが存在する場合、PHPストリームを一緒に使用する必要があります。 :<>& '"これらの5つのシンボルはXMLファイル解析エラーを引き起こすため、ここではPHPファイルストリームを使用して、base64エンコード後に読み取られるファイルのコンテンツを出力します。具体的なペイロードは次のとおりです。

http://localhost/CTF/index.php?name = SimpleXMLElement&param = <?xml version = "1.0"?>]>%26xxe;&param2 = 2

総括する

1.カスタム関数はフィルタリングされないため、任意のオブジェクトをインスタンス化する際に脆弱性が発生します

2.組み込み関数:GlobIterator

3、20

おすすめ

転載: blog.csdn.net/qq_45951598/article/details/110825629