몇일 전에 알아낸 사실인데

RTL을 하거나 ROP등을 하기 위해 exit함수 또는 가젯등을 이용할때 그게 어떤 원리로 돌아가는지 궁금해서 

연구해봤는데

RTL을 예로 들어보면 스택구조가 [ buffer ][ sfp ][ ret ] 대충이런식으로 있다고 가정했을때

ret에 system함수 주소를 넣어주면 정상적으로 (call로 호출) system함수를 호출 했을때 함수 호출 이후 

코드 실행을 위해 saved eip를 스택에 푸쉬하는데 ret로 함수를 호출하면 이 push eip가 안된 상태에서 

함수 내부에서 함수를 빠져나올때 원래 push eip가 되있어야 될위치의 값을 호출하기 때문에 

[ &system ][ &exit ][ /bin/sh ] 와 같은 구성이 가능한 것이다. 함수 인자를 ebp + 8부터 참조하는것도

이 이유 때문이다.

이런 원리를 이용해 chaining rtl을 할때도 pop pop ret과 같은 가젯을 이용해 계속 ret로 함수를 호출하면서

구성을 해줄수가 있다.

'Security' 카테고리의 다른 글

허..  (0) 2013.10.17
php extract vulnerability  (0) 2013.10.13
[Ollydbg 1.x] OllyMSDN plugin  (0) 2013.07.11
유용한 자료들..  (0) 2013.04.22
Duelist crackme #1 풀이  (0) 2013.03.10
Posted by xer0s :