PHP function readfile
の悪用について質問したいと思います。そのため、サイトをハッキングしたことで報酬を得ており、_readme.php
_からPHP _read.php
_という名前のファイル)。これには次のコードが含まれます。
_<?php
$path = $_GET['p'];
readfile("pages/$path/index.html");
?>
_
したがって、_readme.php
_ファイルが自動的に追加されるため、_/index.html
_ファイルを読み取ることができません。この場合、PHPファイルを読み取る方法はありますか?
PHPが解釈されると、バージョン<=からPHP 5.3.4は、一般に呼び出される攻撃に対して脆弱ですnullバイトインジェクション)。
PHPで文字列を宣言するには、Cで_$var = "hey"
_と同等の_char tab[4]="hey"
_を使用します。 3バイトの文字のみを格納したいのに、4バイトの文字配列を宣言したことに注意してください。これは、コンパイラがnullバイト文字を自動的に挿入するためです。最終的な文字列は_hey\0
_になります
tab
は、文字列の最初の文字を指すポインターです。コンピューターは、最初の文字から_\0
_で表されるnullバイト文字(16進数で0)まで読み取ります。
_%00
_は、PHPでのnullバイト文字の表現です。
readfile("pages/$path/index.html");
のような文字列で関数を呼び出す場合、文字列は変数に格納されます。これを_$tmp=pages/pathFromVariable/index.html
_と呼びましょう。実際には_pages/pathFromVariable/index.html\0
_としてメモリに格納されます。
ここで、入力の最後にnullバイトを挿入すると、文字列の最後を消去できます。たとえば、_$tmp=pages/pathFromVariable%00/index.html
_の場合、_pages/pathFromVariable\0/index.html\0
_として保存され、ファイル__pages/pathFromVariable
_が読み取られます。うんざり!