일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- LoB
- 시간복잡도
- 파일 시스템
- pwnable.kr
- 큐
- 암호수학
- 미로 탐색 알고리즘
- HTML
- PHP
- windosws wbcs
- 정렬 알고리즘
- ftz
- C
- 스택
- level13
- windosw 문자열
- ftz level13
- OSI
- 두근두근 자료구조
- 파이썬
- Java
- 재귀
- 자료구조
- SWiFT
- War Game
- Stack
- 백준
- web
- c언어
- System
- Today
- Total
목록War Game (43)
나의 기록, 현진록
ftz level14 다음은 hint의 내용이다. check에 0xdeadbeef가 저장되어 있다면 성공이다. check의 거리를 알기 위해서 gdb를 실행시킨다. main+29 내용을 보면 ebp-16에 저장되어 있는 값과 0xdeadbeef를 비교한다. 즉 check 변수의 위치는 ebp-16이다. sfp까지의 거리가 56byte이므로 check 변수의 거리는 56-16=40 byte 부터이다. 페이로드 작성 40byte부터 0xdeafbeef를 입력하면 끝이다.
ftz level13 다음은 hint의 내용이다. 버퍼 오버플로우 기법으로 ret 값에 쉘코드의 주소를 넣으면 된다. 단, i 변수에 저장된 값이 0x1234567을 그대로 보존해야만 한다. ret까지의 거리와 i 변수의 거리를 알아야 한다. ebp부터 sfp까지의 거리는 0x418 -> 1048byte이다. 1052byte부터 ret의 주소 0x1234567이 저장된 곳을 확인해보자(굳이 안 해도 된다.). 0x01234567(==0x1234567)이 저장되어 있음 그렇다면 ebp부터 i변수가 저장된 곳은 어디일까 AT&T 문법에서 intel 문법으로 바꿔보자. main+69를 보면 0x1234567을 ebp-12와 비교한다. hint의 내용에서 if문에 속한다. ebp-12은 i 변수라는 의미이다. ..
ftz level12 level13 setuid 다음은 hint의 내용이다. level11과 다른 점은 str 배열에 저장될 문자열은 실행 인자가 아닌 실행 후 gets로 입력 받는다. level11과 별 다른 점 없으니 크기는 0x108로 똑같다. 환경변수에 쉘코드를 등록하고 주소를 출력하는 코드를 작성한다. 페이로드 작성 level12는 level11과 작성 순서가 다르다. 실행 인자가 아니기 때문에 attackme를 실행시킨 후에 입력해야 한다. 파이프라인( | )을 이용하면 된다. 페이로드는 다음과 같다.
ftz level11 level12의 권한을 가진 파일 현재 level11 권한을 가진 지금도 실행할 수 있는 권한이 있다. hint의 내용이다. 버퍼 오버플로우 즉 버퍼를 넘치게 하는 문제이다. 실행 인자를 입력하면 str 배열에 저장되는데 strcpy는 입력한 그대로 복사를 하기 때문에 256 바이트 이상의 크기도 그대로 수용한다. setreuid(3092,3092) 3092 사용자 권한으로 바꾼다는 의미이다. 3092는 어떤 계정인지 알아보면 level12 계정이다. setreuid 함수로 level12 권한을 가지고 /bin/bash or /bin/sh을 실행하면 level12 계정을 유지할 수 있다. 가장 기본적인 버퍼 오버플로우 기법인 ret 주소를 쉘코드로 덮어 씌운다. ret까지의 거리를 ..
ftz level10 힌트의 내용이다. 공유 메모리와 관련된 함수에 대해 먼저 알아보자. http://wisetrue.tistory.com/109?category=745475 shmget(), shmat() 공유 메모리 함수를 사용하기 위해서 먼저 메모리 정보를 알아보자. 명령어는 ipcs key : 0x00001d6a -> 7530 bytes : 1028 perms : 666 힌트의 내용과 흡사한 공유 메모리이다. 그대로 코딩
ftz level9 힌트의 내용이다. 일단 실행시키면 버퍼 오버플로우 문제이다. 정답은 if 문에 있다. buf2 배열의 앞 2자리를 "go"로 채워지게 만들기 일단 배열을 메모리 주소와 연관지어 만들어보면 buf buf2 buf2 배열이 먼저 선언되었기 때문에 높은 주소를 가진다. buf 배열이 나중에 선언되었기 때문에 낮은 주소를 가진다. fgets 함수의 해석은 buf 배열에 크기 40만큼 표준 입력 스트림으로 입력 받는다는 의미이다. fgets는 배열의 크기와 상관 없이 함수 인자에 크기만큼 입력 받는다. 엔터를 누르기 전까지..... buf2를 먼저 채우고 buf2 배열 크기보다 많이 입력 받으면 buf 배열로 버퍼 오퍼플로우가 발생한다. 만약 0123456789를 입력 받으면 01 2 3 4 ..
ftz level8 힌트의 내용이다. find 명령어를 사용하자. -size는 용량을 나타낸다. 사이즈 단위 b : 블록단위c : bytek : kbytew : 2byte 워드 검색 내역의 파일을 하나하나 확인해 보았지만 원하는 정보가 아니었다. 다른 풀이를 참고해 보았더니 다른 사용자들은 내가 접속한 ftz와는 다른 2700 용량이라고 표시되어 있다. 2700으로 검색해 보았더니 txt 파일이 검색되었다. $1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps. 이 부분이 암호화된 비밀번호이다. 해독하면 apple 해독 과정은 추후 수정.
ftz level7 힌트의 내용이다. 일단 level7 파일을 실행시켜본다. 패스워드는 가까운 곳에 있다고 하는데 밑에 -과 _을 참고하자. -과 _는 2진수인 것 같고 그렇다면 _ : 0- : 1 1101101 | 1100001 | 1110100 | 1100101 로 바꿀 수 있다. 이제 10진수로.... 109 | 97 | 116 | 101 처음에 10997116101 또는 네 개의 수를 더한 값을 입력해 보았으나 오답이었다. 그러나 네 개의 수 중에 97을 보고 아스키코드 a가 떠올라서 아스키코드에 수로 비교했다. m | a | t | e mate
ftz level6 접속 후 화면이다. 타 level과 다르게 접속 후에도 입력 모드 상태에 있다. 아무 키를 눌러보았더니 ? 갑자기 접속이 끊겼다. 접속 후 입력 상태에서 Ctrl + C 했더니 입력 모드가 해제되었다. 기존의 파일에서 password 파일과 tn 파일이 있다. 먼저 힌트 내용을 보면 힌트의 내용은 접속할 때의 화면과 같은 내용이다 인포샵 bbs의 텔넷 접속 메뉴에서 Ctrl + C를 누를 경우 빠져 나올 수 있는 취약점이 있었다고 한다. password와 tn 파일의 정보를 보면 password 파일은 읽기 권한이 tn 파일은 실행 권한이 주어졌다. 먼저 password 파일을 확인한다.... tn 파일을 실행해 보았더니 접속 후 화면과 같다. 로그인 후 바로 실행되는 프로그램인 것 ..
ftz level5 힌트의 내용이다. level5 파일의 정보를 알아보자. 실행할 수 있는 권한이 있다. 이 프로그램을 실행하면 /tmp에 level5.tmp라는 이름의 임시파일을 생성한다. 실행하고 /tmp 디렉토리를 확인한다. level5.tmp 파일이 존재하지 않는다. 임시파일은 생성과 동시에 삭제된다고 한다. 그렇다면 level5.tmp가 생성되고 삭제되지 않게 덤프한다. 먼저 level5.tmp를 생성하고 저장한다. 생성 직후의 level5.tmp 파일의 용량은 0이다. level5를 실행시킨 후 level5.tmp 파일의 용량이 변경되었다. level5.tmp의 읽기 권한이 있다.