이 기법을 적용하는데에는 다음 조건이 맞으면 활용하기 좋다.
1.ret이후로는 덮어 씌울수 없다.
2.ret에 스택 or 라이브러리를 필터링 해놓았다.
이 기법의 이름 대로, ebp를 바꾸는 작업을 통해 다른 부분에서 ret을 뽑아낼수 있도록 바꿔주는 기법이다.
일단 모든 거의 모든 함수에는 다음과 같은 에필로그가 존재한다.
leave
ret
이 두가지 어셈블리는 다음과 같이 해석할수 있다.
mov esp ebp
pop ebp
pop eip
jmp eip
그렇다면 이것을 이용하여 ebp를 내가 원하는 곳으로 조작할수 있고, return address에는 leave-ret의 가젯의 주소를 넣어 놓는다면, 필터링이 되지 않는 곳에서 return을 하거나, RTL공격시 인자를 주는 행위가 가능해진다.
이것이 이 기법의 장점이다.
그러니까 한마디로, 다른곳에서 ret을 뽑아낼때 다음과 같은 공격을 사용하면 좋은 것이다.
leave가 mov esp ebp, pop ebp란 것과
ret이 pop eip, jmp eip 란 것에 유의하며 다음 그림을 보면 이해하기 쉬울 것이다.
'etc > Technical Documents' 카테고리의 다른 글
[Metasploit] android meterpreter 분석 (0) | 2014.10.13 |
---|---|
peda 유용한 명령어 정리 (0) | 2014.09.14 |
ret to libc (0) | 2014.06.07 |
.dtors overwrite (0) | 2014.05.23 |
Vera를 이용한 Visual unpacking (0) | 2014.04.22 |