2017. 5. 23. 11:25ㆍSystemHacking/FTZ
1번 문제 입니다 !
먼저 hint를 확인합니다
" level2 권한에 setuid가 걸린 파일을 찾는다."
setuid란?
실행파일에 한해서 설정이 가능하다
setuid가 설정된 실행파일을 실행하면 누구든지 해당 실행파일의 소유자 권한으로 프로세스가 실행된다
따라서 해당 실행파일을 실행중일 때 level2권한으로 명령어를 실행할 수 있음을 뜻합니다
find명령어
find [검색위치][조건]
]$ find / -perm -4000 -user level2 2> /dev/null
=>조건은 허가권 -perm 과 -user 소유자명을 걸어주었다
=> "/" 에서 -4000 -> 파일의 허가권이 --s------ 을 포함하는 모든 파일을 검색한다
=> 2> dev/null 오류가 일어난 값들은 모두 /dev/null 파일로 보내고 화면에 출력하지 않는다
"/bin/ExecuteMe" 파일이 검색되었고 이를 실행한 화면은 아래 그림1-1 에 나와있습니다
< 그림 1.1 >
위에서 말했다시피 해당 실행파일은 level2권한으로 setuid가 걸려있습니다
따라서 해당 실행파일을 실행중일때에는 level2권한으로 가지게 됩니다
my-pass를 이용해 level2의 비밀번호를 알 수 있지만 단 하나의 명령어로 완벽한 쉘을 얻기 위한 방법은 쉘을 실행하는
"sh" , "/bin/sh" 명령어를 입력하면 level2의 쉘이 작동하게 됩니다
문제풀이는 완료했고 gdb를 통한 디버깅을 시작하겠습니다
gdb실행 후 /bin/ExecuteMe파일을 불러온다음 "disas main" main함수를 디스어셈블합니다
실행결과는 다음과 같습니다
< 그림 1.2 >
[ Procedure Prelude ]
함수의 시작부분 , 지역변수의 공간을 할당해주는 역할을 합니다
$0x28 = 40byte만큼의 공간을 할당해준다
[ 명령어 x ]
x 명령어(examine)를 통해서 해당 주소의 값이 무엇인지 알 수 있다
(gdb) x/s [주소값] => 해당 주소값을 s(string) 문자로 표현
(gdb) x/x [주소값] => 해당 주소값을 x(hex) 16진수로 표현
그림 1.2를 통해서
system("clear") 와 chdir("/home/level2") 함수가 실행되고 printf함수를 통해서 문장들이 출력됨을 확인 할 수 있다
다음 소스를 확인해보자
< 그림 1.3 >
1. fget( 입력을 저장할 공간 , 입력할 문자 길이 , STDIN )
키보드로 문자길이인수만큼의 문자를 입력받아서 해당공간에 저장합니다
2. strstr( 문자열1 , 문자열2 )
문자열1안에 문자열2가 존재한다면 그 위치를 반환한다
3. 코드의 흐름
fget()함수에 인자3개를 push한다 -> strstr함수로 입력값에 "my-pass" 문자의 존재 여부 확인
-> 해당 조건에 걸리지않으면(해당문자없음) "je" 해당주소로 점프
-> 조건에 걸린다면(해당문자있음) 점프하지않고 그대로 코드 진행
strstr함수로 입력값에 "chmod" 문자의 존재 여부 확인
-> 해당 조건에 걸리지않는다면(해당문자없음) "je" 해당주소로 점프한다
-> 조건에 걸린다면(해당문자있음) 점프하지않고 그대로 코드가 진행된다
"'my-pass" or "chmod" 입력시 exit(0) 함수를 통해 해당 실행파일 종료
< 그림 1.4 >
setreuid(3002,3002) => setuid와 비슷하다
해당 실행파일의 권한을 level2 로 바꿔준다
그 다음 system("command")함수를 통해서 명령어를 입력하여 실행한다
하나의 명령어 실행 후 해당 실행파일은 종료된다
gdb가 정말 어렵습니다! 저도처음에 완전 멘붕이였는데 매 문제마다 따라서 쳐본다면 금방 이해할 수 있을겁니다
< 복원된 소스코드 >
부족하거나 이상한게 있다면 댓글로 알려주세요
'SystemHacking > FTZ' 카테고리의 다른 글
FTZ level4 xinetd백도어 (0) | 2017.05.23 |
---|---|
FTZ level3 system함수의 위험성 (0) | 2017.05.23 |
FTZ level2 VI편집기의 고급기능 (0) | 2017.05.23 |
FTZ 문제 풀기에 앞서 (0) | 2017.05.23 |
gdb 명령어 (0) | 2017.05.10 |