몇일 전에 알아낸 사실인데
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 |