2016. 7. 21. 18:56 :: 문제풀이/Hacker School

 

 ||| Chapter 02 :: 해킹의 시작 |||

 

 

안녕하세요. Message입니다.

Lv1 끝내고 또 손을 놔버렸네요...달려야겠습니다.

이번 챕터는 제목이 인상적이네요..ㅎㅎ

 

실습환경 : FTZ 로컬 서버(RedHat Linux) + Vmwre 12.1.0 build

참고서적 : 문제풀이로 배우는 시스템 해킹 테크닉 / 여동기님 / 위키북스

 

------------------------------------------------------------------------------------------------------------------------------------------

01. 문제파악

------------------------------------------------------------------------------------------------------------------------------------------

 

Level2에 접속하여  hint 파일을 열어봅니다. 

ID/PW : level2 / hacker or cracker

 

텍스트 파일 편집이라고 하니 VI편집기를 말하는것 같습니다.

VI편집기로 쉘의 명령을 실행시킬 수 있을까요?

 

 

Tip. VI편집기의 "명령어 실행" 기능

VI텍스트편집기에서 저장하고 나오기 위해 무심코  :wq!  명령어를 사용해왔습니다.

하지만 여기서 아래와 같이  :!명령어  를 입력하면 어떻게 될까요? 

 

바로 아래와 같이 잠시 VI텍스트편집기를 빠져나와서 해당 결과를 보여줍니다.

 

이후에 엔터를 치면 다시 VI편집기로 돌아오게됩니다.

 

또한 여기서 r를 덧붙여서  :r!명령어  를 입력하면 아래와 같이 결과값을 VI편집기에 추가할 수 있습니다. 

 

유닉스시스템은 CLI기반이기 때문에 문서를 편집하다가 시스템으로 되돌아가

다른 작업을 해야 할 경우 문서를 닫고 나갔다가 다시 되돌아와야 한다는 번거로움이 있습니다.

그래서 이와 같은 "명령어 실행" 기능이 존재하는 것입니다.

 

 

------------------------------------------------------------------------------------------------------------------------------------------

02. 문제분석

------------------------------------------------------------------------------------------------------------------------------------------

 

Level1에서 사용했던 find 명령어를 이용하여 Level3의 setuid를 가진 파일을 찾아봅니다.

--------------------------------------------------------------------------

옵션1)  -perm +6000  -->  setuid or setgid가 걸린 파일 찾기

옵션2)  -user level3    -->  level3의 권한

옵션3)   2> /dev/null  -->  에러제거 옵션

--------------------------------------------------------------------------

해당 옵션을 이용하여 검색한 결과는 아래와 같습니다.

Permission을 확인해보면 SUID가 설정되어 있음을 확인할 수 있습니다  :  -rwsr-x---

 

찾아낸 파일을 실행해보면 아래와 같은 메세지를 볼 수 있습니다.

일반적인 VI 편집기로 보입니다.

VI편집기에서 사용되는 명령어 몇가지를 입력해 보니 정상동작합니다.

 

하지만 실행파일의 이름이 vi가 아닌 editor이므로 실제 vi가 맞는지 확인해보겠습니다.

특정명렁어의 위치를 찾아주는 명령어는  which  입니다.

 

해당 경로를 통해서 editor와 vim파일의 크기를 비교해보면 서로 다른 파일임을 알 수 있습니다.

vi와 vim까지 확인합니다.

 

vim이나 vi 파일에 링크를 걸어서 사용한 것도 아니며, 오히려 크기가 더 작습니다.

하지만 editor를 동작시키면 VI편집기임이 분명합니다.

그렇다면 해당 editor에서 id 명령어를 쳐보고 어떤 결과를 리턴하는지 살펴보면

아래와같이 Level3의 id가 찍히는 것을 알 수 있습니다.

 

공격방법을 알았으니  :!my-pass  명령어를 editor에서 실행시켜 다음 레벨의 비밀번호를 알아냅니다.

 

완전히 쉘을 따서 지속적인 Level3의 권한을 얻고싶다면  !sh  명령어를 이용하면 됩니다.

 

 

------------------------------------------------------------------------------------------------------------------------------------------

03. GDB 이용한 상세분석

------------------------------------------------------------------------------------------------------------------------------------------

 

GDB를 이용하여 ExcuteMe 파일의 상세 동작원리를 분석합니다.

 

1) GDB 실행

아래 옵션들을 이용하여 gdb를 실행시킵니다.

------------------------------------------------------------------------------------------------------------------------

옵션1)  실행 시 출력되는 도움말을 생략  -->  -q

옵션2)  AT&T 어셈블리어 명령어를 intel 어셈블리어 명령어로 변경  :  set disassembly-flavor intel

------------------------------------------------------------------------------------------------------------------------

 

 

2) 흐름파악

disas main의 출력결과를 통해 프로그램의 실행 흐름을 파악할 수 있습니다.

---------------------------------------------------------------------------------------------------------------------

① 스택을 구성한다

setudi(3003,3003)을 이용해 실행되는 파일의 User ID 권한을 Level3 계정으로 설정

system() 함수를 이용해 VI 편집기를 실행한다. 즉 Level3의 권한으로 VI편집기를 실행

---------------------------------------------------------------------------------------------------------------------

 

 

3) 주요 함수 분석

 

① setuid

함수에 push 되는 인자값들을 x/s 명령어를 이용하여 살펴보면,

0xbbb(3003)을 넣어줍니다. 즉, setuid(3003, 3003)을 의미하는 것이며

이것은 실행되는 파일의 User ID 권한을 Level3 계정으로 설정하는 것을 의미합니다.

Tip. UID란?

시스템 내에서 사용자를 식별할 수 있는 유일한 값입니다. GID는 UID들이 소속되어 있는 그룹ID 입니다.

 

system

system() 함수에 들어가는 인자값을 찍어보니 "/bin/vi" 입니다.

setuid를 설정하고 나서 system함수로 vi를 실행하는 것이 해당 파일의 핵심이었습니다.

 

 

---------------------------------------------------------

04. 마치며

---------------------------------------------------------

 

VI 편집기에서 명령어 실행이 가능한 부분을 이용한 문제였습니다.

하나씩 알아가는 재미가 있네요 ㅎㅎ

감사합니다.

 

':: 문제풀이 > Hacker School' 카테고리의 다른 글

해커스쿨 FTZ Level3 풀이  (1) 2016.07.21
해커스쿨 FTZ Level1 풀이  (0) 2016.04.25
posted by Red_Message