WarGame(275)
-
LOB - 6.wolfman -> darkelf
바로 본론으로 들어가겠습니다. 먼저 코드를 보죠 이전과 다른 부분은 argv[1] 의 길이가 48이 넘어가면 안되는 것입니다. 하지만? 이때까지 풀었던 방법으로는 48길이가 넘어간 적이 없었기 떄문에 이전과 동일하게 풀면 될 것 같습니다. (간단) 따라서 조건만 정리해 보면 1. argc가 2이상이여야한다. (일단 길게넣자) 2. 환경변수 설정 불가능 3. argv1의 48번째 는 "\xbf"여야한다. 4. 버퍼는 초기화된다.5. argv[1]의 길이가 48이 넘어가면 안된다. 그럼 기존과 동일하게 1. gdb를 실행시키기 위해 파일을 복사한다 2. 복사한 파일을 gdb로 열어주고, main에 bp를 건다. 3. 앞에 48byte를 "\xbf"로 채워주어서 3번째 조건을 만족시키고, 2번째 argv의 시..
2018.07.05 -
LOB - 5.orc -> wolfman
5번째 LOB이다. 중간에 조금 쉬긴하였지만 LOB는 여전히 재미있다. 그럼 소스코드부터 확인하자 소스코드를 보니 전과 다 비슷한데 맨 아랫줄에 metset(buffer, 0, 40);이 추가되었다. 검색해보니 buffer을 초기화하는 함수라고 한다. 버퍼를 초기화하는 함수라는 것을 알았으니 버퍼에는 값을 넣어주어도 소용이 없다는 것을 알았다. argv[2]의 시작값을 리턴값으로 돌려주고, 그 부분에 쉘코드를 넣으면 실행이 될 것 같다. 그럼 우리가 지켜야하는 규칙을 정리해보자 1. argc가 2이상이여야한다. (일단 길게넣자) 2. 환경변수 설정 불가능 3. argv1의 48번째 는 "\xbf"여야한다. 4. 버퍼는 초기화된다. 1. gdb로 메모리 값을 보기 위해 원본파일을 복사해준다 2. 복사한 파..
2018.07.05 -
LOB - 4. goblin -> orc
이번 문제는 1번부터 4번까지 풀면서 가장 오랜 시간을 소비한 문제같다. 쉘코드를 구글에서 구해서 풀었지만, 쉘코드를 만들어야 실력이는다는 조언을받아서 10번정도까지 풀어보고 쉘코드 만드는 것을 공부해야겠다. 이 문제의 소스코드부터 보죠 특징을 살펴보면1 .매번 환경변수 초기화를 시키고2. 48번째의 자리에는 "\bf"만 와야한다. (그렇지 않으면 종료) 환경변수를 설정해 줄수 없으므로 공격하는 구문안에 직접 쉘코드를 집어넣어야한다. 그리고 48번째는 리턴값의 마지막주소이므로 리턴값을 조작하는데에도 까다로울 것으로 예상된다. 일단 이번에 사용한 쉘코드는 이것이다. "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x..
2018.07.05 -
LOB - 3. cobolt -> goblin
드뎌 LOB3번째 문제이다.3번째 문제 먼저 로그인을하고 cat명령어를 사용하여 소스코드를 보자. 기존에는 모두 strcpy 명령어를 사용하였지만 3번 부터는 puts라는 함수를 사용한다. 이에따라서 공격기법도 조금 바뀌었다. 하지만 그 사이의 기존과정은 모두 같기에 크게 어렵게 생각할 필요는 없다. 똑같다. 쉘코드를 환경변수에 등록해준다. 마찬가지로 쉘의 주소를 따고 이제 공격을 넣어준다. 짠..간단하다 stdin함수로 input을 받을때에는 ()로 묶어서 공격을 해주어야하고,strcpy와 같은 함수로 input을 받을때에는 ``로 묶어야 한다.
2018.07.05 -
LOB - 2. gremlin -> cobolt
후..두번째문제 한 선배님께서 포너블은 처음에는 엄청어려운데 조금하면 쉬울때가 온다고 해주셨다. 틀린말이 아닌 것 같은 실감이 든다. 본론으로 들어가면 2번 문제인 cobolt 도 1번하고 완전 똑같은 문제라고 보아도 무방하다. 물론 버퍼의 크기만 다르다. 먼저 실행하고 ls 명령어를 쳐본다 cobolt.c의 소스코드를 보자. 버퍼가 16byte이므로 sfp까지 20을 덮어주고 ret를 조작해주면 될 것이다. export명령어를 써서 shell코드를 환경변수에 넣어주고 shell코드의 메모리위치를 얻어온다. 1번과 똑같이 버퍼크기만 바꾸어서 대입해준다. 가끔 이렇게 나오시는분들은 꼭 bash2를 해주셔야 합니다. 그럼 bash2하고 다시시도! bash짠! (grin) 후후 포너블은 꿀잼이다.
2018.07.05 -
LOB - 1. gate ->gremlin
첫 LOB문제이다. 처음이라그런지 오랜시간이 걸리기는 했지만, 하면 할수록 더 늘거라 믿는다 ㅎㅎ 먼저 gate/gate로그인을 하고 보면 이렇다. gremlin.c 파일의 코드를 보면 버퍼가 256개 라고 되어있다. buffer(256) + sfp(4) 를 덮어주고 + ret(4) 를 변조해주면 된다. ret(4)를 변조해주는 이유는, 미리 shellcode를 만들어놓고 ret주소를 shell로 향하게끔 해주면 shell을 딸 수 있을 것이다. shellcode는 구글에 검색해서 굴러다니는거 아무거나 가져와서 했다. 나중에는 직접 만들어보면 더 좋을것이다 이렇게 쉘코드를 등록해준다.(앗..너무작다.ㅠ) 그다음에 할 일은 쉘코드의 메모리 위치를 가져오는 것이다. vi로 쉘코드 위치를 불러오는 코드를 작성..
2018.07.05