昨日、コハナで書かれたポータルが攻撃に成功しました。 尊敬されるフレームワークで罪を犯す必要があるという考えは、そのセキュリティは最後にはほど遠いものでしたが、最初は議論さえされていませんでした。 私たちのサイトをクロールしたプログラムは、この脆弱性を発見するのに約95万件のリクエストと5時間かかりました。
Kohanaカーネルバージョン3.2の次の2つの関数をよく見てください。
public function redirect($url = '', $code = 302) { $referrer = $this->uri(); $protocol = ($this->secure()) ? 'https' : TRUE; if (strpos($referrer, '://') === FALSE) { $referrer = URL::site($referrer, $protocol, ! empty(Kohana::$index_file)); } if (strpos($url, '://') === FALSE) {
public static function site($uri = '', $protocol = NULL, $index = TRUE) {
ご覧のとおり、リクエストのリダイレクト関数を使用すると、URL ::サイト関数が現在のuriに適用され、preg_replaceに実行修飾子「e」が使用されます。rawurlencodeはURLの各セグメントに適用され、セグメントは二重引用符で送信されます($ {@ phpinfo()})のようなもので、動作します。 したがって、リンクhttp:// site / path / param1を使用してリダイレクトが行われる場合、($ {@ phpinfo()})などの式をparam1に追加すると、コードを実行できます。
主なことは、param1には非ASCII文字(ロシア文字など)も含まれていることです 。 私たちのケースでは、ボットによって脆弱性が発見された後、男が問題を取り上げ、しばらく操作した後、この穴からシェルを埋めることができました。 このような貴重な助けがそのような瞬間に提供されました。 Kokhanovsky例外ハンドラーには次のスライスがあります。
public static function handler(Exception $e) {
要求には、XMLHttpRequestと等しいX-Requested-Withヘッダーがありますか? エラーメッセージを保管してください!
トラッカーの小花はすでに退会しています。