это бесплатная Pentesting Lab. (Лаборатория пентеста) в которой вы можете усовершенствовать свои навыки взлома и научится чему-то новому.
Но обычным пользователям туда не попасть, вход только для избранных хацкеров. Для того, чтобы попасть в HTB нам нужно взломать систему приглашений и получить свой уникальный инвайт код. Сегодня мы с тобой этим и займёмся, поiхали!
Открываем главную страницу :
Пролистав чуть ниже ты должен найти кнопку Join:
Переходим и видим следующие:
В заголовке страницы написано: "Can you hack this box?". Вызов принят. Для начала открываем просмотр кода страницы: ПКМ -> Искодный код страницы
Весь код написан в одной строке
Нажимаем Ctrl + F и ищем все скрипты.js. Нам нужен лишь один - inviteapi.min.js:
Перейдя по которому мы можем найти нужный нам POST запрос - makeInviteCode
Переходим обратно на страницу с нажимаем F12, и открываем консоль:
В консоли пишем: makeInviteCode () и получаем следующие:
Всё что написано в кавычках - зашифрованный текст методом ROT с ключом 13. Об этом говорит строка enctype: "ROT13". Те, кто проходил мой мини-квест по криптографии уже знают как его декордировать. Мы с тобой будем использовать для декодирования ROT13.
Если мы перейдём по пути hackthebox.eu/api/invite/generate Появляется надпись о том, что мы не на верном пути:
Нам нужно сделать POST запрос. Делается это при помощи дополнительного расширения для браузера HackBar ( / )
F12 -> HackBar.
Теперь в самом ХакБаре тыкаем на Load URL:
Также нажимаем на Post data (т.к нам нужно сделать POST запрос) в поле для ввода вписываем:
POST /?foo=bar HTTP/1.1
Host: hackthebox.eu
Connection: close
Теперь нажимаем Execute и наш запрос отправился. В ответе от сервера видим следующее:
Казалось бы , что это то, что мы искали, но нет. Код зашифрован в Base64, об этом говорит символ "=" в конце. Опять декодируем текст в декодере:
Этот код окончательный. Вводим его в поле для инвайта:
И у нас показывается поздравление о прохождении и поля для регистрации:
Подтверждаем почту, логинимся.
Для примера решим одно из сотен заданий в лаборатории. И поймём как нарабатывать практику.
Задание называется Snake
#!/usr/bin/python2.7
import random
lr = '\x64'
print '''
___________.__ _________ __
\__ ___/| |__ ____ / _____/ ____ _____ | | __ ____
| | | | \_/ __ \ \_____ \ / \\__ \ | |/ // __ \
| | | Y \ ___/ / \ | \/ __ \| <\ ___/
|____| |___| /\___ > /_______ /___| (____ /__|_ \\___ >
\/ \/ \/ \/ \/ \/ \/
'''
chains = [0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x74, 0x72, 0x6f, 0x6c, 0x6c]
db = '\x6e'
ef = '\x63'
chars = []
keys = [0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x21, 0x21]
nn = '\x61'
lock_pick = random.randint(0, 0x3e8)
lock = lock_pick * 2
password = [0x69, 0x74, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x65, 0x61, 0x73, 0x79]
lock = lock + 10
ty = '\x61'
lock = lock / 2
auth = [0x6b, 0x65, 0x65, 0x70, 0x20, 0x74, 0x72, 0x79, 0x69, 0x6e, 0x67]
lock = lock - lock_pick
gh = '\x6e'
print 'The Snake Created by 3XPL017'
print 'Your number is ' + str(lock_pick)
for key in keys:
keys_encrypt = lock ^ key
chars.append(keys_encrypt)
for chain in chains:
chains_encrypt = chain + 0xA
chars.append(chains_encrypt)
aa = '\x61'
rr = '\x6f'
slither = aa + db + nn + ef + rr + gh + lr + ty
print 'Authentication required'
print ''
user_input = raw_input('Enter your username\n')
if user_input == slither:
pass
else:
print 'Wrong username try harder'
exit()
pass_input = raw_input('Enter your password\n')
for passes in pass_input:
for char in chars:
if passes == str(chr(char)):
print 'Good Job'
break
else:
print 'Wrong password try harder'
exit(0)
break
При запуске скрипт генерирует случайное число с помощью random.randint(0, 0x3e8) и выводит в строке "Your number is ...", но это было лишь для отвлечения внимания.
Первым делом я решил решить первую часть - Юзернейм. Проанализировав код, стало понятно, что за юзернейм отвечают эти строки:
А если быть точнее, то переменная slither это и есть наш юзернейм, было множество вариантов как решить первую часть "головоломки", и я придумал самую простую: просто вывести эту переменную на экран!
print '\nU53RN4M3: ' + slither
Запускаем скрипт, смотрим вывод:
Юзернейм - anaconda. Если юзернейм верный, скрипт запросит пароль, что собственно и произошло:
Т.к мы решали лишь первую часть, пароль нам неизвестен. Проанализировав код на функцию пароля нашёл эти строки:
Passes - пароль. Единственная загвоздка в том, что passes - не переменная. Соответственно сделать также, как и с юзернеймом не получится (потому-что пароль можно вывести в консоль, только после его объявления, а объвляется он когда верный, а мы его не знаем, замкнутый круг). Но я придумал довольно хитрую штуку: Вывести пароль при неверном заполнении, то есть ввести любые символы, а после строки "Wrong password try harder" вывести настоящий пароль, потому-что он уже объявлён.
print '\nP455W0RD; ' + str(chr(char))
Запускаем, вводим правильный юзернейм и НЕправильный пасс:
u ? серьёзно?
Видимо серьёзно...
Но на этом мы не останавливаемся, расскажу ещё способы решения этой задачки.
1 вариант.
Просто поменять значение переменной slither, например на D$_Admin, почему нет?
slither = 'D$_Admin'
2 вариант.
В этом варианте подойдёт абсолютно любой юзернейм путём спроса у пользователя:
slither = raw_input('Who?\n')
Было ещё много вариантов решения, но эти самые простые.
Я показал лишь одно из сотен заданий в Hack The Box. Остальные же для наработки практики в хакинге вам придётся решать самим...
Но обычным пользователям туда не попасть, вход только для избранных хацкеров. Для того, чтобы попасть в HTB нам нужно взломать систему приглашений и получить свой уникальный инвайт код. Сегодня мы с тобой этим и займёмся, поiхали!
Открываем главную страницу :
Пролистав чуть ниже ты должен найти кнопку Join:
Переходим и видим следующие:
В заголовке страницы написано: "Can you hack this box?". Вызов принят. Для начала открываем просмотр кода страницы: ПКМ -> Искодный код страницы
Весь код написан в одной строке
Нажимаем Ctrl + F и ищем все скрипты.js. Нам нужен лишь один - inviteapi.min.js:
Перейдя по которому мы можем найти нужный нам POST запрос - makeInviteCode
Переходим обратно на страницу с нажимаем F12, и открываем консоль:
В консоли пишем: makeInviteCode () и получаем следующие:
data: "Va beqre gb trarengr gur vaivgr pbqr, znxr n CBFG erdhrfg gb /ncv/vaivgr/trarengr"
enctype: "ROT13"
Всё что написано в кавычках - зашифрованный текст методом ROT с ключом 13. Об этом говорит строка enctype: "ROT13". Те, кто проходил мой мини-квест по криптографии уже знают как его декордировать. Мы с тобой будем использовать для декодирования ROT13.
"In order to generate the invite code, make a POST request to /api/invite/generate"
Если мы перейдём по пути hackthebox.eu/api/invite/generate Появляется надпись о том, что мы не на верном пути:
Нам нужно сделать POST запрос. Делается это при помощи дополнительного расширения для браузера HackBar ( / )
F12 -> HackBar.
Теперь в самом ХакБаре тыкаем на Load URL:
Также нажимаем на Post data (т.к нам нужно сделать POST запрос) в поле для ввода вписываем:
POST /?foo=bar HTTP/1.1
Host: hackthebox.eu
Connection: close
Теперь нажимаем Execute и наш запрос отправился. В ответе от сервера видим следующее:
Казалось бы , что это то, что мы искали, но нет. Код зашифрован в Base64, об этом говорит символ "=" в конце. Опять декодируем текст в декодере:
Этот код окончательный. Вводим его в поле для инвайта:
И у нас показывается поздравление о прохождении и поля для регистрации:
Подтверждаем почту, логинимся.
Для примера решим одно из сотен заданий в лаборатории. И поймём как нарабатывать практику.
Задание называется Snake
Скрин задания
Качаем архив, запускаем скрипт. Весь скрипт (Python 2.7):#!/usr/bin/python2.7
import random
lr = '\x64'
print '''
___________.__ _________ __
\__ ___/| |__ ____ / _____/ ____ _____ | | __ ____
| | | | \_/ __ \ \_____ \ / \\__ \ | |/ // __ \
| | | Y \ ___/ / \ | \/ __ \| <\ ___/
|____| |___| /\___ > /_______ /___| (____ /__|_ \\___ >
\/ \/ \/ \/ \/ \/ \/
'''
chains = [0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x74, 0x72, 0x6f, 0x6c, 0x6c]
db = '\x6e'
ef = '\x63'
chars = []
keys = [0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x21, 0x21]
nn = '\x61'
lock_pick = random.randint(0, 0x3e8)
lock = lock_pick * 2
password = [0x69, 0x74, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x65, 0x61, 0x73, 0x79]
lock = lock + 10
ty = '\x61'
lock = lock / 2
auth = [0x6b, 0x65, 0x65, 0x70, 0x20, 0x74, 0x72, 0x79, 0x69, 0x6e, 0x67]
lock = lock - lock_pick
gh = '\x6e'
print 'The Snake Created by 3XPL017'
print 'Your number is ' + str(lock_pick)
for key in keys:
keys_encrypt = lock ^ key
chars.append(keys_encrypt)
for chain in chains:
chains_encrypt = chain + 0xA
chars.append(chains_encrypt)
aa = '\x61'
rr = '\x6f'
slither = aa + db + nn + ef + rr + gh + lr + ty
print 'Authentication required'
print ''
user_input = raw_input('Enter your username\n')
if user_input == slither:
pass
else:
print 'Wrong username try harder'
exit()
pass_input = raw_input('Enter your password\n')
for passes in pass_input:
for char in chars:
if passes == str(chr(char)):
print 'Good Job'
break
else:
print 'Wrong password try harder'
exit(0)
break
При запуске скрипт генерирует случайное число с помощью random.randint(0, 0x3e8) и выводит в строке "Your number is ...", но это было лишь для отвлечения внимания.
Первым делом я решил решить первую часть - Юзернейм. Проанализировав код, стало понятно, что за юзернейм отвечают эти строки:
А если быть точнее, то переменная slither это и есть наш юзернейм, было множество вариантов как решить первую часть "головоломки", и я придумал самую простую: просто вывести эту переменную на экран!
print '\nU53RN4M3: ' + slither
Запускаем скрипт, смотрим вывод:
Юзернейм - anaconda. Если юзернейм верный, скрипт запросит пароль, что собственно и произошло:
Т.к мы решали лишь первую часть, пароль нам неизвестен. Проанализировав код на функцию пароля нашёл эти строки:
Passes - пароль. Единственная загвоздка в том, что passes - не переменная. Соответственно сделать также, как и с юзернеймом не получится (потому-что пароль можно вывести в консоль, только после его объявления, а объвляется он когда верный, а мы его не знаем, замкнутый круг). Но я придумал довольно хитрую штуку: Вывести пароль при неверном заполнении, то есть ввести любые символы, а после строки "Wrong password try harder" вывести настоящий пароль, потому-что он уже объявлён.
print '\nP455W0RD; ' + str(chr(char))
Запускаем, вводим правильный юзернейм и НЕправильный пасс:
u ? серьёзно?
Видимо серьёзно...
Но на этом мы не останавливаемся, расскажу ещё способы решения этой задачки.
1 вариант.
Просто поменять значение переменной slither, например на D$_Admin, почему нет?
slither = 'D$_Admin'
2 вариант.
В этом варианте подойдёт абсолютно любой юзернейм путём спроса у пользователя:
slither = raw_input('Who?\n')
Было ещё много вариантов решения, но эти самые простые.
Я показал лишь одно из сотен заданий в Hack The Box. Остальные же для наработки практики в хакинге вам придётся решать самим...