IT 그리고 정보보안/Write-up 23

LOB Level 3 (Cobolt)

먼저 goblin.c 를 열어보자. level2에서는 argv로 인자를 받아 프로그램을 실행하는데, 이건 gets 함수를 이용하여 문자열 입력을 받는다. 뭐..마찬가지로 gets()도 문자열 길이 검사를 하지 않아 오버플로우 취약점이 존재한다. 그럼 뭐부터 해야할 까.. 인자로 받아서 하는 거나 마찬가지다. 입력값을 goblin으로 돌려주면된다. 이미 FTZ Level 12 에서 언급하였다. 일단 RET를 정해줘야 한다. 어디 올릴지 찾아보자. 아.. 버퍼가 16바이트 밖에 안된다. level2에서 했던 방법 처럼 argv[2]에 넣어야 겠다. 페이로드를 구성해보자. [buf]: nop 16 byte [sfp]: nop 4 byte [ret]: argv[2]의 주소 (0xbffffbdf) + nop 10..

LOB Level 2 (Gremlin)

이번 문제는 버퍼 크기가 매우 작다. 노답. 암만 찾아도 쉘코드 중 가장 짧은게 25바이트 인데.. 버퍼가 16바이트이다. 공격을 하지말란 것인가. 아니? 꼭 페이로드를 버퍼에만 올릴 필요는 없다. 어떻게 넣을 수 있을까. 여러가지 방법이 있지만 여기서는 argv에 올리는 공격법을 선택하겠음. 일단 [**argv] [argc] [ret] [sfp] 스택이 요래 되어 있다. argv에 올린다고 했는데, 정확하게 argv[2]에 올리는 것이다. argv[1]은 버퍼로 복사가 되므로 해봤자 16바이트 밖에 못쓴다. argv[1]에 RET가 argv[2]를 가르키도록 맞춰서 인자값을 넣고, (['A'*20]+[argv[2] 주소]) argv[2]에 페이로드를 올린다. 먼저 argv[2]의 주소를 찾는다. 순서대..

LOB Level 1 (Gate)

먼저 LOB 문제 풀이에 들어가기 전에 환경설정을 좀 해줄게 있다. 기본으로 되어있는 bash 쉘을 bash2로 바꿔야 한다. bash에서는 \xff 를 null로 처리해버린다고 한다. 그래서 bash2로 설정하고 문제풀이를 시작한다. 먼저 gate/gate 로 접속하면 gremlin, gremlin.c 두가지 파일이 있다. gremlin.c를 열어보면 argv로 인자를 받아 strcpy로 복사하는 기본 bof 문제이다. strcpy() 함수가 입력값의 길이를 검사하지 않는 취약점을 이용한 BOF이다. 디버깅하여 정확한 스택 구조에 대하여 확인해보자. 지금 그대로 하면 권한이 없어 GDB를 올바르게 구동시킬 수가 없다. 실행도 안되고 확인도 불가 그래서 다른 곳에 gremlin을 복사해서 볼것임. 대충 ..

반응형