본문 바로가기

System Hacking46

해커스쿨 L.O.B 0x2f 없는 Shell Code 실습 해커스쿨 F.T.Z에서도 해봤던 Shell Code 실습이지만 조금 다른 실습을 한다. 지금까지 사용해오던 셸 코드가 있다. \x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80 위 셸 코드에서 "0x2f"를 없애려고 한다. 해커스쿨 L.O.B level 7에서 배운 argv[0] 즉, 파일 이름에 셸 코드를 넣어야 할 때가 있다. 파일 이름에 "0x2f" 즉, "/"이 문자가 들어있으면 경로로 인식되어 셸 코드가 제대로 작동되지 않으므로 보통의 셸 코드를 사용할 수 없다. 기존 사용하던 셸 코드의 어셈블리 언어다. 컴파일하고 실행하면 셸이 실행되는 것을 볼 수 있다. objdu.. 2020. 6. 6.
해커스쿨 L.O.B level 7 [darkelf] darkelf 로그인 후 파일을 확인한다. 코드 파일을 확인한다. 힌트와 추가된 부분까지만 보겠다. 추가된 부분을 분석한다. argv[0]이 77이 아니면 if 문을 실행한다. 코드는 아주 간단하다. 지금까지 argv[1], argv[2]를 사용해서 argv[0]이 어떤 것인지는 알 순 있지만 어떻게 해야 할지 고민이 많아진다. gdb로 메모리 분석한다. 이때, 추가된 부분만 가져오겠다. level 6 [wolfman]에서 배운 어셈블리 언어의 if 문의 분석 방법을 통해 분석한다. strlen 함수를 부르고 cmp로 "%eax, 77"을 비교한다. 여기서 %eax 레지스터에는 argv[0]이 들어있고 77과 비교한다. 코드에서는 "!=(JNE)"인데 대우 명제를 취해 "==(JE)"를 사용해 argv[.. 2020. 5. 28.
해커스쿨 L.O.B level 6 [wolfman] wolfman 로그인 후 파일을 확인한다. 코드 파일을 확인한다. 코드 시작 전 힌트를 보면 level 5 [orc] 문제에서 "check length of argv[1]"가 추가되었다. 추가된 코드를 분석해보면 "argv[1]"의 길이가 48보다 크면 문자열을 출력하고 프로그램을 종료시킨다. 이전 문제들을 잘 풀었다면 추가된 if 문에서 막히지 않을 것이다. 왜냐하면, 지금까지 두 번째 if 문에서 "agrv[1][47]"에서 '\xbf'가 들어가고 끝나므로 즉, 47byte에서 끝나고 48byte까지 가지 않아서 생각할 필요가 없어지고 이전 문제들과 같아진다. gdb로 메모리 분석한다. 이때, 추가된 코드와 메모리 스택만 하겠다. strlen 함수를 부르고 cmp로 비교한다. JBE(JLE와 비슷) .. 2020. 5. 25.
해커스쿨 L.O.B level 5 [orc] orc 로그인 후 파일을 확인한다. 코드 파일을 열어 코드를 분석한다. level 4 [gobilin] 문제와 비슷한데 buffer hunter가 생겼다. level 4에서 배운 memset을 분석하면 buffer 변수의 메모리를 0으로 40byte만큼 초기화한다. gdb로 메모리를 분석한다. 이때, 권한문제를 피해 복사해서 열어야 하는 건 많이 해서 이제는 알 것이다. 이전 메모리들은 이전 문제와 같고 이 부분만 추가됐으므로 이 부분문 가져왔다. 어셈블리 코드를 보지 않아도 될 정도다. 주소만 보자면 "ebp-40"이고 메모리 스택을 도식화해본다. int i 4byte char buffer[40] 40byte SFP 4byte RET 4byte 여기서도 변수 i는 신경 쓰지 않아도 되고 dummy도 들.. 2020. 5. 21.
해커스쿨 L.O.B level 4 [goblin] goblin 로그인 후 파일을 확인한다. 코드 파일을 열어 코드를 분석한다. extern extern이란 외부변수의 선언이다. 함수를 작성할 때 원형 선언과 정의를 분리할 수 있는 것처럼, 변수도 외부변수 선언과 정의로 구분 할 수 있다. 그뿐만 아니라 함수처럼 외부변수 선언만 있고 정의가 빠지면 컴파일 오류가 아닌 링크 오류가 발생한다. 외부변수의 선언은 일반 변수의 선언과 같은 형식으로 기술하지만, 자료형 앞에 extern 예약어를 붙이면 된다. 그러나 절대로 초깃값을 명시하면 안 된다. 초깃값을 명시하면 '선언 및 정의'가 되어버리기 때문이다. extern 예약어는 문법상 '기억 부류 지정자'다. 외부변수라는 말의 의미는 변수의 정의가 현재 파일이 아니라 다른 파일(외부 파일)에 존재한다는 의미다... 2020. 5. 18.
해커스쿨 L.O.B level 3 [cobolt] cobolt 로그인 후 파일을 확인한다. 역시 코드 파일을 열어서 goblin이 어떤 코드로 만들어졌는지 분석한다. gremlin 문제와 같은데 받아오는 함수가 strcpy와 gets에서 다르다. F.T.Z에서 gets 함수로 받는 코드를 stdin으로 공격하는 것을 많이 해봤을 것이다. F.T.Z를 풀고 와서 하는 문제라고 해서 좀 더 어려울 줄 알았는데 level 3까지는 아직 F.T.Z와 비슷한 난이도다. gdb를 보면 ebp-16인것으로 보아 지금까지 문제와 비슷하다. 더보기 환경변수를 넣고 주소를 받아온다. 주소를 알았으니 공격하면 된다. 그런데 stdin으로 공격해야 하므로 지금까지의 공격과는 다르게 공격한다. 그러나 F.T.Z에서 했던 공격이다. 2020. 5. 17.
해커스쿨 L.O.B level 2 [gremlin] gremlin 로그인 후 파일을 확인한다. gate와 같이 실행파일과 코드 파일 두 개 있다. 코드 파일을 열어서 분석한다. gate 문제와 같고 다른 건 배열의 크기만 다르다. gdb를 봐도 gate 문제와 스택이 ebp-16로 크기만 다를 뿐 문제는 같다. gate 문제와 같은 방식으로 공격하면 된다. 더보기 export로 환경변수를 넣어준다. 이때 셸 코드는 25byte가 아닌 41byte or F.T.Z에서 사용했던 eggshell에 있던 셸 코드를 사용하길 바란다. 본인은 eggshell에서 사용하던 셸 코드를 사용하였다. 환경변수를 넣었으면 getenv 함수로 환경변수가 들어가 있는 주소를 얻어온다. 환경변수를 넣고 주소를 얻었으면 스택 구조만큼 BOF를 일으키면 되는데 스택 구조를 도식화하면.. 2020. 5. 16.
해커스쿨 L.O.B level 1 [gate] 해커스쿨 L.O.B level 1 [gate]를 시작한다. F.T.Z에서와같이 어떤 파일이 있는지 확인하고 힌트가 될만한 파일을 읽어본다. 파일이 두 개 있다. F.T.Z에서 해왔던 대로 코드를 열어서 분석해야 한다. 주석은 간단한 힌트 같은 느낌이고 코드를 보면 F.T.Z 난이도와 비슷한 문제다. strcpy는 복사할 때 크기를 검사하지 않기 때문에 BOF에 취약하다고 F.T.Z level 11, level 13에 나왔다. gdb를 확인해 본다. 이때 gremlin.c는 gate의 권한이지만 gremlin 실행파일은 gremlin의 권한이다. gdb로 디스어셈블을 할 수는 있지만 gdb에서 r 명령어로 쓰려고 하면 권한 오류가 난다. 그러므로 r 명령어를 쓰려면 cp 명령어로 gate 권한의 파일로 복.. 2020. 5. 16.
해커스쿨 L.O.B 로컬서버 구축 해커스쿨 L.O.B 로컬서버 구축을 설명한다. 해커스쿨 L.O.B는 해커스쿨 F.T.Z를 마치고 온 사람들이 사용할 것을 알기에 가상머신 VMware가 있을 것은 전제로 하겠다. 기본적으로 F.T.Z 로컬서버 구축하는 방법하고 거의 같다. 1. 해커스쿨 L.O.B 이미지 파일 해커스쿨 L.O.B 이미지 파일 다운로드 해커스쿨 L.O.B를 실행하면 이 문구가 나온다. 다른 분들의 포스팅에서는 이때 linux-up을 입력해주어야 오류 나지 않고 부팅이 잘 된다고 한다. 그러나 본인은 입력하지 않아도 알아서 입력하는 모습을 볼 수 있었다. 이는 해커스쿨 공식 홈페이지 공지에 있는 글에 의하면 부팅이 안 되는 오류를 수정해서 다시 이미지 파일을 올렸다고 한다. 위 이미지 파일 링크가 그것이다. 부팅이 끝이 나면.. 2020. 5. 15.
해커스쿨 L.O.B 시작 해커스쿨 L.O.B 포스팅을 시작하기에 앞서 정보공유를 하려 한다. 해커스쿨 F.T.Z를 모자란 실력으로 해결했다. F.T.Z를 해결한 후 모자란 C언어 공부를 했다. 어셈블리어를 조금 맛을 보았고 LOB와 병행하려 한다. 코딩을 배운 지 얼마 되지 않았고 C언어, 어셈블리어를 자세히 알지 못한다. C언어 공부는 "독하게 시작하는 C 프로그래밍 최호성 지음"으로 인터넷 강의를 들으며 공부를 했다. 인터넷 강의는 인프런, 유튜브에 공개되어 있었으나 2023년 6월 1일부터 인프런에는 강의가 내려갔고, 유튜브에는 회원전용으로 바뀌었다. (2024.03.14 수정) 어셈블리어는 "게임처럼 쉽고 재미있게 배우는 어셈블리 언어 튜토리얼 원일용 지음"으로 인터넷 강의를 들으며 공부하고 있다. 인터넷 강의는 인프런,.. 2020. 5. 15.