FTZ level2 VI편집기의 고급기능

2017. 5. 23. 11:57SystemHacking/FTZ

 

 

 

2번 문제입니다 !


2번 문제의 요점은 "VI편집기에서 명령어를 실행 할 수 있다!" 입니다

명령어 실행 방식은 VI편집기내에서 :![command] 를입력하시면 쉘 화면으로 일시적으로 복귀 하고

해당 명령어의 결과를 출력합니다

명령어 실행 뿐아니라 :r![command] 를 입력하시면 해당 명령어의 실행 결과를 VI편집기 내로 가져올 수 있습니다


그럼 문제를 풀어보겠습니다


[1] 힌트 확인

- 텍스트 파일 편징 중 쉘의 명령을 실행시킬 수 있다는데 ...

- vi 편집기의 명령어 실행법을 알고있는지의 문제입니다


[2] find명령어로 level3권한의 setuid가 걸려있는 실행파일 검색 ( 공격할 파일 찾기 )

- level2]$ find / -perm -4000 -user level3 2> /dev/null

- setuid가 걸려있고, 파일의 소유자가 level3인 파일 검색 , 오류는 /dev/null 로 보내서 화면에 출력하지 않음


< 그림 2.1 >


[3] 해당 파일을 실행한다


< 그림 2.2 >


VI편집기의 실행화면과 같은 화면을 출력하고 있습니다

이제 명령어를 실행해봅시다

" :![command] " => " :!id "


< 그림 2.3 >


":!id" 의 입력결과로 uid=3003(level3) gid=3002(level2) groups=3002(level2) 가 출력되어 나왔습니다

즉, level3권한으로 id 명령어를 실행한 것입니다

왜냐? 해당파일은 level3권한으로 setuid가 걸려있는 실행파일이기 때문입니다


< 그림 2.4 >


다음은 명령어를 쉘화면으로 복귀해서 실행결과를 출력하는 것이아니라 VI편집기내에 입력시키는 방식입니다

" :r![command] " => " :r!my-pass "


< 그림 2.5 >


level3권한으로 실행된 "my-pass" 명령어의 실행결과가 편집기 내로 입력되는 것을 확인 할 수 있습니다 !


이제 gdb로 해당 파일 /usr/bin/editor를 디버깅 할 차례입니다


< 그림 2.6 >


[1]

디버깅할 때 가장 먼저 확인해야 하는 것은 Procedure Prelude 과정 입니다

<main+0> ~ <main+4> 까지의 과정입니다

$0x8 만큼의 공간을 지역변수에게 할당 해줍니다 ( 8byte )


[2]

그 다음 <setreuid> 함수가 보입니다

push $0xbbb    ( 0xbbb ==3003 )

push $0xbbb    

call <setreuid>

=> setreuid(3003,3003) 함수입니다 =>해당 파일내에서 level3의 권한으로 명령어를 실행할 수 있도록 하는 코드입니다


[3]

그리고 <system> 함수가 보입니다

push $0x8048444       //  (gdb) x/s 0x8048444 => "/bin/vi"

call <system>

=> system("/bin/vi")


두 코드를 본다면 level3의 권한으로 /bin/vi 명령어를 실행해서 level3권한의 vi편집기를 실행함을 알 수 있습니다


[4]

마지막으로 leave , ret 코드는 디스어셈블한 main함수의 종료를 알려줍니다



< 복원된 소스코드 >



#include<stdio.h>

#include<stdlib.h>

int main(){

setreuid(3003,3003);

system("/bin/sh");

return 0;

}




부족하거나 이상한점이 있다면 알려주세요 



'SystemHacking > FTZ' 카테고리의 다른 글

FTZ level4 xinetd백도어  (0) 2017.05.23
FTZ level3 system함수의 위험성  (0) 2017.05.23
FTZ level1 문제풀이 및 gdb분석  (0) 2017.05.23
FTZ 문제 풀기에 앞서  (0) 2017.05.23
gdb 명령어  (0) 2017.05.10