2017. 5. 23. 11:57ㆍSystemHacking/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 |