Lord of BOF 3

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]의 주소를 찾는다. 순서대..

반응형