Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 14835|Răspunde: 3

Analizează protocolul QQ Quick Login și implementează "CSRF"

[Copiază linkul]
Postat pe 21.03.2017 15:45:47 | | | |
După cum știm cu toții, Tencent a folosit Activex pentru a implementa autentificarea rapidă QQ, folosindu-l pe un browser necunoscut, iar primul lucru de făcut a fost să instaleze controlul QuickLogin.
Tocmai când nu știu când, autentificarea rapidă nu mai are nevoie de comenzi.
La acea vreme, eram foarte nedumerit, ce metodă ciudată folosea Tencent pentru a interacționa cu aplicațiile locale?

Fără pluginuri, paginile web nu ar trebui să poată interacționa direct cu aplicațiile locale (decât dacă este definit un protocol, care poate fi apelat doar și nu rezultatele oferite de program).

Din întâmplare (ei bine, m-am plictisit să mă uit în managerul de activități și să descopăr httpd-ul nativ și să găsesc Apache în funcțiune), am realizat brusc o posibilitate: dacă QQ deschide un port local, creează un server web, adică un server TCP care respectă protocolul HTTP, iar apoi pagina web ajax face o cerere către acel QQ (în acest moment ca server web), poți obține rezultatul?

Și acesta este cu adevărat rezultatul.


Web JS inițiază o cerere GET către http://localhost.ptlogin2.qq.com (portări de la 4300-4308, unul câte unul către succes).
Dacă îl faci ping, vei vedea că este 127.0.0.1, iar când verifici portul, este într-adevăr QQ în utilizare.

Prima cerere: /pt_get_uins?callback=ptui_getuins_CB&r=0.5919004196050326&pt_local_tk=399224727
pt_local_tk de la fursecuri, oricare ar fi; r este un număr aleator

Rezultatul returnat este un array JSON:
var var_sso_uin_list=[{"account":"Logat în contul QQ","face_index":-1,"gender":0,"nickname":"Porecla ta QQ","uin":"Încă contul tău QQ","client_type":66818,"uin_flag":8388612}]; ptui_getuins_CB(var_sso_uin_list);

Apoi folosește http://ptlogin2.qq.com/getface pentru a obține avataruri QQ, ceea ce nu va fi discutat aici

Astfel, informațiile QQ pot fi afișate pe pagina web.

Când apeși avatarul tău (când selectezi acest login)

Următoarele cereri sunt generate:
http://localhost.ptlogin2.qq.com:4300/pt_get_st?clientuin=你的QQ号&callback=ptui_getst_CB&r=0.7293395590126179&pt_local_tk=399224727
În mod similar, r este un număr aleator, pt_local_tk provine dintr-un cookie, local_token
Ce face această cerere?


Ei bine, Set-Cookie.

Apoi continuă cu cererea
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
Singurul U1 aici este adresa de destinație

Această cerere va returna toate cookie-urile de care ai nevoie, iar tu ești conectat.

Așadar, după ce am învățat protocolul, a fost descoperită o problemă serioasă: ce se întâmplă dacă un program (cu inima negruă) face aceste lucruri în numele utilizatorului?

Începe acum!

Aveam doar un Mac la îndemână, așa că l-am scris în Obj-C.

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

Notă: Datorită experienței mele anterioare cu boți QQ (bazat pe protocolul WebQQ): antetul Referer este foarte important (trebuie să fie un nume de domeniu .qq.com), iar dacă este greșit, cu siguranță va eșua. Deci nu există sensuri giratorii aici

Apropo, eram nou în Obj-C atunci, iar unele coduri pot părea puțin ridicole, vă rog să mă iertați.
//cookiedata是个NSDictionary




Astfel, autentificarea este finalizată și poți găsi o interfață QQ Space (care nu este postată aici), iar postarea este reușită.

Ce înseamnă asta? Asta înseamnă că, atâta timp cât este un program care rulează local, există șansa să finalizeze autentificarea QQ în locul tău și să efectueze operațiuni subtile pe platforme precum QQ Space, care nu necesită autentificare secundară




Precedent:Popularizează cunoștințele: Înțelege pe deplin diferența dintre px și EM la unitate și REM în CSS
Următor:XDU Meter Monitorizarea în timp real a vitezei internetului [Cod sursă]
Postat pe 21.03.2017 16:36:43 |
Voi fi acest programator cu inima neagră
 Proprietarul| Postat pe 21.03.2017 16:44:46 |
Xiaozhe Postat la 2017-3-21 16:36
Voi fi acest programator cu inima neagră

Hai, hai, scrie un software și lasă-mă să observ
Postat pe 27.09.2017 15:47:58 |
Adresa originală: https://www.52pojie.cn/thread-591949-1-1.html
Vă rugăm să nu reeditați fără consimțământ și să nu indicați sursa la reeditare.
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com