팀명 : 파이브(5)너블
활동 일시 : 2021.09.11 13:35 ~ 14:55
2주차 활동 계획 : 해커스쿨 F.T.Z 리눅스 공부(2)
학습 내용: 해커스쿨 F.T.Z trainer 과정에서 습득한 리눅스 기초 명령어 실전 문제에 활용
(level과정 중 level1-level5 진행)
level1
1.ls -l 명령어 입력
2.파일 목록에 hint 파일 존재 확인
3. cat hint로 hint 내용 확인 => ‘level2 권한에 setuid가 걸린 파일을 찾는다’
4. setuid 아이디가 걸린 파일을 찾을 때 => find / -user level2 -perm -4000 2>/dev/null 입력
5. permission denied 되지 않는 파일 => /bin/ExecuteMe 파일 존재 확인
6. cd /bin 을 입력해 /bin에 들어감
7. /bin에 들어있는 ExecuteMe 파일 확인
8. bash 명령어를 통해 level2의 권한을 획득한다
9. level2 권한을 획득 후 my-pass를 입력해 level2로 가는 pw를 획득할 수 있다.
<key>
2>/dev/null의 역할
/dev/null : 일종의 file, null file로 이쪽에 가는 모든 정보는 null값으로 되어버리지만 성공처리
>/dev/null : 보통 로그파일 내용을 지우거나(ex. cat test.log > /dev/null) echo등의 출력 내용을 지우는데 사용, (>가 다음에 나오는 파일에 기록을 남기겠다는 명령어 이나, null파일이므로 아무런 기록이 남지않게 됨)
2>/dev/null : 1은 standard output으로 정상 메세지 출력, 2는 standard error로 에러 메세지 출력을 의미
즉 2>/dev/null은 에러메세지를 Null로 처리하면서 기록에 남기지 않게 하는 코드
level2
1.ls -l 명령어 입력
2.파일 목록에 hint 파일 존재 확인
3. cat hint로 hint 내용 확인 => ‘텍스트 파일 편집 중 쉘의 명령을 실행시킬 수 있다는데…’
4. setuid 아이디가 걸린 파일을 찾을 때 => find / -user level3 -perm -4000 2>/dev/null 입력
5. permission denied 되지 않는 파일 => /usr/bin/editor 파일 존재 확인
6. cd /usr/bin 을 입력해 /usr/bin에 들어감
7. /usr/bin에 들어있는 editor 파일 확인
8. VIM이 뜨게 되는데 아까 힌트를 생각하면 여기서 쉘 명령 실행 가능
9. :! (외부 쉘 실행시켜주는 명령어) 를 사용해서 bash를 입력하면 level3 권한 획득
9. level3 권한을 획득 후 my-pass를 입력해 level3로 가는 pw를 획득할 수 있다.
level3
1.ls -l 명령어 입력
2.파일 목록에 hint 파일 존재 확인
3. cat hint로 hint 내용 확인 => autodig의 소스 코드 주어짐
4. 소스 코드 분석
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char **argv){
char cmd[100]; cmd 변수의 크기를 100으로 해주고 char형으로 선언해주기
if( argc!=2 ){ argc 변수 값이 2가 아닐 시 밑 문장 실행
printf( "Auto Digger Version 0.9\n" );
printf( "Usage : %s host\n", argv[0] );
exit(0);
}
strcpy( cmd, "dig @" ); cmd에 dig @를 적어준다.
strcat( cmd, argv[1] ); cmd 내용 뒤에 argv[1]를 붙인다
strcat( cmd, " version.bind chaos txt"); cmd 내용 뒤에 version.bind chaos txt 을 붙인다
system( cmd ); cmd을 실행
}
5. 위에서 말한 autodig 위치 찾기
두 방식으로 찾을 수 있는데 권한이 level4에게 있기 때문에 find / -user level4 -perm -4000 2>/dev/null 를 입력하거나 이름을 알고 있기 때문에 find / -name autodig -perm -4000 2>/dev/null을 입력해 autodig이 /bin에 위치한다는 것을 캐치
6. cd /bin을 통해 /bin으로 이동해준 뒤 아까 제시된 힌트를 떠올려보면
more hints.
- 동시에 여러 명령어를 사용하려면?
- 문자열 형태로 명령어를 전달하려면?
힌트가 더 주어짐
동시에 여러 명령어를 사용하려면 ; (세미콜론)을 이용해야 하고 문자열 형태로 명령어를 전달하려면 “”(큰 따옴표)로 묶어줘여함
7. 힌트를 통해 bash와 my-pass를 동시에 작동 시키면 된다는 것을 알 수 있음
8. 즉 autodig “bash;my-pass”를 입력해주면 두 명령어가 동시에 사용되고 문자열의 형태로 명령어를 autodig에 전달해주면서 level4 권한을 가진 autodig에서 pw를 얻을 수 있다
<key>
#include <stdio.h> , :#include <stdlib.h>, #include <unistd.h>
C 표준 라이브러리 중 하나인 헤더 파일에 선언된 내용을 포함한다는 뜻
쓰지 않으면, printf 함수의 선언을 찾을 수 없다는 컴파일 오류가 발생
level4
1.ls -l 명령어 입력
2.파일 목록에 hint 파일 존재 확인
3. cat hint로 hint 내용 확인 => 누군가 /etc/xinetd.d/에 백도어를 심어놓았다.!
4. cd /etc/xinetd.d/로 이동해 ls -l로 backdoor 파일이 있는 확인하니 존재
5. permission denied가 걸려있지 않으니 현재 위치에서 cat backdoor 입력해 내용 확인
6. backdoor는 finger 서비스로 실행되는 곳, user는 level5, server는 /home/level4/tmp/backdoor 라는 경로를 통해 실행되었다는 것을 얻을 수 있음
7. cd /home/level4/tmp/로 이동해 ls -al로 확인해보니 backdoor파일이 존재하지 않음
8. 존재하지 않기 때문에 .c 형식으로 파일을 만들어 my-pass를 전달해주는 backdoor 파일 생성
9. 파일 생성 cat > backdoor.c 후 아래와 같은 코드를 입력해줌
#include <stdio.h>
#include <stdlib.h>
int main(void) { system({“my-pass”); return 0; }
10. gcc 명령어로 backdoor.c를 backdoor로 컴파일 시켜준 뒤 ls -l로 backdoor파일이 이제 있는지 확인해주면 존재하는 것을 알 수 있음
11. 위에서 backdoor는 finger 서비스로 실행된다는 것을 알려주었는데 여기서 finger 명령어로 @localhost를 입력하면 level5의 pw를 얻을 수 있다
<key>
finger?
리눅스에서 사용자의 계정 정보를 확인하는 명령어로 /etc/passwd 파일에서 읽어서 보여주는데
단순 finger을 입력시 현재 시스템에 로그인 되어있는 사용자들을 보여주고
finger + user명으로 입력시 host명을 명시해주지 않았기에 finger은 로컬로 접속하게 되고
finger + @host명으로 입력시 user명을 명시해주지 않았기 때문에 모든 유저 정보를 보여준다.
level5
1.ls -l 명령어 입력
2.파일 목록에 hint 파일 존재 확인
3. cat hint로 hint 내용 확인 =>
/usr/bin/level5 프로그램은 /tmp 디렉토리에
level5.tmp 라는 이름의 임시파일을 생성한다.
이를 이용하여 level6의 권한을 얻어라.
4. cd /usr/bin/으로 이동해 ls -l을 확인해주면 level5 파일이 존재하는 것을 알 수 있다
5.힌트에서 level5가 실행되면 /tmp에 level5.tmp라는 임시 파일이 생긴다고 하니 확인해주면 일단 존재하지 않는다. 일시적으로 파일이 생긴 것. 파일이 존재하지 않기에 파일을 만들어 준다
6. cat > level5.tmp로 파일을 만들어 준 다음(내용 무관) ls -l를 입력하면 이제 파일이 존재하는 것을 확인할 수 있다.
7.파일이 있으니 이제 level5를 실행시키기 다시 cd /usr/bin/으로 이동한 다음 cat 을 이용해 level5.tmp파일을 열어주면 level6에 대한 pw가 나타난다.
'3. Pwnable (포너블) > 2) 개념 정리' 카테고리의 다른 글
[2021.09.25] 해커스쿨 F.T.Z Level11~15 풀이 (0) | 2021.09.26 |
---|---|
[2021.09.18] 해커스쿨 F.T.Z Level9, 10 풀이 및 Level11 풀이 방향 (0) | 2021.09.19 |
[2021. 09. 04] 해커스쿨 F.T.Z를 통한 리눅스 기초 명령어 습득 (0) | 2021.09.04 |
[2021.05.22] 8주차 : Bandit Level 15,16,17->18 | 달고나 문서 p.34 ~ ~ p.44 (0) | 2021.05.22 |
[2021.05.15] 7주차 : Bandit Level 12,13,14->15 | 달고나 문서 p.27 ~ ~ p.34 (0) | 2021.05.15 |