본문 바로가기

Wargame & CTF/Hackerschool FTZ

[Hackershcool] FTZ LEVEL 3

ㅁ 문제 정보


 문제 유형

System Hacking

 문제 타입

Linux 

 문제 난이도

 하


ㅁ 문제 상세분석


[그림 1] 문제 내용


LEVEL3 문제는 Buffer Overflow , Command Injection 취약점을 가지고 있다. 다음 문제에서 Buffer Overflow 취약점 문제가 많아서 LEVEL3 문제는 Command Injection 취약점을 이용해서 접근했다. Command Injection 취약점은 프로그램에서 사용하는 인자 값을 조작해서 공격자가 실행하고 싶은 명령어를 실행시키는 공격이다.


[그림 2] 문제 파일 위치


find 명령어를 이용해서 level4 권한을 가지고 있고 setuid가 걸린 파일을 검색한다. /bin/autodig 파일에 setuid가 걸려있는걸 확인할 수 있다.


[그림 3] main 함수 취약점 분석


strcat( cmd, argv[1] ); 부분에서 입력 값을 검증을 진행하지 않고 system() 함수를 사용하기 때문에 공격자가 실행하고 싶은 명령어를 실행 시킬 수 있다.


[그림 4] 프로그램 실행 분석


리눅스 시스템에서 여러 명령어를 실행하기 위해서는 세미콜론(;)을 사용하면 된다. 공격자가 실행시키고 싶은 명령어를 함께 인자 값(localhost;my-pass)으로 넘겨주면 세미콜론을 기준으로 오른쪽 명령어는 제거된 상태에서 명령어가 실행된다. localhost;my-pass 값을 입력했지만 실제 system 함수가 실행하는 명령어는 "dig @localhost version.bind chaos txt이다.


[그림 5] 실행 결과


인자 값을 정상적으로 넘겨주기 위해서는 힌트에 나와 있는 문자열 형태로 전달을 해야 한다. 리눅스 시스템에서 문자열 형태로 인자 값을 넘겨주기 위해서는 큰따옴표(“”)를 사용하면 된다. 최종적으로 “localhost;my-pass” 값을 인자로 넘겨주면 LEVEL4 패스워드를 획득할 수 있다.






'Wargame & CTF > Hackerschool FTZ' 카테고리의 다른 글

[해커스쿨] FTZ LEVEL6  (0) 2015.12.28
[해커스쿨] FTZ LEVEL5  (0) 2015.12.23
[해커스쿨] FTZ LEVEL4  (0) 2015.12.18
[Hackershcool] FTZ LEVEL 2  (0) 2015.12.17
[Hackershcool] FTZ LEVEL 1  (0) 2015.12.17