Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 14835|Antwoord: 3

Analyseer het QQ Quick Login Protocol en Implementeer "CSRF"

[Link kopiëren]
Geplaatst op 21-03-2017 15:45:47 | | | |
Zoals we allemaal weten, gebruikte Tencent Activex om QQ fast login te implementeren, via een onbekende browser, en het eerste wat werd gedaan was het installeren van de QuickLogin-controle.
Net als ik niet weet wanneer, heeft de snelle login ineens geen bediening meer nodig.
Op dat moment was ik erg verbaasd: welke vreemde methode gebruikte Tencent om met lokale applicaties te interageren?

Zonder plugins zouden webpagina's niet direct met lokale applicaties moeten kunnen communiceren (tenzij er een protocol is gedefinieerd, maar alleen kan worden opgeroepen en niet de resultaten die door het programma worden geleverd).

Toevallig (nou ja, gewoon verveeld door in Taakbeheer te kijken en de native httpd te ontdekken, en Apache draaiende te vinden), realiseerde ik me ineens een mogelijkheid: als QQ een lokale poort opent, een webserver maakt, dat wil zeggen een TCP-server die voldoet aan het HTTP-protocol, en dan doet de webpagina ajax een verzoek aan die QQ (op dit moment als webserver), kun je dan het resultaat krijgen?

En dat is eigenlijk het resultaat.


Web JS start een GET-verzoek naar http://localhost.ptlogin2.qq.com (poorten van 4300-4308, één voor één naar succes).
Als je pingt, zie je dat het 127.0.0.1 is, en als je de poort controleert, is het inderdaad QQ in gebruik.

Eerste verzoek: /pt_get_uins?callback=ptui_getuins_CB&r=0.5919004196050326&pt_local_tk=399224727
pt_local_tk van cookies, wat het ook is; r is een willekeurig getal

Het resultaat dat wordt teruggegeven is een JSON-array:
var var_sso_uin_list=[{"account":"Inlogd QQ account","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);

Gebruik vervolgens http://ptlogin2.qq.com/getface om QQ-avatars te krijgen, waar hier niet over gesproken zal worden

Op deze manier kunnen je QQ-informatie op de webpagina worden weergegeven.

Wanneer je op je avatar drukt (wanneer je deze login selecteert)

De volgende verzoeken worden gegenereerd:
http://localhost.ptlogin2.qq.com:4300/pt_get_st?clientuin=你的QQ号&callback=ptui_getst_CB&r=0.7293395590126179&pt_local_tk=399224727
Evenzo is r een willekeurig getal, pt_local_tk afkomstig is van een koekje, local_token
Wat doet dit verzoek?


Nou, Set-Cookie.

Ga dan verder met het verzoek
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
De enige U1 hier is het bestemmingsadres

Dit verzoek geeft alle cookies terug die je nodig hebt en je bent ingelogd.

Dus na het leren van het protocol werd een serieus probleem ontdekt: wat gebeurt er als een (zwart-hartig) programma deze dingen namens de gebruiker doet?

Begin nu!

Ik had alleen een Mac bij de hand, dus schreef ik het in Obj-C.

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

Opmerking: Vanwege mijn eerdere ervaring met QQ-bots (gebaseerd op het WebQQ-protocol): de Referer-header is erg belangrijk (het moet een .qq.com domeinnaam zijn), en zodra deze verkeerd is, zal hij zeker falen. Dus hier zijn er geen rotondes

Trouwens, ik was toen nieuw bij Obj-C, en sommige code lijkt misschien wat onzinnig, vergeef me alsjeblieft.
//cookiedata是个NSDictionary




Op deze manier wordt de login voltooid, kun je een QQ-ruimteinterface vinden (hier niet geplaatst), en is het bericht succesvol.

Wat betekent dit? Dit betekent dat zolang het een programma lokaal draait, er een kans is om in plaats van jou in te loggen met QQ, en om stiekeme handelingen uit te voeren op platforms zoals QQ space die geen secundaire authenticatie vereisen




Vorig:Populariseer kennis: Begrijp grondig het verschil tussen unit px en em en rem in CSS
Volgend:XDU-meter Realtime internetsnelheidsmonitoring [broncode]
Geplaatst op 21-03-2017 16:36:43 |
Ik zal deze zwarthartige programmeur zijn
 Huisbaas| Geplaatst op 21-03-2017 16:44:46 |
Xiaozhe Geplaatst op 21-3-2017 16:36
Ik zal deze zwarthartige programmeur zijn

Kom op, kom op, schrijf een software en laat me observeren
Geplaatst op 27-09-2017 15:47:58 |
Origineel adres: https://www.52pojie.cn/thread-591949-1-1.html
Geef alstublieft geen herdruk zonder toestemming en geef de bron niet aan bij het herdrukken.
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com