시스템 32

SetUID와 권한상승

* 파일과 디렉터리 생성 시 기본 권한- 파일 -> 644- 디렉터리 -> 755 * 파일, 디렉터리의 기본 생성 최고 권한(umask 활용)파일 -> 666 (chmod로 실행권한 줄 수 있음 -일반 파일에 실행권한을 부여 하면 파일 색(실행 파일)이 연두색으로 변함)디렉터리 -> 777 * /etc/profile 파일- umask 설정 돼 있음 * SetUID- 프로그램 실행 시 파일 소유자의 권한으로 실행 * /etc/shadow 파일의 접근권한- ---------- 권한 설정이 안 돼있어도 소유자(root)는 열람 가능 * /usr/sbin/passwd 명령어의 접근권한- rwsr-xr-x- 비밀번호를 바꿀때는 /etc/shadow파일에 접근해야 하는데 SetUID를 통하여 일반 사용자들도 /et..

[문제 풀이로 배우는 시스템 해킹 테크닉] level10.공유 메모리에 데이터 읽고 쓰기

이번 레벨의 문제를 풀기 전에 공유 메모리라는 것을 먼저 알아야 한다. 공유 메모리란 프로세스간에 공유해서 쓰는 메모리를 말한다. 프로세스는 각자 자신만이 사용할 메모리 공간을 할당해서 사용하기 때문에 다른 프로세스에서 사용하는 메모리 공간은 침범할 수 없도록 설계돼있다.그러나 프로세스 간 서로 데이터를 공유해야 하는 필요성 때문에 IPC라는 기법이 생겨났다. 큰 프로그램은 하나의 프로세스로 모든 사하을 구현하기 힘들기 때문에 여러 개의 프로세스로 기능을 분리해서 만들게 되는데 이렇게 기능을 분리하였기 때문에 서로 다른 프로세스 간에도 데이터를 공유해야 할 필요성이 있다.즉, 공유 메모리는 프로그램을 개발할 때 함수로 각종 기능을 분리하고 함수 간에 인자로 데이터를 전달하는 것과 개념상 비슷하며 프로그램..

[문제 풀이로 배우는 시스템 해킹 테크닉] level9. 버퍼 오버플로우

이번에도 힌트를 열어 확인해보면 /usr/bin/bof의 소스코드를 볼 수 있다.간단하게 해석하면 buf배열에 40바이트 이하의 키보드 입력을 받고 buf2배열에 go가 들어가 있으면 Good Skill이라는 문자열을 출력하고 level10권한 부여 후 배시셸을 실행시키는 코드이다.그런데 여기서 주의해서 봐야 할 점은 buf배열의 크기가 10바이트 라는 것이다.buf배열의 크기는 10바이트인데 fgets()함수로 40바이트 이하의 키보드 입력을 받고 있다. 힌트에서 얻은 소스코드를 bof.c라는 파일로 복사하고 지역 변수가 스택에 배치되는 위치를 알 수 있도록 아래와 같이 밑줄친 소스를 한줄 추가한다. 그리고 실행해보면 buf의 주소는 0xbffff7e0 buf2의 주소는 0xbffff7f0이라고 나온다..

[문제 풀이로 배우는 시스템 해킹 테크닉] level8. 리눅스 패스워드 파일 크랙

힌트를 확인해보면 shadow파일의 용량이 2700이라는 정보를 얻을 수 있다. find 명령으로 용랑이 2700인 파일을 찾아보면 /etc/rc.d/found.txt라는 파일이 눈에 띈다. -size 1b 512바이트 단위의 블록 사이즈 검색(디폴트) -size 10c 10바이트 사이즈 검색 -size 10k 10K바이트 사이즈 검색 -size 10w 10워드 사이즈 검색 /etc/rc.d/found.txt파일의 내용을 확인해보면 /etc/shadow파일의 형식과 동일한 것을 알 수 있다. 이를 john the ripper(로컬 패스워드 크랙용 툴)을 이용하여 크랙한다.참고적으로 hydra라고 하는 원격 패스워드 크랙용 툴도 있다.

[문제 풀이로 배우는 시스템 해킹 테크닉] level7. 암호화의 시작

level7계정으로 접속하여 힌트를 확인해본다. 힌트에서 제시한대로 /bin/level7명령을 실행하면 패스워드를 입력하도록 나온다.일단 모르기 때문에 아무 문자나 입력해본다.(로컬에서 구축한 ftz서버이기 때문에 wrong.txt가 없다고 나온다.)올바르지 않은 패스워드 입니다. 패스워드는 가까운곳에...--_--_- --____- ---_-__ --__-_-위와 같은 내용을 출력 받았다고 치고선 문제를 푼다.-을 1, _을 0으로 하여 2진수를 10진수로 변환한다음 아스키코드를 찾아보면 mate라고 나온다.1101101 1100001 1110100 1100101109 97 116 101m a t e 패스워드로 mate를 입력하면 level8의 패스워드가 나온다.

[문제 풀이로 배우는 시스템 해킹 테크닉] level6. 시스템 인터럽트의 위험성

level6에 로그인하자마자 힌트 화면이 나타난다. 여기서 아무 키나 누르면 아래와 같이 뜬다.1~3번을 입력하면 putty가 종료되는 현상이 나타난다. 다시 접속하여 로그인 후 힌트 화면에서 Ctrl+C을 눌러 프로그램의 흐름을 막아버리면 level6의 셸이 나타난다.여기서 디렉터리에 있는 파일목록을 보면 의심스러운 password라는 파일이 보이므로 내용을 확인해보면 level7의 패스워드를 확인할 수 있다.

[문제 풀이로 배우는 시스템 해킹 테크닉] level5. 레이스 컨디션

* 레이스 컨디션- 다수의 프로세스가 서로 동일한 자원을 할당받기 위해 경쟁하는 상태 -> 레이스 컨디션 취약점이 존재하기 위한 최소한이 조건1. SUID가 걸려 있어야 함(다른 계정의 권한에 접근해야 하므로)2. 임시 파일을 생성해야 함3. 공격자가 임시로 생성되는 파일명을 정확하게 알아야 함 * 진행 흐름1. 공격 프로세스에서 /tmp/lvl6pass.txt파일을 만든다.2. 공격 프로세스에서 /tmp/lvl6pass.txt파일을 원본으로 하는 /tmp/level5.tmp링크파일을 만든다 (/tmp/level5.tmp링크가 취약한 프로세스가 생성하고 삭제하는 파일의 이름임)3. 레이스 컨디션 취약점이 있는 프로세스를 시작한다.4. 취약한 프로세스가 /tmp/level5.tmp파일을 생성하려고 하지만 ..

[문제 풀이로 배우는 시스템 해킹 테크닉] level4. xinted 백도어

* 로컬 백도어 : 로컬 시스템을 통해 백도어를 이용* 원격 백도어 : 네트워크를 통한 원격으로 백도어를 이용 hint파일을 열어 힌트를 얻어본다. 아래와 같은 힌트를 얻을 수 있다. /etc/xinted.d에 백도어가 있다는 뜻이므로 해당 디렉터리의 내용을 살펴본다.backdoor라는 서비스가 눈에 띈다. backdoor 서비스의 설정을 확인해 본다. 설정 항목별 의미 service finger 서비스의 이름 /etc/services 파일에 있는 서비스명으로 선택하는 것을 권장 disable = no 데몬을 비활성화하지 않음 flags = REUSE 서비스 포트가 사용중인 경우 해당 포트의 재사용을 허가 socket_type = stream TCP/IP프로토콜을 선택 wait = no 이미 서비스가 연..

[문제 풀이로 배우는 시스템 해킹 테크닉] level3. system()함수의 위험성

이 문제를 풀기 전에 먼저 알아야 할 것은 dig 이다.dig는 nslookup과 동일하게 도메인의 IP주소를 확인하는 프로그램이다.(기본적으로 유닉스 계열 OS에 탑재돼 있음)dig 사용법은 아래와 같다.dig @서버IP 도메인주소 version.bind chaos 옵션은 DNS서버 버전을 확인할 수 있는 옵션이다.(요즘에는 BIND설정에서 버전 요청에 대해 회신하지 않도록 설정하고 있으므로 취약한 DNS서버가 아니면 BIND버전에 대한 회신이 없다.) 이번에도 hint파일을 열어 힌트를 얻어본다. 그럼 아래와 같은 힌트를 얻을 수 있다.소스코드의 흐름을 보면먼저 "dig @"라는 문자열을 cmd배열에 넣는다."dig @"문자열 뒤에 autodig 명령어 다음에 입력된 문자열을 붙인다."dig @입력받..

[문제 풀이로 배우는 시스템 해킹 테크닉] level2

이 문제를 풀기 전에 먼저 알아야 할 것이 있다.바로 vi편집기의 명령어 실행 기능이다.:!명령어 를 입력하면 셸 화면으로 일시적으로 복귀하여 입력한 명령어를 실행한다.:sh 를 입력하면 셸을 실행할 수 있다.참고적으로 !앞에 r옵션을 추가하면 (즉, :r!명령어) 실행한 명령어의 결과값을 vi 편집기의 편집화면에 추가할 수 있다. 이번에도 hint파일을 열어 힌트를 얻어본다. level3의 권한을 일시적으로 얻을 수 있도록 level3계정의 권한에 SUID가 설정돼 있는 파일을 찾는다. 찾은 /usr/bin/editor파일을 실행시켜본다. vi 편집기와 똑같은 화면이 실행된다. level3 계정의 권한으로 vi편집기를 실행하게 되었으므로 my-pass명령을 실행시켜 패스워들을 알아낸다.