분류 전체보기
-
[L.O.B] Level 9 - trollWargame/L.O.B 2022. 10. 20. 01:35
Level 9 - troll을 풀어보자. 소스 코드를 보면 다음 Level은 vampire이고, check 0xbfff라는 힌트가 있다. 조건은 앞의 Level 들에서 있는 것도 있고, 없어진 것도 있지만 내용은 다 아니 설명은 생략하자. 새로운 조건인 here is changed 부분을 보면, argv[1]의 47번째 내용이 \xff가 아니면 문구를 출력하고 종료한다. gdb로 vampire 파일을 더 분석해보자. 알아내는 정보는 매번 비슷하지만(소스 코드가 비슷비슷), 그래도 사용해보며 익숙해지도록 하자. break를 leave가 있는 에 걸어주면서 main 함수가 끝나기 직전의 스택 상태를 보도록 하자. 실행할 명령어로는 \xbf를 위치 조건에 맞춰 48개 넣었고, NOP 값을 10만 개를 넣었다...
-
[L.O.B] Level 8 - orgeWargame/L.O.B 2022. 10. 20. 00:49
Level 8 - orge를 풀어보자. (카카오 복구..) 이번에도 제약이 하나 추가되었다. 소스 코드를 보면 다음 Level은 troll이고, check argc + argv hunter라는 힌트가 있다. 우선 check argc로 인해 argc의 크기가 2가 아니면 문구를 출력하고, 프로그램이 종료된다. 다음으로 argv hunter의 내용으로 argv[1]의 내용이 0으로 모두 초기화된다. gdb를 이용해 troll을 더 분석해보자. 확실하게 알 수 있는 내용은 buffer와 SFP 사이에 더미 값이 없다는 것이다. 그 외의 내용은 문제를 풀어가면서 필요할 때 사용하도록 하자. 소스 코드를 보면 처음에는 답답함이 느껴진다. argc가 2여야 하므로 프로그램을 실행시키면서 인자는 하나가 들어가는데, ..
-
[L.O.B] Level 7 - darkelfWargame/L.O.B 2022. 10. 14. 06:53
Level 7 - darkelf를 풀어보자. 이번에도 전의 Level에서 제약이 하나 추가되었다. 소스 코드를 보면 다음 Level은 orge이고, 가장 상단에 check argv[0]이라는 힌트가 있다. 다른 내용들은 생략하고, 코드의 중상단부에 있는 here is changed!의 내용을 보자. argv[0]의 길이가 77이 아니라면 문구를 출력하고, 프로그램이 종료된다. gdb를 이용해 프로그램을 더 분석해보자. 까지 있지만 이 정도의 내용만으로도 필요한 정보는 충분히 얻은 것 같으니 생략한다. 을 보면서 더미 값이 없다는 것을 알 수 있다. 이번 문제를 푸는 데에는 더 할 것은 없다. (이전 Level과 다른 방법을 사용해야 한다.) 이번 문제를 푸는 데에는 앞의 Level에서 설명했던 argv[..
-
[L.O.B] Level 6 - wolfmanWargame/L.O.B 2022. 10. 14. 04:31
Level 6 - wolfman을 풀어보자. 앞의 Level에서 제약이 하나 더 추가된 문제이다. 하나씩 기본을 밟아가며 알아가도록 Level이 구성되어 있는 것 같다. 소스 코드 파일을 분석해보자. 다음 Level의 이름은 darkelf인 듯 하고, check length of argv[1]의 제약이 추가되었다. 영어만 보자면 argv[1]의 길이가 제한이 되어 있는 것 같다. 윗 부분의 해석은 생략하고, 중하단부의 check the length of argument를 보도록 하자. argv[1] 배열의 길이가 48을 초과하면 문구를 출력하고 프로그램을 종료한다. gdb를 이용해 darkelf 파일을 이어서 분석해보자. 우선, int i와 buffer의 크기인 44 바이트만큼 esp가 ebp에서 떨어져..
-
[L.O.B] Level 5 - orcWargame/L.O.B 2022. 10. 13. 05:34
Level 5 - orc를 풀어보자. 이전 Level인 goblin과 비슷하다. 우선 소스 코드를 살펴보자. 다음 Level은 wolfman인 것 같고, 이번에는 egg hunter에 buffer hunter가 추가되었다. 소스 코드 분석은 앞의 Level과 비슷하니 넘어가고, 마지막 줄의 buffer hunter에 대한 설명만 보도록 하자. memset 함수로 buffer의 크기 40 바이트 만큼을 0으로 만든다. (즉, buffer를 전부 0으로 만든다.) 이어서 gdb를 이용해서 마저 분석을 진행하자. 을 보면 44 바이트만큼 esp에서 빼주니, ebp 까지의 거리는 44 바이트라는 것을 알 수 있다. buffer와 epb 사이에 더미 값은 없다. buffer를 0으로 초기화 시키는데 이번 문제는 ..
-
[L.O.B] Level 4 - goblinWargame/L.O.B 2022. 10. 12. 07:21
Level4 - goblin을 풀어보자. 취약한 함수와 NOP Sled에 대해서 새롭게 알게 된 부분이 생겼다!! 소스 코드를 살펴보자. 다음 Level의 이름은 orc인 듯하고, 이번 문제는 egghunter라는 내용이 추가되어 있다. 가장 먼저 눈에 띄는 것은 extern char **environ; 이라는 구문이다. environ은 man environ으로 자세한 정보를 알 수 있는데, 간단하게 환경변수의 리스트라고 생각하면 되겠다. 40 바이트 크기의 char 형 배열 buffer를 선언하고, int 형의 i를 선언한다. 다음으로 파일을 실행하면서 들어올 인자의 수가 2개 미만이라면 argv error를 출력하며 종료된다. 그 다음, egghunter의 설명이 있다. memset 함수로 envir..
-
[L.O.B] Level 3 - coboltWargame/L.O.B 2022. 10. 11. 05:08
Level 3 - cobolt를 풀어보자. cobolt 문제도 쉽다. 역시나 F.T.Z에서 했던 내용 중 하나이고, 앞의 문제들처럼 간단한 문제이다. 소스 코드를 확인해보자. 아마 다음 Level의 이름은 goblin인 것 같다. 그리고 Level 3이나 되어서야 본 것인데 소스 코드마다 어떤 문제인지 주석으로 설명이 되어 있다. small buffer + stdin인 것으로 보아 표준입력으로 페이로드를 작성하는 작은 buffer 문제이다. 먼저 16바이트 크기의 char 형 buffer 배열이 선언되어 있다. 다음으로 gets로 buffer에 입력하고, printf 로 출력하며 프로그램이 종료된다. gets_s 함수가 아닌 gets 함수이므로 이것을 이용해 overflow 공격을 하면 된다. gdb를 ..
-
[L.O.B] Level 2 - gremlinWargame/L.O.B 2022. 10. 11. 04:11
Level 2 - gremlin을 풀어보자. gremlin은 Level 1인 gate와 비슷하다. 단지, buffer의 크기가 작다는 점이 다르다. 그런데 풀이는 쉘 코드를 직접 입력하는 방식이 아닌 환경변수를 이용하는 방식이라 gate와 같다. 코드 분석은 간단하다. buffer 배열의 크기가 16바이트라는 것만 기억하고 나머지는 gate와 같기 때문에 넘어가도록 하자. gdb로 cobolt를 분석해자. strcpy의 buffer가 나오는 를 보면 ebp에서 16 바이트만큼 떨어져 있다는 것을 알 수 있다. buffer의 크기 그대로인데, dummy가 없는 것 같아 신기하다. buffer의 크기가 작아 쉘 코드를 직접적으로 넣기 힘드니 환경변수를 이용하자. F.T.Z부터 많이 작성을 했으니, 방법에 대..