본문으로 바로가기

[해커스쿨 ftz - 4] trainer 5~10 정리

category 해킹/FTZ 2016. 6. 11. 21:24

- trainer6 (coffee)
패스워드 파일을 분석해보는법을 배웁니다.
(패스워드 파일 : 한 서버를 사용하는 사용자들의 모든 정보를 기록해 놓은 파일)


root : x : 0 : 0 : Admin : /root : /bin/bash
  1                    6         7
1. 로그인할 때 사용되는 아이디
2. 패스워드 (리눅스 버전 5.0 까지만해도 이곳에 암호화된 문자열이있었는데 크래커가 뚫었고 그래서 더복잡한방식으로 암호화해도 뚫려서 결국엔 /etc/shadow파일에 관리자만열 수 있게 비밀번호를 보관하게 되었다.)
3. 컴퓨터에 입력되는 사용자 아이디 (컴퓨터가 알아듣는 사용자)
4. 컴퓨터에 입력되는 그룹 (컴퓨터가 알아듣는 그룹)
5. 사용자의 이름
6. 로그인에 성공 햇을 때 기본으로 위치하게 되는 기본 디렉토리
7. 처음 로그인 했을 때 실행되게 할 프로그램 (로그인 했을 때 쉘이 실행되는 것)



- trainer7 (to the top)
리눅스 환경에서 압축을하고 해제하는법을 배웁니다.


tar, gzip : 리눅스 압축 파일


tar cvf 합칠파일 합칠파일들 : 합치기
tar xvf 해제할파일 : 해제하기

옵션
c - Create : 새로운 파일을 만드는 옵션
x - eXtract : 압축을 해제시키는 옵션
v - View : 압축이 되거나 풀리는 과정을 출력하는 옵션
f - File : 파일로서 백업을 하겠다는 옵션


ex) tar cvf songs.tar * : 현재 디렉토리에 있는 모든파일(*)을 songs라는 새로운 파일로 합쳐라


이 tar 명령은 파일을 압축하지않고 그냥합친다. 그렇기떄문에 다시 기존의 파일들을 복구할 떄 속도가 엄청나게 빠르다.

백업용으로 매우좋다.


gzip : 한번에 한개의 파일 압축 (한개의 파일에 용량을 압축한다.)
gzip 파일이름 : 선택된 파일을 압축한다
gzip -d 파일이름 : 선택된 파일을 해제한다


>> tar은 여러개를 하나로 합치고 gzip는 하나의파일의 용량을 줄여서압축해주기때문에 tar과 gzip를 같이쓰면 좋다.

☆ 리눅스 압축 확장자
tar : tar 프로그램을 사용하여압축된 파일
gz : gzip 프로그램을 사용하여 압축된 파일
tar.gz : tar 프로그램으로 합친 후 gzip으로 압축한 파일
tgz : tar.gz와 동일


- trainer8 (player)


새로운파일을 만들고, 컴파일하고, 그것을 실행시키는 방법을 배운다.

( 실제 해킹할떄 빠짐없이 사용되는 방법이다. )
☆ 파일의 종류
1. 일반 텍스트 파일 : 글자로만 이루어진 파일로써 확장자는 .txt고 cat으로 내용 출력 ex) README.TXT
2. 프로그램 소스 파일 : 컴퓨터 언어로 입력한 파일로 컴파일 과정을 거쳐 실행 (cat으로 내용을 볼 수 없음)


☆ 텍스트 파일 생성법
1. 쉘 프롬프트 상태에서, cat > 파일이름.txt 라고 입력
( > 는 리다이렉션이라고 읽으며 방향을 전환한다는 뜻을 가지고있다. 방향을 전환한다는 것은 리눅스는 실행결과를 모니터로 출력하는데 (그냥 cat이라고 입력한후 아무글자나 입력하면 그대로 모니터에 나타남) 이것을 모니터가아닌 파일로보내는것을 말한다. 즉 출력의 방향을 전환하는 것이다. 쉽게말해 뜻은 "나는 왼쪽에서 출력되는것을 받아서 오른쪽의 입력으로 보내버리겠다" 라는 뜻이다. )
2. 원하는 내용 입력
3. Ctrl + D
4. 수정할 경우엔 cat >> 파일이름.txt 라고 입력후 입력하면 덧붙여서 입력된다.

( 그냥 cat > 파일이름.txt하면 그파일이 새롭게 덮어씌워지기때문에 덧붙여서 입력하려면 위에명령어를 사용한다.)


>> 편집기를 사용하면 더욱 빠르고 쉽게 파일을 생성할 수 있다.


소스 파일 생성법
1. 쉘 프롬프트 상태에서, cat > 파일이름.c 라고 입력
2. C언어로 내용 입력
3. gcc -o 만들프로그램이름.exe 소스파일이름.c 로 자신의 소스파일을 exe로 바꿔줌(컴파일)

4. /home/trainer8/program.exe 와같이 절대경로로 프로그램을 실행할 수 있다.

4-1. .은 현재 디렉토리를 의미하므로 ./program.exe라고 쳐도 프로그램을 실행할 수 있다. (현재디렉토리가 /home/trainer8일경우)
(절대경로는 최상위 디렉토리부터 시작되는 경로, 상대경로는 자신이 위치한 디렉토리르 기준으로 따지는 경로)

- trainer9 (programming)


리눅스는 윈도우와다르게 한 서버에 여러 사용자가 접속하여 사용하게된다. 그러므로 내가 개인사용자이고, 다른 사용자가 나의파일에 접근하지 못하도록 해야할때 나오는개념이 권한(Permission)이다.
유저 : 자신을 의미
그룹 : 자신이 속한 그룹 (이그룹을 변경하지 않는한 유저는 자신의 유저네임과 같은 이름의 그룹에 속한다.)
아더 : 유저와 그룹을 제외한 모든 다른 사람
루트 : 절대적인 권한을 가진 사람

id : 자신의 id를 볼 수있음.
uid : User ID의 약자로 유저 이름
gid : Group ID의 약자로 그룹의 이름
groups
: 현재 자신이 어떤 그룹에 속해있는지를 확인


권한예시)

-rwxr-xr-x  2  root  root  4096 Apr 22 16:59 conory

파일Type 퍼미션정보 링크수 소유자 소유그룹 용량 생성날짜 파일이름
  • 파일 Type : - 파일유형
  • 퍼미션정보 rwx 소유자권한 | r-x 그룹권한 | r-x 그외일반사용자 (이떄 - 기호는 그 권한이 없다는뜻)
  • 링크수 : 해당 파일이 링크된 수 링크는 윈도우의 "바로가기"와 같습니다. "in [대상파일] [링크파일]" 명령으로 링크파일을 만듭니다.
  • 소유자 : 해당 파일의 소유자이름
  • 소유그룹 : 해당 파일을 소유한 그룹이름 특별한 변경이 없을 경우 소유자가 속한 그룹이 소유그룹으로 지정됩니다.
  • 용량 : 파일의 용량
  • 생성날짜 : 파일이 생성된 날짜 
  • 파일이름 : 파일이름


(권한에대한 설명은 level1을 풀이하면서 자세하게 조사해서 정리해놓은것이있으니 그부분을 참고하세요

링크 : http://nextline.tistory.com/42)


>> exe, bat, com 들이 리눅스의 실행파일인데 리눅스에서는 확장자만보고 실행이되는지 안되는지 모른다. 그러므로 실행권한인 'x'라는 문자가 있는지 없는지를 보고 판단한다.


- trainer10 (best!)
드디어 마지막 트레이닝!!! 이번에는 Local 해킹시 핵심이 되는 SetUID에 대하여 알아본다.


☆ 해킹의 종류

Local 해킹 : 관리자 권한(root)를 얻고자 시도
Remote 해킹 : 자신이 해킹하고자하는 서버에 아이디가 없어서 아이디를 얻고자 시도하는것.

( Remote 해킹방법엔 여러가지가있다. 무작위로 아이디와 비밀번호를 입력하여 접속하는 방법부터, 데몬의 취약점을 공략하여 접속하는방법, 심지어 게시판이나 방명록을 이용하여 접속하는 방법까지. 방법은 수십가지가 넘는다. 하지만 정작 중요한건 로컬해킹이기떄문에 여기서는 로컬해킹에대해서 알아본다.)

관리자권한을 얻는다면..? : (해킹성공과 같다) 만약 F.T.Z의 관리자권한을 얻었다면 홈페이지도 전부변경할 수 있고, 레벨이나 트레이닝도 전부수정할 수 있으며, 그 F.T.Z에 중요한파일도 전부 다운로드할수 있다.(이것은 크래킹이다.)


SetUID : 일시적으로 자신의 ID를 변경하는 것 (잠시동안 root 권한을 가질 수 있음)
※ passwd 파일에는 SetUID가 걸려있음


>> 그러므로 SetUID를 이용해서 관리자권한을 얻어낼 수 있는데, 보통의 파일들은 필요한만큼의 관리자권한을 제공하고, 그일이 끝나면 다시 관리자권한을 가져간다. 그래서이것을 어떻게하면 권한을획득할까 연구하다가 발견된 기법들이 "버퍼오버플로우" , "레이스컨디션", "IFS버그", "링크버그" , "포맷 스트링 어택" 등등이다.


>> 버퍼오버플로우의 예로 joe파일을 들 수 있다. 이파일은 joe filename이라고 입력하면 해당파일의 편집 화면이 출력된다. 그런데 이 joe파일은 filename이 1000자가 넘어버리면 프로그램이 제대로 실행되지 않는다. 해커들은 이것을 이용해서 버퍼오버플로우기법을 개발하였다. 바로 1000자를 넣어 프로그램에 에러가 날 떄의 그순간을 이용하여 /bin/bash 파일을 실행하도록 조작해서 루트권한의 쉘을 획득하는것이다.


☆ find 명령
-perm : 권한과 일치하는 파일을 찾는다
-name : 이름과 일치하는 파일을 찾는다
-user : 유저와 일치하는 파일을 찾는다
-group : 그룹과 일치하는 파일을 찾는다

ex)

find / -perm -4000 : 서버 전체에서 SetUID가 걸린 파일 찾기
- : 적어도
-perm : 권한을 찾는다
4 : SetUID
000 : rwx 모두




참고자료 : 해커스쿨에 <초콜렛나인>님의 글



후기 // 아..! 드디어끝났네요!! 이 트레이닝의 장점은 정말 쉽게쉽게 알려준다는것입니다. 진짜 버퍼오버플로우를 저렇게 설명해주실줄은.. 엄청 쉽고 간단하며 이해잘되게 설명해주셔서 매우 쉽게 공부할 수 있었습니다. 제가 마치 다른 한사람과 공부를 하고있는느낌이였습니다. 드디어 이제 보안에 첫걸음을 내딧게 된거같아서 뿌듯합니다. 내용중에서 전체적으로 재밌었구요 이내용을 배웠다면 level1도 쉽게 풀수 있었을것 같습니다. 만약 다른친구들도 리눅스를 모르는데 리눅스에대해서 공부하고싶다면 가장처음으로 무조건 이 trainer를 추천하고 싶습니다. 정말 재미있었습니다!!