Hello there, ('ω')ノ
公共交通機関の発券モバイルAPPのXXEを。
脆弱性:
XXE
RCE
記事:
https://infosecwriteups.com/xxe-in-public-transport-ticketing-mobile-app-81ae245c01a1
ターゲットの範囲は、発券Androidアプリ(Prod)で。
このアプリは、ドイツを拠点とする主要な公共交通機関のチケットアプリで。
Androidアプリにログインしてアカウント設定を行った後に。
「Change my data」オプションに出くわして。
次の画面で、個人データを変更する必要があって。
データを保存しているときに、下記のリクエストが。
サーバに送信されたことがわかって。
リクエストの形式は、下記のようで。
062.6.26#{some long data}
次に、{some long data}をデコードしてみたところ、base64で。
デコードされたデータは、下記に示すようにXMLで。
次に、下記のXXEペイロードを挿入して。
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE aa[<!ELEMENT bb ANY><!ENTITY xxe SYSTEM "file:///etc/passwd">]>
下記のように、本体から定義済みエンティティ&xxe;を呼び出すことに。
あとは、ペイロード全体をbase64形式にエンコードして。
最後に、元のリクエストをペイロードに置き換えて、リクエストをサーバに転送して。
/etc/passwdのコンテンツを取得できて。
アプリケーションはJavaを使用しているので。
下記のペイロードを使用してディレクトリを一覧表示することもできて。
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE aa[<!ELEMENT bb ANY><!ENTITY xxe SYSTEM "file://">]>
主にSSH秘密鍵を探していたものの。
好奇心から/etc/shadowをフェッチしようとすると。
驚いたことに応答から、rootとして実行されていることがわかって。
さらに、SSH秘密鍵が/home/user/.ssh/で利用可能なこともわかって。
つまり、システムで完全なRCEを実行することもできるわけで。
Best regards, (^^ゞ