2011-10-14 3 views
2

libc exploit에 대한 반환을 쓰려고하는데, system() 호출에 대해 스택에서 어디에서 스택을 가져야 하는지를 알 수 없습니다.return-to-libc exploit : system() 호출에 대한 인수를 어디에서 제공합니까?

----------- 
str 
----------- 
return address 
----------- 
previous frame pointer 
----------- 
buffer 
----------- 

내가 system() 전화에 대한 주소로 반환 주소를 덮어해야한다는 것을 이해하지만 :

취약한 기능은

void func(char *str) 
{ 
    char buffer[12]; 
    strcpy(buffer,str); 
} 

다음과 같이 보일 것입니다이 함수의 스택입니다 그 논쟁에 대한 주소는 어디에 두어야하며 그 이유는 무엇입니까?

감사합니다.

답변

0

인수 포인터는 반환 주소 바로 위에 있어야합니다. 이 당신이 strcpy은 (이전 프레임 포인터를 손상하지 않도록)에 도달하면 %esp이 무엇인지 알고 있어야 의미 있다고

----------- 
shellcode: /bin/whatever ... 
... 
... 
... 
\0 
----------- 
&shellcode <-- str is here 
----------- 
&system  <-- return address is here 
----------- 
previous frame pointer <--- don't corrupt this 
----------- 
padding  <-- buffer 

주 : 즉, 덮어 쓰기 한 후, 당신의 스택은 다음과 같이 될 것이다있다. 또한 포인터 중 0 바이트를 포함 할 수 없습니다.

관련 문제