0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

webarenaでubuntu その64

0
Last updated at Posted at 2026-10-25

概要

webarenaでubuntu18.04やってみた。
vpsクラウドが終了するらしい。
vpsクラウドからindigoに引っ越す
php2shellには、Cloudflareが利くんじゃね。

参考にしたページ

AIに聞いた。

Apache HTTP Server(Apache2)環境に限定した、HTTP POST通信によるバッファオーバーフロー/メモリ破壊型Webシェル起動(php2shell)の具体的な攻撃例を解説します。
特にApache2環境で伝統的なmod_php(ApacheモジュールとしてPHPを動かす方式)を採用している場合、アプリケーションコードが1行も実行される前の段階で、認証なしのリモートコード実行(RCE)が成立してしまう、非常に強力な攻撃シナリオが存在します(2026年10月に公開された「PHP2Shell」脆弱性がこれに該当します)。

Apache2における攻撃のメカニズム

Apache2のmod_php構成では、Webサーバーのプロセス(Apacheのワーカー)自体が直接PHPの実行エンジンを内包しています。
攻撃者は、アプリケーションのログイン画面やファイルアップロード機能の有無に関係なく、Apache2が稼働する任意のURLに対して、極端に巨大な、または不自然に破損したマルチパート(Multipart)データを含むPOSTリクエストを送信します。
この時、PHPコアがPOSTデータの解析中にメモリ不足(OOM: Out Of Memory)などの致命的エラーを起こすと、C言語レイヤーで内部状態が未初期化のまま中断されます。
Apacheワーカーはその後にクリーンアップ(メモリ解放)処理を行いますが、ここで未初期化ポインタの参照(Use-After-Free)やヒープの破壊(バッファオーバーフローの一種)が発生し、プログラムの制御(実行権限)が攻撃者のマシン語へと乗っ取られます。

HTTP POST 攻撃リクエストの実例

以下は、Apache2上のPHPのメモリ管理機構(OOM/UAF)を狂わせるために構成される、概念的な攻撃POSTリクエストの構造です。


http
POST /any_existing_file.php HTTP/1.1
Host: target-apache2-server.local
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryAttack
Content-Length: 52428800

------WebKitFormBoundaryAttack
Content-Disposition: form-data; name="PHP_SESSION_UPLOAD_PROGRESS"

x
------WebKitFormBoundaryAttack
Content-Disposition: form-data; name="file"; filename="A"
Content-Type: application/octet-stream

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...[数千?数万個の巨大なマルチパート要素、または不正なシリアライズデータ]...
\x90\x90\x90\x90\xeb\x1f...[OSコマンドを実行するシェルコードバイナリ]...
------WebKitFormBoundaryAttack--


攻撃の3ステップ

  1. トリガーの送信:
    Content-Length を意図的に大きくし、大量のマルチパートフォームデータを送りつけます。
    同時に、PHP内部でセッション処理を走らせるための特殊なパラメータ(PHP_SESSION_UPLOAD_PROGRESS など)を混ぜます。

  2. Apache2ワーカーのメモリ汚染:
    PHPがリクエストを受信・デコードする段階でメモリの限界値(memory_limit)を迎えるか、内部バッファを溢れさせ、エラーハンドラ(longjmp()関数)を無理やり起動させます。

  3. 制御権の奪取:
    本来ならエラー終了して500エラー等を返すはずですが、Apache2ワーカーのメモリ空間に事前に配置しておいたシェルコード(リバースシェルを起動するバイナリ)の番地へ、プロセスの実行命令ポインタが強制的にジャンプさせられます。

攻撃成立後の挙動(Webシェルの起動)

バッファオーバーフロー・メモリ破壊が成功すると、攻撃者はアプリケーションを介さずに、Apache2の実行権限(通常はLinux環境で www-data や apache ユーザー)で
直接OSのシステムコマンドを実行できるようになります。
ここから攻撃者は、さらに以下のようなコマンドを実行して完全な操作権限(シェル)を手に入れます。

  • メモリ内での直接実行: ディスクにファイルを一切書き込まず、メモリ上にバックドア(常駐プログラム)を展開する。
  • リバースシェルの確立: 攻撃者のサーバー(例: 192.168.1.50:4444)にリクエストを返し、Linuxのコマンドライン(bash)をそのまま乗っ取る。

Apache2環境での防御とログの特徴

このタイプのアタックは、一般的なWebアプリケーションログ(WordPressやフレームワークのログ)には一切痕跡が残りません
(プログラムが実行される前にApacheの内部で落ちるため)。

  1. 調査すべきログ

Apache2のログから以下の痕跡を探す必要があります。

  • error.log: Apache worker exited with signal や不自然なプロセスの強制終了(セグメンテーションフォールト:Segmentation fault)が多発していないか。
  • access.log: ステータスコードが 500(内部エラー)や 499、かつ Content-Length やリクエストボディが異常に長いPOST通信がないか。
  1. Apache2固有の暫定対策

サーバー(PHP本体)のアップデートが最優先ですが、直ちに行えない場合のApache側での暫定的な緩和策は以下の通りです。

  • POSTサイズの厳格な制限: Apacheの LimitRequestBody 設定を使用し、不要な大容量POSTリクエストをPHPに渡す前にWebサーバー層で一律で弾く。
  • 設定の無効化: php.ini または Apacheの構成ファイル(httpd.conf / .htaccess)で、攻撃経路となる機能を強制オフにする。ini
php_admin_flag session.upload_progress.enabled off

Cloudflareは、利きますか。

結論から言うと、Cloudflareを経由させる(プロキシ(雲マーク)をONにする)だけで、この手のリモートコード実行(RCE)を狙うバッファオーバーフロー攻撃の多くを、「自動的に遮断(回避)」できます。
ただし、完璧に逃げ切るためには1つだけ絶対に落としてはいけない必須の設定があります。
Cloudflareがなぜ有効なのか、そしてすり抜けを防ぐための必須設定を解説します。

Cloudflareで防げる理由(なぜ逃げれるのか)

Cloudflareを通すと、攻撃者のPOSTリクエストが直接あなたのVPSに届かなくなり、以下の強力な防御壁が機能します。

防御機能 仕組みと効果

  • WAF(Web Application Firewall)
    無料プランでも、既知の脆弱性(CVE-XXXX-XXXX)を狙う特有のバイナリパターンや、不正なマルチパート構造を持つPOSTリクエストを
    Cloudflareのエッジサーバー側で自動的に検知・ブロックします。

  • HTTPリクエストのサニタイズ
    Cloudflareは、届いたHTTP POSTリクエストを一度分解し、綺麗なHTTP規格に再構築してVPSに転送します。
    これにより、バッファオーバーフローを狙うような「規格外に壊れたパケット」はVPSに届く前にエラーとして弾かれます。

  • リクエストサイズの制限
    Cloudflare(無料プラン)は、デフォルトで100MBを超えるPOSTリクエストを通しません。
    ギガバイト級の超巨大データを送りつけてメモリ不足(OOM)やヒープオーバーフローを狙う攻撃は、入り口で強制シャットアウトされます。

ただし、これだけでは「すり抜け」が起きます(必須対策)

Cloudflareを導入しても、「攻撃者があなたのVPSの『生のIPアドレス(Global IP)』を直接叩いてきた場合」、Cloudflareの防御をすべてバイパスして、Apache2に直接攻撃が届いてしまいます。
これを防ぐために、**VPS側のファイアウォール(UFWやiptablesなど)で「Cloudflareからの通信しか受け付けない」という設定を絶対にセットすることです。

以上。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?