728x90
반응형

시스템해킹 40

OverTheWire [Narnia Level 0]

시스템해킹 워게임인 Narnia Level 0 문제입니다. 버퍼오버플로우가 사용된 문제입니다. 접속 후 홈디렉터리에는 특별한 게 없습니다. 워게임에서는 SetUID를 사용한 권한 상승이 많이 이루어지기 때문에, SetUID가 설정된 파일을 찾아보겠습니다. 소유자가 narnia1이며 SetUID가 설정된 파일을 찾았더니, 이 디렉터리를 발견했습니다. 이곳이 문제파일이 모인 디렉터리같네요. 우리는 narnia0이니, 실행할 수 있는 파일은 narnia0 뿐입니다. narnia0.c는 소스코드로 보이네요. 일단 실행해 보았습니다. val의 값을 0x41414141에서 0xdeadbeef로 바꾸라고 하는 것 같습니다. buf에는 현재 버퍼에 저장된 값을 보여주고 있고 val에는 val의 값을 보여주고 있습니다...

OverTheWire [Leviathan Level 6, 마지막 레벨]

Leviathan Level 6 입니다. 드디어 Leviathan을 전부 클리어 했네요. 이것이 마지막 문제입니다. 역시나 SetUID 비트가 설정된 프로그램이 있습니다. 인자 없이 실행해 보겠습니다. 4자리 숫자 인자가 필요하다고 하네요. 1234를 입력해 보았습니다. Wrong이 출력되었네요. 4자리 숫자로 구성된 패스워드를 찾는 문제 같은데요? 여러번 시도해도 딱히 제한도 없습니다. 이럴 때 딱인 게 있죠. Brute force를 이용해 봅시다. tmp디렉터리에 개인 디렉터리를 만들고, 공격코드를 작성할 파일을 그 안에 만들어 줍시다. 이렇게 작성하고, 저장합니다. 0000부터 9999까지의 인자를 대입하여 프로그램을 반복 실행하는 코드입니다. 그리고 실행이 가능하도록, chmod 명령어로 실행권한..

OverTheWire [Leviathan Level 5]

Leviathan Level 5 입니다. 이번에도 SetUID 비트가 설정된 프로그램이 있네요. 일단 인자 없이 실행해 보겠습니다. /tmp/file.log 를 찾을 수 없다고 나오는데요. 이 프로그램이 실행되기 위해선 저 파일이 필요한 걸까요? 제가 임의로 해당 파일을 만들어 보겠습니다. vi로 파일을 생성하겠습니다. leviathan 문자열을 입력하고 저장했습니다. 다시 프로그램을 실행해 봅시다. leviathan이 그대로 출력되었습니다. 파일의 내용을 그대로 읽어오는 프로그램 이었군요. 음.... /tmp/file.log에 링크를 설정하면 password 파일을 읽을 수 있지 않을까요? 한번 해보겠습니다. ln 명령어를 이용해서, file.log에 leviathan6의 password를 향하는 심볼..

OverTheWire [Leviathan Level 4]

Leviathan Level 4 입니다. 숨겨진 디렉터리 .trash 가 있네요. .trash 디렉터리 안에, bin 이라는 SetUID가 설정된 파일이 있습니다. 이 파일을 이용해서 다음 레벨 password를 획득할 수 있을 것 같습니다. 인자 없이 실행해 보았습니다. 2진수가 나오는데요. .....솔직히 이거 보자마자 감이 와서 리버싱 할 필요도 없이 바로 풀었습니다. 2진수를 아스키코드로 변환했더니 그게 바로 다음 레벨 password였습니다. 하지만 이렇게 끝내면 배우는 게 없으니 간단하게라도 분석을 해보겠습니다. main함수 입니다. 일단 시작하자마자 fopen 함수를 통해 leviathan5의 password 파일을 열고 있습니다. 이후, 아래쪽 fgets 함수로 password값을 꺼내왔습..

OverTheWire [Leviathan Level 3]

Leviathan Level 3 입니다. 저번 레벨과 비슷하게, SetUID가 설정된 실행파일이 있습니다. 소유자는 leviathan4 이니, 이 파일을 잘 이용하면 다음 레벨의 권한을 얻을 수 있을 것 같습니다. 인자 없이 실행시켜 보았습니다. 패스워드를 요구하길래 1234를 입력해 보았습니다만, 틀린 패스워드라고 나오네요. 리버싱을 통해 패스워드가 무엇인지 알아내야 할 것 같습니다. 저는 radare2 이용하겠습니다. radare2로 level3 파일을 실행해주고, aaaa 명령어로 프로그램을 분석했습니다. 이후 afl 명령어로 함수목록을 불러왔습니다. 그런데 main 함수가 보이지 않네요.. 어떤 함수를 먼저 살펴볼까 하다가, main은 아니지만 dbg.main 함수를 찾았습니다. 일단 이 함수부터..

OverTheWire [Leviathan Level 2]

Leviathan Level 2 입니다. 약간의 리버싱과 command Injection 기법이 사용된 문제입니다. 일단 저번 레벨과 비슷하게, SetUID비트가 설정된 실행파일이 하나 있네요. 소유자는 leviathan3 이므로, 저 파일을 실행하는 동안 우리는 leviathan3의 권한을 얻게 됩니다. 일단 인자 없이 실행해 보았는데요, "File Printer"라는 문자열과 함께 ./printfile [파일명] 형식으로 실행하라고 합니다. 음.... 출력이 안되는군요. leviathan3 파일에 대한 어떤 제한이라도 걸려있는 걸까요? 리버싱을 통해 확인해 봅시다. 저는 radare2 프로그램을 사용하였구요, 이것은 main함수의 구조입니다. 가장 처음 나오는 조건문입니다. 9212 부분에서 cmp ..

OverTheWire [Leviathan Level 1]

Leviathan Level 1 입니다. 리버싱 문제입니다만, 제가 리버싱에 대해 전혀 모르던 상태라 따로 리버싱 공부를 한 후에 문제 해결에 성공하였습니다. 홈디렉터리에 있는 문제파일 "check" 입니다. SetUID 비트가 설정되어 있고, 소유자는 leviathan2 입니다. 저 프로그램을 실행하는 동안 leviathan2 의 권한을 얻게 되는 겁니다. 프로그램을 한번 실행시켜 보겠습니다. ./check password 입력을 요구하네요. "1234"를 입력해 보았지만 틀린 password라고 쫓겨났습니다. 아무래도 리버싱을 통해 password를 알아내는 문제인 것 같습니다. r2 -d check r2 : radare2(리버싱 프로그램)를 실행하는 명령어 -d : 디버깅 모드로 실행 저는 리버싱을..

OverTheWire [Leviathan Level 0]

Leviathan Level 0 입니다. 레비아탄은 시스템 해킹 워게임이며, Bandit 워게임보다 한 단계 위에 있는 문제들로 총 8단계 구성되어 있습니다. 또한 문제마다 해결 방법에 대한 설명이 있던 Bandit과는 다르게, 아무런 설명이 없는 점이 특징입니다. 공식 홈페이지 : https://overthewire.org/wargames/leviathan/ 주소 : leviathan.labs.overthewire.org 포트 : 2223 계정 : leviathan0 password : leviathan0 저는 putty 프로그램을 이용해 접속할 것이며, 자세한 접속 방법은 https://yskisking.tistory.com/37 이곳을 참고하시기 바랍니다. 주소와 포트만 바꾸어 접속하시면 됩니다. ..

OverTheWire [Bandit Level 32, 마지막 레벨]

Bandit Level 32입니다. 드디어 마지막 문제로군요. 정확히 해석이 안되는데.. 이 모든 문제들을 푼 후엔 다른 워게임 문제를 풀으라는.. 대충 그런 식의 말인듯 합니다 우리가 아는 bash 쉘이 아니군요. 대문자 쉘에 오신 것을 환영합니다? 일단 쉘은 sh쉘 이로군요. 모든 입력값을 대문자로 받아들이는 쉘인듯 합니다. 음,,, 뭘 입력해도 안 되더군요. 리눅스에서 대문자를 쓰는 명령어가 무엇이 있을까? 생각을 해봤는데 환경변수가 있었습니다. 그러나 환경변수 목록을 찾아보고, 이용할 만한 게 있나 여러가지 확인해 봤지만 결정적인 건 찾을 수 없었습니다. $0 하지만 $0 환경변수로 해결할 수 있었습니다. $0는 현재 쉘을 반환하는 환경변수 인데요, 그냥 사용하면 쉘이 하나 더 켜지게 됩니다. (..

OverTheWire [Bandit Level 31]

Bandit Level 31 입니다. 다시 한번 git 문제입니다. 해당 git 저장소에서 password를 찾아야 합니다. 이번에도 역시나 /tmp 경로에 디렉터리를 생성한 후, git clone명령어로 다운받아 옵시다. 다운로드해준 후, 파일을 확인해 봅시다. 이번엔 저장소에 파일을 push(업로드) 하라고 하네요. 파일명 : key.txt 내용 : May I come in? Branch : master 위와 같은 조건으로 push 해야 할 듯 합니다. 먼저 key.txt 파일을 제작해 주도록 합시다. vi를 이용하여 key.txt 파일을 제작하였습니다. 이제 이 파일을 push해주면 되겠습니다. git add -f key.txt git add -f : 파일 업로드를 위해 디렉터리상의 변경 내용을 스..

728x90
반응형