これは、ファームウェアのアップグレードに使用されるSerComm製造のルーターおよびホームゲートウェイデバイス(Linksys、Netgear、Cisco)に存在するMIPSポートです。
これはscfgmgr
、ポート32764でリッスンしているプロセスによって管理されます。
telnet経由でアクセスすると、データのプレフィックスが ScMM
またはMMcS
(システムのエンディアンに応じて)で始まるが返されるようです。
これは、ヘッダー(0xCバイト)の後にペイロードが続く非常に単純なバイナリプロトコルです。
ヘッダー構造:
typedef struct scfgmgr_header_s {
unsigned long magic;
int cmd;
unsigned long len;
} scfgmgr_header;
これはCisco GPLソースに基づいています(たとえば、廃止されたftp-eng.cisco.comのwap4410n_v2.0.1.0_gpl.tgz)。
実際の情報については、elvanderbの説明とサンプルPythonコードをご覧ください。
現在、ヒープベースのバッファオーバーフローで有名です。これにより、デバイス(バックドア)へのフルアクセスが可能になります。これは2013年のクリスマスにEloi Vanderbekenによって発見されましたが、おそらく2008年に中国のハッカーによって知られていました(cgi file)。
動作方法は次のとおりです。
ヒープベースのバッファオーバーフロー:
メッセージ:
そのため、単純なオーバーフローメッセージを使用すると、多くの興味深い詳細が得られます。
ただし、これにより設定がリセットされる可能性があるため、自宅では実行しないでください。
このポートを介して実行されるルーターによって実行される逆のコマンドはほとんどありません。
nvram
-設定をダンプします。
get var
-構成変数の取得
スタックベースのバッファオーバーフローの可能性(変数がユーザーによって制御されている場合)
set var
-設定変数の設定
スタックベースのバッファオーバーフロー、出力バッファ(サイズ≈0x10000)はスタック上にあります。
commit nvram
-/ tmp / nvramからnvram / dev / mtdblock / 3を読み取り、CRCを確認します
/ tmp / nvramからnvram(/ dev / mtdblock / 3)を設定します。CRCをチェック
ブリッジモードをオンに設定します(確かに、テストする時間はありませんでした)
nvram_set(“wan_mode”, bridgedonly)
nvram_set(“wan_encap”, 0)
nvram_set(“wan_vpi”, 8)
nvram_set(“wan_vci”, 81)
system(“/usr/bin/killall br2684ctl”)
system(“/usr/bin/killall udhcpd”)
system(“/usr/bin/killall -9 atm_monitor”)
system(“/usr/sbin/rc wan stop >/dev/null 2>&1”)
system(“/usr/sbin/atm_monitor&”)
測定されたインターネット速度を表示(ダウンロード/アップロード)
cmd(うん、シェルだ…)
特別なコマンド:
- exit、bye、quit-> quit ...(alive = 0)
- cd:ディレクトリの変更(少しWTF)
他のコマンド:
- stdout処理での整数オーバーフロー(?)は悪用できませんが、それでも...
- cmd出力のバッファオーバーフロー(同じバッファ)…
書き込みファイル
- ペイロード内のファイル名
- ルートディレクトリ= / tmp
- ディレクトリトラバースが可能かもしれません(テストされていませんが、open(sprintf(“ / tmp /%s”、ペイロード))...)
バージョンを返す
モデムルーターのIPを返す
デフォルト設定に戻す
- nvram_set(“ restore_default”、1)
- nvram_commit
/ dev / mtdblock / 0 [-4:-2]を読み取ります
- それが何であるかわからない、私はそれをテストする時間がなかった
ディスク(/ tmp / nvram)にnvramをダンプし、コミットします
出典:(スライドショー)Linksysが私のクリスマスをどのように救ったか!
通常その種のポートはIANAによって公式にあるべきです。
これは、2007年のLinuxQuestionsでこのポートに関連してunSpawnが答えたものです。
正式にIANAが割り当てたポート(0から約30000の間の番号)の場合、その番号は/ etc / services( 'getent services portnumber')のサービス、Nmapなどのスキャナーのサービスファイルまたはオンラインに対応する必要があります。 SansのISCのようなデータベース。
を使用してローカルで一時ポートの使用を構成できることに注意してください/proc/sys/net/ipv4/ip_local_port_range
sysctl
。古いデフォルトは1024-5000でしたが、サーバーでは32768-61000の値が使用され、一部のアプリケーションでは1025-65535のようなものが必要です。
また、これらは静的な番号からサービスへのマッピングであり、たとえば/ etc / servicesは TCP/22
特定の状況でそうである必要がないSSH一致ことに注意してください。
それ以外の場合、どのプロセスがそれにバインドしたかわからないポートである場合、ホストにアクセスできる場合はnetstat -anp
、lsof -w -n -i protocol:portnumber
またはを使用して問い合わせることができますfuser -n protocol portnumber
。これが最も正確な方法です。
それ以外の場合、ホストにアクセスできない場合は、たとえばtelnetでホストに問い合わせることができます。これは正確な方法ではなく、侵害されたホストの場合、侵入者に自分のケースを警告することがあります。
こちらもご覧ください: