목록Wargame (116)
cgy12306

ID : level12 PW : it is like this 11번과 비슷한것 같다. gets 함수 또한 버퍼오 버플로우 취약점이 존재한다. 일단 실행해보자. attackme를 복사해서 디버깅해보자. 스택구조는 이렇다. 11번과 똑같은 스택구조를 가진다. 우선 환경변수에 쉘 코드를 입력해준다. 쉘 코드가 들어있는 c언어 코드로 위치를 알아낸다. 주소를 알아냈다. 코드를 입력해보자. python 명령어 부분이 들어가질 않는다. 이유는 11번에서는 argv[1]로 받아오기 때문에 뒤에 입력을 바로 줄 수 있었지만 이번 문제에서는 문구가 출력된 후 입력을 줘야한다. 파이프 문자( | )를 이용해보자. 파이프 문자는 표준출력을 표준입력으로 넘겨준다. 값은 들어갔지만 쉘을 획득하지 못했다. 이 부분은 너무 답답해..

ID : level11 PW : what!@#$? strcpy 취약점을 이용해 버퍼오버플로우를 일으켜서 쉘을 획득하는 코드인것 같다. 우선 디버깅 해보자. strcpy함수 호출 직후의 스택구조를 그려보면 이렇게 된다. 여기서 A라는 글자를 264byte(str)+4byte(ebp)+4byte(ret) 해주면 RET까지 A가 들어갈 것이다. 이러한 점을 이용해 RET에 쉘을 획득해주는 코드의 주소를 넣어주게 되면 RET은 주소를 쉘코드가 있는 주소로 가게되어 주소를 획득하게 된다. 우선 쉘코드를 환경변수에 등록하자. 쉘 환경변수의 위치를 알려주는 c코드를 작성하자. 쉘 코드의 주소는 0xbffffea6이다. 이제 A를 268개를 넣어주고 뒤에 이 쉘 코드의 주소를 넣어보자. 쉘코드의 주소는 리틀엔디안 방식..

ID : level10 PW : interesting to hack! hint 공유 메모리를 도청해야한다. 공유 메모리는 key 값을 이용해 A가 공유 메모리를 생성하면, B가 key값으로 인증해서 메모리를 공유하는 방식이다. 출처 : http://forum.falinux.com/zbxe/index.php?mid=C_LIB&document_srl=423456 C 라이브러리 함수 - shmget() 공유 메모리 생성 forum.falinux.com 공유메모리를 이용한 코드를 짜보자. 메모리를 공유하기 위해 sys/shm.h 와 sys/ipc.h를 선언해주고, key_t 변수에 key값인 7530을 넣어준다. shm_id=shmget(key, 300, IPC_CREAT)는 공유메모리 공간을 가져온다. 없으면..

ID : level9 PW : apple open hint 버퍼 오버플로우에 관한 문제인 것 같다. 코드를 분석해보자. 우선 buf2와 buf에 10만큼 캐릭터형 변수를 선언해준다. "It can be overflow : "를 출력해주고, buf에 40-1만큼 입력을 받거나 개행문자까지 입력을 받는다. 다음 if 문에서 buf2와 "go"를 2바이트 비교해서 같으면 Good Skill을 출력하고 setuid 3010을 획득하게 되며 쉘을 실행하게 된다. 이 파일을 디버깅 해보자. 안되는 것 같다. c파일을 생성해서 직접 실행파일을 만들어서 디버깅 해보자. 디버깅 후 인텔 형식으로 바꿔준다. 이제 메인 함수를 살펴보자. 스택 구조를 그려보니 ebp -24 부분이 go와 같은지를 물어보는 문제이다. a를 1..

ID : level8 PW : break the world hint 확인 용량 2700짜리인 shadow 파일이 있다고 한다. 하지만 용량의 단위가 뭔지 알려주지 않았다. 디폴트는 512byte로 되어있다. 그래서 나는 byte단위로 찾기위해 용량뒤에 c를 붙일 것이다. k는 kb, w는 2byte이다. find 명령어에서 size로 파일을 찾는 것은 -size 옵션을 주고 뒤에 수를 넣는데 +숫자를 하면 숫자 이상의 크기의 파일을 찾고 -숫자를 넣어주면 크기 이하의 파일을 찾아주고 그냥 숫자를 넣어주면 딱 맞는 크기의 파일을 찾아준다. find / -size 2700c 2>/dev/null을 해준다. 여기서 2의 의미는 표준 에러를 의미한다. 1은 표준 출력이다. 또 /dev/null은 유사 쓰레기통이..

ID : level7 PW : come together 늘 그래왔듯 힌트를 열어본다. /bin/level7를 실행해보자. 대표 사진 설명을 입력하세요. 파일과 디렉토리를 찾을 수 없다고 한다. 패스워드는 가까운곳에..라길래 '가까운 곳에..'를 입력 해 봤지만 안됐다. 문제 오류다. 헤매던도중 동기가 wrong.txt파일이 없다고 알려줬다. 그래서 wrong.txt를 검색해보니 --_--_- --____- ---_-__ --__-_- 라고 한다. /bin/wrong.txt를 추가해주고 실행해보자. 뜬다. 아마 이건 모스 부호인것 같다. -를 1 _를 0으로 두고 풀어보면 1101101 1100001 1110100 1100101이다. 이걸 10진수로 바꿔보면 109 97 116 101이다. 입력해보자. 안..

ID : level6 PW : what the hell 접속하자마자 hint가 뜬다. 엔터를 누르니 접속 메뉴가 뜬다. 아마 이 부분에서 무언가를 해야하는 것 같다. 2번을 선택해보니 Trying하고 IP만 뜬다. 다른 1번하고 3번도 마찬가지이다. 다른 값을 입력하면 강제 종료가 된다. 그런데 인터럽트인 ctrl + c를 입력하면 Can't use ctrl+c라고 뜬다.(사람은 하지말라면 더 하고 싶어지는 법이다) 원래 ctrl+v나 ctrl+c를 쓰면 ^V나 ^C가 뜨거나 종료가 되어야 한다. 하지만 Can't use ctrl+c가 뜨는건 뭔가가 마음에 걸린다. 그래서 hint 창에서 엔터말고 다른 값을 입력했더니 입력이 된다. 여기서 ctrl+c를 해봤다. 쉘을 획득 했다. my-pass를 하니 l..

ID : level5 PW : what is your name? 힌트를 보자. /usr/bin/level5 를 실행 후 /tmp 디렉토리를 확인 해 보자. 아무것도 없다. 낚였다. 이 문제는 도무지 감이 안와서 구글링의 도움을 받았다... 만약 /usr/bin/level5를 실행 했을 때 level5.tmp가 생성되었다가 프로그램 종료전에 level5.tmp를 삭제를 한다면 심볼릭 링크를 활용 해야한다고 한다. * 링크는 하드링크와 심볼릭 링크 두가지로 나뉜다. 심볼릭 링크는 간단히 윈도우의 바로가기와 비슷하다. 하지만 하드링크는 inode값이 원본파일과 같고, 심볼릭 링크는 inode값이 원본파일과 다르다. 그렇다면 /usr/bin/level5 파일이 실행될 때 level5.tmp 파일을 생성 할 것이..