Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 14835|Відповідь: 3

Проаналізуйте протокол QQ Quick Login та реалізуйте «CSRF»

[Копіювати посилання]
Опубліковано 21.03.2017 15:45:47 | | | |
Як усім відомо, Tencent використовувала Activex для реалізації швидкого входу QQ, застосовуючи його в незнайомому браузері, і першим кроком було встановити контроль QuickLogin.
Щойно я не знаю коли, швидкий вхід раптом перестає потребувати керування.
Тоді я був дуже здивований, який дивний метод використовував Tencent для взаємодії з локальними додатками?

Без плагінів веб-сторінки не повинні безпосередньо взаємодіяти з локальними додатками (якщо не визначено протокол, який може бути викликаний лише за результатами, які надає програма).

Випадково (ну, просто нудно дивитися в диспетчер завдань, знаходити нативний httpd і знаходити Apache запущеним), я раптом зрозумів можливість: якщо QQ відкриває локальний порт, створює веб-сервер, тобто TCP-сервер, що відповідає протоколу HTTP, а веб-сторінка ajax робить запит до цього QQ (на той момент як веб-сервер), чи можна отримати результат?

І це справді результат.


Web JS ініціює GET-запит на http://localhost.ptlogin2.qq.com (порти з 4300-4308, один за одним для успіху).
Пінг показує, що це 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 account","face_index":-1,"gender":0,"nickname":"Ваш нікнейм QQ","uin":"Все ще ваш акаунт QQ","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 тут — адреса призначення

Цей запит поверне всі потрібні вам файли cookie, і ви увійдете в систему.

Отже, після вивчення протоколу було виявлено серйозну проблему: що станеться, якщо (чорнодушна) програма робить це від імені користувача?

Починайте вже зараз!

У мене був лише 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 space (не опублікований тут), і пост успішний.

Що це означає? Це означає, що якщо це локальна програма, є шанс завершити QQ-ухід замість вас і виконати деякі приховані операції на платформах, таких як QQ-space, які не потребують вторинної автентифікації




Попередній:Популяризуйте знання: ґрунтовно зрозумійте різницю між одиницею px і em та rem у CSS
Наступний:XDU Meter Моніторинг швидкості інтернету в реальному часі [Вихідний код]
Опубліковано 21.03.2017 16:36:43 |
Я буду цим чорносердим програмістом
 Орендодавець| Опубліковано 21.03.2017 16:44:46 |
Сяочже Опубліковано 2017-3-21 16:36
Я буду цим чорносердим програмістом

Давай, давай, напиши програмне забезпечення і дай мені спостерігати
Опубліковано 27.09.2017 15:47:58 |
Оригінальна адреса: https://www.52pojie.cn/thread-591949-1-1.html
Будь ласка, не передрувайте без згоди і не вказуйте джерело при повторному виду.
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com