この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 14835|答える: 3

QQクイックログインプロトコルを分析し、「CSRF」を実装する

[リンクをコピー]
掲載地 2017/03/21 15:45:47 | | | |
ご存知の通り、TencentはActivexを使ってQQの高速ログインを実装し、見慣れないブラウザで使用し、まずQuickLoginコントロールをインストールしました。
いつかわからない時に、クイックログインが突然操作を不要にするようになりました。
当時、私はとても困惑しました。Tencentはローカルアプリケーションと連携するためにどんな奇妙な方法を使っていたのでしょうか?

プラグインがなければ、ウェブページはローカルアプリケーションと直接やり取りできないはずです(プロトコルが定義されている場合を除き、呼び出しは可能でプログラムが提供する結果は得られません)。

偶然(まあ、タスクマネージャーを見てネイティブのhttpdを見つけてApacheが動いているのを見て退屈だっただけですが)、ある可能性に気づきました。QQがローカルポートを開き、HTTPプロトコルに準拠したウェブサーバー、つまりTCPサーバーを作成し、そのウェブページAJAXがそのQQ(現時点でウェブサーバー)にリクエストを送った場合、結果は得られますか?

それが本当に結果です。


Web JSは http://localhost.ptlogin2.qq.com(4300-4308のポートを順に成功させる)にGETリクエストを開始します。
pingをすると127.0.0.1であることがわかり、ポートを確認すると確かにQQが使われています。

最初のリクエスト: /pt_get_uins?callback=ptui_getuins_CB&r=0.5919004196050326&pt_local_tk=399224727
クッキーからpt_local_tk、何であれ; r は乱数です

結果として返されるのはJSON配列です:
var var_sso_uin_list=[{"account":"QQアカウントにログインしました","face_index":-1,"gender":0,"nickname":"Your QQ nickname","uin":"Still your QQ account","client_type":66818,"uin_flag":8388612}]; ptui_getuins_CB(var_sso_uin_list);

そして http://ptlogin2.qq.com/getface を使ってQQアバターを手に入れますが、ここでは触れません

こうすることで、QQ情報がウェブページに表示されます。

アバターを押すとき(このログインを選択するとき)

以下のリクエストが生成されます:
http://localhost.ptlogin2.qq.com:4300/pt_get_st?clientuin=你的QQ号&callback=ptui_getst_CB&r=0.7293395590126179&pt_local_tk=399224727
同様に、rは乱数、pt_local_tkはクッキーからのものlocal_token
このリクエストは何をするのでしょうか?


さて、セットクッキー。

その後、依頼を進めてください
http://ptlogin2.qq.com/jump?clientuin=你的QQ号&keyindex=19&pt_aid=549000912&daid=5&u1=http%3A%2F%2Fqzs.qzone.qq.com%2Fqzone%2Fv5%2Floginsucc.html%3Fpara%3Dizone&pt_local_tk=1881902769&pt_3rd_aid=0&ptopt=1&style=40
ここでのU1は宛先アドレスだけです

このリクエストで必要なクッキーはすべて返され、ログイン状態になります。

プロトコルを学んだ後、深刻な問題が明らかになりました。もし(黒い心を持つ)プログラムがユーザーの代わりにこれらのことを行ったらどうなるのか?

今すぐ始めましょう!

手元にMacしかなかったので、Obj-Cで書きました。

[self GET:@"http://localhost.ptlogin2.qq.com:4300/pt_get_uins?callback=ptui_getuins_CB&r=0.47178753013324637&pt_local_tk=-1211438011" header:nil];
//这里的GET是我自己封装的一个方法,GET网页上的数据

注:私の以前のQQボット(WebQQプロトコルベース)の経験から、Refererヘッダーは非常に重要で(.qq.com ドメイン名でなければなりません)、間違えれば確実に失敗します。 つまり、ここにラウンドアバウトはありません

ちなみに、当時私はObj-Cを初心者で、コードの一部が少し変に思えるかもしれませんが、どうかご容赦ください。
//cookiedata是个NSDictionary




こうしてログインが完了し、QQスペースのインターフェース(ここには掲載されていません)を見つけられ、投稿は成功します。

これはどういう意味でしょうか? つまり、ローカルで実行されているプログラムであれば、あなたの代わりにQQログインを完成させたり、QQ空間のような二次認証を必要としないプラットフォームでこそこ操作を行う可能性があるということです




先の:知識を普及させる:CSSにおけるユニットpxとem、remの違いを十分に理解してください
次に:XDUメーターリアルタイムインターネット速度監視【ソースコード】
掲載地 2017/03/21 16:36:43 |
私はこの黒い心のプログラマーになる
 地主| 掲載地 2017/03/21 16:44:46 |
シャオジェ 2017年3月21日 16:36 投稿
私はこの黒い心のプログラマーになる

さあ、さあ、ソフトウェアを書いて、私に見せてくれ
掲載地 2017/09/27 15:47:58 |
元の住所:https://www.52pojie.cn/thread-591949-1-1.html
同意なく転載せず、転載時に出典を明記しないでください。
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com