본문 바로가기

Write Up

(12)
LOB #4 goblin - NOP Sled 이용 ID : goblin Passwd: hackers proof 먼저 파일 목록을 살펴보면 orc 파일에 다음 level의 seteuid가 걸려있는 것을 확인할 수 있다 orc.c 소스 코드를 살펴보면, 먼저 버퍼의 크기가 40만큼 할당된 것을 알 수 있고, int i가 선언된 것을 확인 가능 또한 주어지는 인자의 개수가 2 미만이면 종료되는 것을 알 수 있다. 각 번호 별로 주요 소스 내용을 보면, ① * environ int main(int argc, char **argv, char **envp)에서 3번째 인자에 해당 : 환경변수 배열의 포인터. environ을 통해 모든 환경변수에 접근할 수 있으며, 마지막 항목 뒤에는 NULL 값을 가짐. main 함수의 세번째 매개변수를 이용하여 환경 변수 목록을..
LOB #3 cobolt ID : cobolt Passwd : hacking exposed 먼저 파일 목록을 살펴보면, goblin에 다음 level의 seteuid가 걸려있는 것을 확인할 수 있다. goblinl.c를 살펴보면, main 함수에서 gets 함수를 사용해서 버퍼오버플로우 취약점이 있는 것을 확인할 수 있다. ret과의 거리를 확인하기 위해 gdb를 이용해서 main함수를 디버깅하면, 에서 gets함수를 호출하고 있으며, 인자로 %eax=[%ebp-16]을 넘겨주는 것을 확인할 수 있다. 그러므로 ret과 buffer사이의 거리가 16bytes이고, 소스코드에서 버퍼가 16bytes였으므로 dummy값이 없이 모두 버퍼임을 확인할 수 있다. 그림으로 구조를 그려보면, 위와 같이 되며 16(buffer)+4(sfp)..
LOB #2 gremlin ID : gremlin Passwd : hello bof world cobolt에 gremlin 다음 level의 setuid가 걸려있는 것 확인 가능! cobolt.c를 확인하면, strcpy함수를 사용해서 버퍼오버플로우 취약점이 있는 것을 확인할 수 있다. gdb로 main 함수를 디버깅해보면, 에서 strcpy 함수를 호출하는데 인자로 주는 push 값을 보면 %eax=[ebp-16] 인 것을 확인할 수 있다. 즉, ret와 buffer 사이의 거리가 16bytes임을 알 수 있다 (자세한 이유는 LOB #1에 설명해놓음!) 구조를 그려보면, 위와 같이되며, 16(Buffer)+4(sfp)=20bytes만큼을 다른 데이터로 채워주고 ret값이 4byte를 쉘코드 주소로 변경해주면 exploit이 가..
LOB #1 gate ID : gate Password : gate ls -al 명령을 통해 gremlin 파일에 다음 레벨인 gremlin의 setuid가 걸려있는 것을 확인할 수 있다! gremlin.c 소스 코드를 보면, buffer의 크기는 총 256byte이고, strcpy()함수가 사용된 것을 확인할 수 있다 strcpy 함수는 버퍼에 크기를 제한받지 않고 입력받을 수 있기 때문에 버퍼오버플로우 취약점이 존재한다 이걸 통해 exploit 해보자! - main 함수 디버깅 exploit을 하기 위해서 ret와 buffer사이의 거리를 구해야 한다. 에서 strcpy를 호출하고 있으므로 호출 전에 push해준 %eax가 buffer가 될 것이다. 를 통해 %eax에는 [%ebp-256] 값이 들어가 있는 것을 확인할 ..