• VLMI - форум по обмену информацией. На форуме можете найти способы заработка, разнообразную информацию по интернет-безопасности, обмен знаниями, курсы/сливы.

    После регистрации будут доступны основные разделы.

    Контент форума создают пользователи, администрация за действия пользователей не несёт ответственности, отказ от ответственности. Так же перед использованием форума необходимо ознакомиться с правилами ресурса. Продолжая использовать ресурс вы соглашаетесь с правилами.
  • Подпишись на наш канал в Telegram для информации о актуальных зеркалах форума: https://t.me/vlmiclub

Решение задания на реверс Python [Hack The Box]

3xpl01t

Местный
Сообщения
34
Реакции
73
0 руб.
Telegram
Задание называется Snake
3ec2efef-9894-4c09-85b8-39151f4fb2ef.png


Качаем архив, смотрим скрипт. Весь скрипт (Python 2.7):
Python:
#!/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 ...", но это было лишь для отвлечения внимания.

Первым делом я решил решить первую часть - Юзернейм. Проанализировав код, стало понятно, что за юзернейм отвечают эти строки:
ecf8dbdf-5461-4133-914a-55c66c08a589.png


А если быть точнее, то переменная slither это и есть наш юзернейм, было множество вариантов как решить первую часть "головоломки", и я придумал самую простую: просто вывести эту переменную на экран!
da87a553-0f80-4aba-86de-b3efd6e9d404.png

Python:
print '\nU53RN4M3: ' + slither

Запускаем скрипт, смотрим вывод:
3746fba8-6be6-4149-9d0a-48ba814721ae.png

Юзернейм - anaconda. Если юзернейм верный, скрипт запросит пароль, что собственно и произошло:
27b9e3a1-f2c8-4479-b87c-2b5bee55808f.png


Т.к мы решали лишь первую часть, пароль нам неизвестен. Проанализировав код на функцию пароля нашёл эти строки:
4404a843-9326-4df7-8877-3062552100e9.png


Passes - пароль. Сделать также, как и с юзернеймом не получится (потому-что пароль можно вывести в консоль, только после его объявления, а объвляется он когда верный, а мы его не знаем, замкнутый круг). Но я придумал довольно хитрую штуку: Вывести пароль при неверном заполнении, то есть ввести любые символы, а после строки "Wrong password try harder" вывести настоящий пароль, потому-что он уже объявлён.
5f19e888-b961-4eae-8e4a-840f9ab58890.png

Python:
print '\nP455W0RD; ' + str(chr(char))

Запускаем, вводим правильный юзернейм и НЕправильный пасс:
3ed638b7-5f5f-4432-9a64-943acc2e9469.png


u ? серьёзно?
84d4eba1-e4e3-4028-bca6-a021511c3f1f.png


Видимо серьёзно...

Но на этом мы не останавливаемся, расскажу ещё способы решения этой задачки.

1 вариант.

Просто поменять значение переменной slither, например на D$_Admin, почему нет?
6de96b32-5d34-4694-9693-3e780e3c17bd.png

slither = 'D$_Admin'
6b81f6e0-d1ad-4bbc-9adb-1cb028db832e.png


2 вариант.

В этом варианте подойдёт абсолютно любой юзернейм путём спроса у пользователя:
fce08a76-c401-4d56-991b-ac8c89dbb050.png


slither = raw_input('Who?\n')
9f2e8c4a-adb2-49f0-886a-7fa1b3c2ff5d.png


Было ещё много вариантов решения, но эти самые простые.
 
Сверху Снизу