본문 바로가기

FTZ. System Hacking

(10)
level9 - 오버플로우(overflow) 문제 # 취약점은 fgets 명령어에서 발생한다. buf는 10바이트가 할당 됐지만, 입력값은 40바이트를 받고있다. 따라서 오버플로우를 발생시켜 buf2의 메모리를 조작할 수 있고 level10의 권한을 얻을 수 있다. # 먼저 아무 계산하지않고 go를 무작정 입력해 보자, Good Skill과 함께 레벨 10의 권한을 얻었다. 이번 level에서 중요하게 알아야 할 것은 buf에 10바이트의 배열을 선언 했다고해서 메모리상에도 10바이트가 그대로 적용되지는 않는다는 것이다. 컴퓨터는 기본 원칙이 있고, 운영체제와 컴파일러마다 최고의 성능을 낼 수 있도록 기본 원칙을 어기지 않는 범위 안에서 약간의 변형을 가한다. 10 6 10 6 4 4 buf[10] dummy buf2[10] dummy SFP RET
level8 - find 명령어, 패스워드 파일 크랙 문제 # 용량이 1481로 정해주었기 때문에 쉽게 찾을 거라고 생각했다. 하지만, 아무리 정확한 명령어를 입력해도 나오지 않았다. 그래서 결국 어둠의 정보(?)로 파일명이 found.txt라는 것을 알아보고 그 파일을 찾아보니.. # 용량이 2700이다.. ! 뭔가 잘못 된 거같지만 일단 파일을 열어보자. # shadow파일을 열었을때 처럼 나오고 2번째 파티션이 암호화된 패스워드이다. 문제 해결 위의 해당 암호화된 패스워드 부분을 패스워드 크랙 툴인 존 더 리퍼를 이용해 크랙했다. # found.txt파일을 pass.txt라는 이름으로 바꿔서 파일로 저장했다. # 비밀번호가 간단해서 딕셔너리 공격을 통해 0초만에 찾아 냈다. # 존 더 리퍼를 통해 크랙된 결과는 john.pot 파일에 저장된다.
level7 - 2진수, 10진수, 아스키코드 # hint는 위와 같다. # --_--_- 이것을 보자마자 -는 1 _는 0을 나타나겠구나 바로 알아 봤다.! # 띄어쓰기를 기준으로 7개씩 나눠져있었고, 각각을 10진수로 바꿔보니, 109 97 116 101 라는 10진수가 나왔다 . # 여기서 1~127까지있는 아스키코드가 바로 떠올랐다. # 아스키코드로 바꿔보면 mate가 나오고 바로 입력해 보았다. # 바로 비밀번호를 획득 할 수 있었다.! 암호화 ※ 암화관련 상식적 단어! 암호문 - 알아볼 수 없는 형태로 만들어진 이상한 글자 평문 - 우리가 알아볼 수 있는 글자 암호화 알고리즘 - 평문을 암호문으로 암호문을 평문으로 바꿔주는 함수나 라이브러리
level6 - 시그널 # 먼저, level6에 로그인 받자마자 뭔가 입력을 받고 있는 것 같아서 ls, my-pass, pwd 등과 같은 입력을 해봤지만, 그대로 접속이 끊겼다. 그래서 그냥 enter을 치자 다음과 같은 화면이 나왔다. # 먼저 1을 입력하자 다음과같이 접속을 시도하고 그대로 또 텔넷이 종료되었다. 2번과 3번도 같은 현상이 일어 났다. # 다시 강제종료를 하기위해 시그널 ctrl + c 를 눌렀지만 다음과 같이 can't use ctrl+c라고 나온다. 다른 시그널(ctrl+z ctrl+d)을 보내봤지만 아무효과가 없었다. ctrl+c를 막아둔거같다. 그래서 혹시몰라서 시작하자마자 강제종료를 시작해 봤다 # 이 화면! # 그러자 level6계정의 홈으로 돌아왔고 password파일에서 비밀번호를 얻을 수 ..
level5 - 레이스 컨디션(Race Condition) 레이스 컨디션(Race Condition) 레이스 컨디션의 한글 번역은 경쟁상태라는 뜻이다. 경쟁 상태는 다수의 프로세스가 서로 동일한 자원을 할당받기 위해 경쟁하는 상태를 말한다. 우리는 경쟁 관계에서 발생하는 취약점을 파고 들어야 한다. ※ 레이스 컨디션 취약점이 존재하기 위한 최소한의 조건 1. 다른 계정의 권한에 접근해야 하므로 SUID가 걸려 있어야 한다. 2. 임시 파일을 생서해야 한다. 3. 공격자가 임시로 생성되는 파일명을 정확하게 알아야 한다. 문제분석 HINT # /usr/bin/level5 프로그램을 실행시켜보자. /tmp 디렉토리에 가도 아무 파일이 없다. # 이 파일의 흐름은 다음과 같다. (1) /usr/bin/level5 프로그램 시작. (2) /tmp/level5.tmp 임시..
level4 - system()함수의 위험성 level3 # 코딩을 보면 인자가 1개가 아니면 에러를 출력하고 프로그램을 종료(exit(0))한다. - argc는 명령어를 포함하기 때문에 인자는 하나라는 뜻이 된다. # "dig @argv[1] version.bind chaos txt"의 문자열이 명령어로써, system에 의해 실행된다. # 파일 명이 제시 돼있으니, find / -name autodig 2> dev/null로도 찾을 수 있다. # 동시에 여러 명령어를 사용하려면 ; 를 사용하면 된다. # 문자열 형태로 명령어를 전달하려면 " "를 사용하면 된다. # 먼저, nslookup과 dig에 대해 간단하게 알아보자. 1). nslookup - 도메인 서버의 IP 주소를 확인하는 프로그램으로, 원도우 운영체제에도 있다. - 사용법 : ns..
level2 - vi에서의 명령어 기능 level2 # 그럼 일단 이전 단계와 같이 setuid가 걸린 파일을 찾아보자. # 위의 파일을 실행시켜보자. # /usr/bin/editor 파일은 일시적인 level3 계정의 권한으로 VI편집기를 실행하게 된다. # vi 중 강력한 기능중 하나는 명령어 실행 기능이다. ":!명령어" 형식으로 명령어를 실행하면 셸 화면으로 일시적으로 복쉬하면서입력한 명령어를 실행할 수 있다. # :!/bin/bash 명령어를 실행하자 권한이 유지되면서 완전히 level3의 계정을 해킹에 성공했다. !
level1 - setuid level1 # hint를 통해 hint를 얻는다. # SUID와 SGID라고 하는 기능을 이용하면 다른 계정(level2)에서 만든 파일을 내 계정(level1)에서 읽거나 쓰거나 실행할 때 파일을 실행하는 동안만큼은 다른 게정(level2)의 권한을 잠시 얻을 수 있다. #rws 즉, s가 setuid다. # 따라서 해당 파일을 실행했을때, level2의 권한을 가지고 있는 것이고, 이 권할을 유지하는 방법은 배시쉘을 이용하는 것이다.