해커스쿨 BoF원정대 엔딩 후기

해커스쿨에서 배포한 BoF원정대 (Lord of BufferOverFlow) 문제를 이제서야 다 풀었다.

나온지는 몇년이 지난 고전(?) 자료이긴 하나, 리눅스 환경에서의 BoF 기초를 읽히는데
많은 도움이 된 것 같아 간단하게 후기 및 유의해야 할 점을 남기고자 한다.

Cap 2014-08-13 19-33-08-438[뭔 부귀영화를 누리겠다고 몇일간 삽질을 한건지 ㅠㅠ 20레벨 엔딩화면]

BoF원정대 소개

본 워게임(Wargame)은 20개의 레벨로 구성되어 있으며, Redhat 리눅스 운영체제를 사용하고 있다.

각 레벨마다 주어진 ID로 접속하면 다음 레벨 ID명으로 된 바이너리와 C코드가 들어있는데
다양한 BoF기법을 통해 다음 레벨의 쉘을 획득하는 것이 목표이다.

그럼 간단하게 레벨2 소스코드를 한번 살펴보도록 하자

보다시피 gremlin (Level2 ) 레벨을 넘어가기 위해서는 BoF를 통해
다음레벨 (cobolt)의 쉘을 획득해야만 한다.

소스코드에는 하이라이트 된 부분과 같이 BoF를 위한 간단한 Tip이 소개되어 있는데,
해결방법에 접근하기 위한 최소한의 단서 정도로 생각하면 되겠다.

 

요구되는 지식들

본 워게임을 20레벨까지 마치기 위해서는 아래의 지식이 요구될것이다.

1. C 언어 기초 (Fundamental of C Language)

2. Stack 구조의 이해 (Understanding of Stack Structure)

3. 어셈블리 언어 기초 (Fundamental of Assembly) – 아주 기본만 알면 됨

4. GDB 디버거 사용법 (GDB Dubugging) – 정말 중요하다 –

5. 파이썬 or Perl 등의 스크립트 언어 기초 (Writing of Script Language)

특히 GDB 디버거의 경우 윈도우 디버거 환경에 익숙한 사람이라면 곤욕을 치를 수 있으므로,
간단한 C코드를 gcc를 통해 컴파일 한 후, 디버깅 하는 연습을 미리 해보기를 권한다.

처음에는 적응하기 쉽지 않겠지만, 점점 익숙해지게 될 것이다.

 

유의해야할 점과 문제 해결팁

문제 해결에 있어 다음 몇가지 사항들에 대해 미리 알고 접근하기를 바란다.
알고보면 별것도 아닌 것 때문에 몇시간을 허비할 순 없지 않은가?

1. 쉘코드는 bash2환경에서 실행한다.

  •  bash에서는 “\xff”를 “\x00″으로 인식하여 정상적인  쉘코드 진행이 안된다.

2. 일부 레벨에서는 쉘코드의 변경이 필요하다.

  •  24바이트 쉘코드를 주로 사용하지만, 레벨에 따라 더 짧은 쉘코드가 필요할 수 있다.
  • 쉘코드 샘플 3개 정도는 미리 준비해두는 것이 좋다 (구글링)

3. 연습장을 준비하자.

  •  메모리 구조를 머릿속으로만 생각하다보면 문제 해결이 쉽지 않다.
  •  직접 스택구조를 그림으로 그려보면 버퍼에 넣어야 할 값을 정확하게 알 수 있다.

4.  과정을 기록해두자.

  • 기존 작성한 BoF 코드를 재사용해야할 일이 생각보다 많다.
  • 각 단계별로 공격코드를 정리해두면 이후 문제 풀이때 용이할것이다.

 

문제 풀이 과정

문제에 대한 풀이는 [풀이과정 바로가기] 를 통해 확인할 수 있으나,
중간중간에 약간의 거친(?) 언어가 포함되어 있으므로 감안하고 보기를 바란다…
(하도 짜증나는 과정이 많아서 ㅠㅠ)

각 레벨별 풀이 과정은 타 사이트에서도 많이 소개되어 있으므로,
상세 과정은 추후 시간이 나는대로 정리해서 포스팅할 계획이다.

또한 BoF원정대 리눅스 이미지 파일은 [이곳] 에서 다운로드 받기 바란다.

도전 하는 모든이들이여, Good Luck~!

 

Site Footer

Sliding Sidebar

About Me

About Me

June Park