XXE in Public Transport Ticketing Mobile APP から学ぶ

ソース:

medium.com

脆弱性:XXE

 

訳:

この発見は、別の非公開のバグ報奨金プログラムでした。
ターゲットの範囲は、チケット発行 Android アプリ (製品) でした。
このアプリは、ドイツを拠点とする大手公共交通機関のチケット販売アプリでした。 

 

 

次の画面では、個人データを変更する必要があります

 

 

データを保存しているときに、次のリクエストがサーバーに送信されていることがわかりました。

 

 

リクエストの形式は次のようなものでした 062.6.26#{some long data}
次に、{長いデータ} を選択してデコーダに送信しました。
デコードしてみたところ、base64であることがわかりました。
デコードされたデータは、以下の図に示すような XML でした。 

 

 

次に、次の XXE ペイロードを含めました。

 

<?xml version="1.0"coding="UTF-8"?><!DOCTYPE aa[<!ELEMENT bb ANY><!ENTITY xxe SYSTEM "file:///etc/passwd">]>

 

そして定義されたエンティティを呼び出します &xxe;次の図に示すように本体から。 

 

 

ここで必要なのは、ペイロード全体をエンコードして Base64 形式に戻すことだけです。 

 

 

最後に、元のリクエストのペイロードを置き換えて、リクエストをサーバーに転送しました。
そして、の内容を入手しました /etc/passwd

 

 

アプリケーションは Java を使用しているため、次のペイロードを使用してディレクトリを一覧表示することもできます。 

 

<?xml version="1.0"coding="UTF-8"?><!DOCTYPE aa[<!ELEMENT bb ANY><!ENTITY xxe SYSTEM "file://">]>

 

 

主に SSH 秘密鍵を探していましたが、好奇心から取得しようとしました /etc/shadow(幸運な気がします:D)。
そして驚いたことに、私はそれを受け取りました(これはまれなケースです)。
応答から、root として実行していることがわかります。

 

 

また、SSH 秘密鍵が次の場所で利用可能であることもわかりました。
/home/user/.ssh/
ディレクトリ。
これは、システム上で完全な RCE を実行することもできますが、プログラムでは完全なエスカレーションが許可されていなかったことを意味します。
そこで私はそれを試みず、ここまででテストを中止し、同じことを報告しました。 

 

 

ほなほな。