2012년 5월 19일 토요일

해커스랩 통과하기

해커스랩 안 들어간지 몇년 된 것 같다. 

free hacking zone had been down for about 1.5 years. So I don't expect whether links is available or not.


but solving methods always good to administrator as hacking info.
-------------------------
온라인 강좌 1회 해커스랩 단계 다 통과 하기 프로젝트입니다.
샘플 1회 강좌를 보신분들은 앞단계 적용하기 활용하셔서 0단계를 무난히 넘어 가셨을거라 생각합니다. 이번은 레벨 1>레벨 2로 단계 업을 합니다.
내용을 차근히 읽어보시고 가장 중요한것은 실전입니다. 실제로 접속하셔서 그대로 따라하기를 하신후 모르는부분은 하나 하나 체크해서 자신의 것으로 만들길 바랍니다.


레벨1 -> 레벨2 패스워드
<문제>
한 어리석은 대학생 서모씨는 Unix C programming 수업시간에 교수로부터 Standard input으로 부터 패스명을 입력받아 그 파일의 종류를 나타내라는 과제를 받았다. 똑똑한(?) 서모씨는 UNIX의 기본 커맨드 중에 file 이라는 유틸리티가 있음을 알고 이를 이용해 숙제를 간편한 방법으로 해결하였다. 그러나 서씨의 방법에는 상당한 보안상 위험이 있다. 이를 이용하여 다음 레벨을 획득하시오

<힌트>
위 화일의 이름은 딱풀제조 회사명이다.

<레벨업>
이번 문제도 렙0와 마찬가지로 suid(set user id)의 보안상 문제점을 이용하는 것인데, 여기서 suid에 대해 먼저 짚어보고 계속가기로 하자. 먼저 화일접근 권한에 대해서 먼저 살펴보기위해 /etc/passwd란 파일의 권한을 한번 살펴보자.

[relax@bluestar relax]$ ls -l /etc/passwd
-rw-r--r-- 1 root root 887 Mar 3 01:42 /etc/passwd

위에서 보는바와 같이 /etc/passwd란 파일은 user가 root이고 group도 root이다. 그리고 제일앞이 - 이므로 일반화일이다. 그리고 소유주인 root에 대한 권한부분이 rw- 이므로 소유주인 root는 읽기/쓰기가 가능하고 실행화일이 아니므로 실행부분은 없다. 그다음 group의 권한부분이 r--이므로 group내의 사용자들은 읽기만 가능하다. 마지막 다른 사용자의 권한부분이 r--이므로 역시 읽기만 가능하다. 결국 /etc/passwd는 소유주인 root만 수정이 가능하다.
그런데, 우리가 패스워드를 수정할 때 쓰는 passwd란 파일은 사용자로 부터 입력받은 새로운 패스워드를 가지고 /etc/passwd 란 파일을 수정하여 패스워드가 업데이트 된다. 그런데 /etc/passwd는 root만 수정할 수 있는데 어떻게 일반사용자에 의해 /etc/passwd가 수정되어질 수 있는가???

위의 질문에 대한 해답은 passwd(/usr/bin/passwd)의 접근 권한을 보면 확실해진다.
[relax@bluestar relax]$ ls -l /usr/bin/passwd
-r-sr-xr-x 1 root bin 58306 Apr 13 1999 /usr/bin/passwd

위에서 보는 바와 같이 소유주인 root의 접근권한 부분이 r-s로 되어 있다. SUID 비트가 셋팅되어 있는 것이다. 이렇게 suid 비트가 설정되어 있으면 다른 사용자들이 이 화일을 실행하는 잠시동안은 이 화일의 소유자의 권한 을 가지게 된다. 즉 이 경우엔 root의 권한을 가진다. 결국, 일반 사용자들이 passwd로 패스워드를 수정하는 경우 passwd를 실행하는 잠시동안 root의 권한을 빌려서 /etc/passwd란 화일을 수정하고 수정이 끝나면 다시 원래의 권한으로 되돌아 오게 되는 것이다.

이러한 suid는 위와 같이 매우 유용하게 사용될 수 있는 반면 보안상으로 매우 취약한 약점을 가지고 있다. 여기서 suid가 왜 문제가 되는지 간단한 예를 하나 들어보자. 예를 들어 시스템 관리자가 관리자용으로 따로 만든 계정이 아닌 그냥 root로 작업을 하고 있다가 잠시 자리를 비웠다고 가정해 보자. 이때, 이 시스템에 hacker란 계정을 가진 사람이 들어와서 아래와 같이 했다면 큰일이다.
[root@bluestar /root]# cp /bin/sh /home/hacker
[root@bluestar /root]# chmod 4775 /home/hacker/sh
[root@bluestar /root]# ls -l /home/hacker/sh
-rwsrwxr-x 1 root root 373304 Mar 23 04:05 /home/hacker/sh

위와 같이 해두면 hacker란 사용자는 다음에 자신의 계정으로 로긴한 후 이 훔친 shell(일종의 백도어이다.)을 이용하여 언제라도 root가 될 수 있으니 얼마나 위험한 일인가...다음은 그 과정을 보여준다.
[hacker@bluestar hacker]$ <-- hacker가 자신의 계정으로 로긴..
[hacker@bluestar hacker]$ whoami
hacker
[hacker@bluestar hacker]$ ls -l
-rwsr-xr-x 1 root root 373304 Mar 23 04:05 sh
[hacker@bluestar hacker]$ ./sh <-- root의 권한으로 shell을 실행시킴(root shell 획득...)
[hacker@bluestar hacker]#whoami(프롬프트가 $->#으로 바뀐것을 주목..)
root
이후의 일은 끔찍함 그자체.... ^_^

그러므로 시스템 관리자는 화면 잠금없이 자리를 비우는 일이 없도록 해야하며, 수시로 아래명령으로 불필요하게 suid/sgid 설정 이 되어있는 화일이 없는지 확인해야 한다. (보안툴을 이용해서 점검이 가능..)
[root@bluestar /root]# find / -perm -4000 -o -perm -2000 -print


이제 본론으로 돌아와서..레벨1을 깨보자..
우리가 찾는 딱풀제조 회사명을 검색엔진으로 찾으면 amos라는 것을 알 수 있다.
(아니면 그냥 drill 서버에서$find / -user level2 -group level1 -print로 찾으면 나온다.)
이 화일을 실행하면,
[level1@drill tmp]$/usr/bin/amos
path?라고 나온다. 여기서 /usr/bin/amos를 입력해보자.
[level1@drill tmp]$/usr/bin/amos
path?/usr/bin/amos
/usr/bin/amos: setuid ELF 32-bit LSB executable, Intel 80386, version 1, dynamically linked
(uses shared libs), not stripped

그런데 여기서 다음과 같이 입력해보자..
[level1@drill level1]$ file /usr/bin/amos
/usr/bin/amos: setuid ELF 32-bit LSB executable, Intel 80386, version 1, dynamically linked
(uses shared libs), not stripped

여기서, 우리는 똑똑한(?) 서모씨가 이 amos라 프로그램에서 path?로 입력받은 화일명을 file 이라는 유틸리티의 입력으로 주도록 했다는 것을 알 수 있다.
file이라는 유틸리티는 입력으로 들어온 화일이 어떤 형태의 화일인지를 알려주는 유틸리티이며 사용법은 [$fille 화일명]이다.

그런데 /usr/bin/amos의 접근권한을 보면 아래와 같이 suid 비트가 설정되어 있고 user가 level2인 것을 알 수 있다.
[level1@drill level1]$ ls -l /usr/bin/amos
-rwsr-x--- 1 level2 level1 13423 Aug 10 15:15 /usr/bin/amos
그러므로 이 amos를 실행하는 동안은 level2 사용자가 되는 것이다.

그런데 여기서 또 한가지 알아야 하는 것은 유닉스에서 두가지 명령을 하나의 라인에서 같이 줄 경우 아래와 같이 ; 으로 분리한다는 것을 알아야 한다. 즉, 다음과 같이 할 경우
[level1@drill level1]$ ls;ls -l
Mail public_html tmp
total 5
drwxr-xr-x 2 root root 1024 Aug 10 14:39 Mail
drwxr-x--x 2 root level1 1024 Aug 10 15:14 public_html
drwxrwx--T 2 root level1 3072 Jan 10 05:00 tmp
ls의 결과를 보여주고 바로 다음 명령인 ls -l의 결과를 보여준다. 이제 레벨1 해답의 열쇠가 보이나요??? 안보인다구요?? ^_^..

amos 실행후 path?에서 haha;pass 라고 입력해주면 어떻게 되겠는가??
이렇게 입력하면 다음의 명령이 level2의 사용자 권한으로 실행되는 것이다.
[level1@drill level1]$file haha;pass
즉, file haha를 실행하고 pass를 실행한다. file의 인자로 넘어간 pass까지 완전히 실행이 끝나기 전까지는 level2의 사용자로 실행되고 있는 상태(amos가 suid(level2)가 설정되어 있기 때문에)이기 때문에, file haha를 실행하고 haha란 화일이 없을 것이기 때문에 에러 메시지를 출력하고 바로 pass(운영자가 만들어 놓은 스크립트로 shell 사용자의 패스워드를 화면상에 보여준다.)를 실행하여 레벨2의 패스워드를 보여준다.

[level1@drill tmp]$/usr/bin/amos
path?haha;pass

---------------------------------------------------------------------
[ LEVEL 2 ]
---------------------------------------------------------------------
패스워드 : xxxxxxxxxxxx
---------------------------------------------------------------------
온라인 제 1차 세미나 내용이 나갔습니다. 여러분들이 만족할만한 내용이었는지 모르지만 관리자로서 최선을 다해 작성한 내용이니 화내지 마시고요 가장 중요한것은 스스로의 공부라는것입니다. ^^ 그럼 2차 내용에서 뵙겠습니다. 1달간의 세미나가 끝나면 여러분은 해커스랩 15단계는 완벽하게 마스터 하실수있을겁니다. 그럼 수고 하시고요 ^^ 

댓글 없음:

댓글 쓰기

국정원의 댓글 공작을 지탄합니다.

UPBIT is a South Korean company, and people died of suicide cause of coin investment.

 UPBIT is a South Korean company, and people died of suicide cause of coin. The company helps the people who control the market price manipu...