03.ROP(Return Oriented Programming) - mmap, mprotect
mmap - 32bit(feat. POPAD, PUSHAD)
다음과 같이 Overflow를 확인할 수 있다.
Return address - buf 변수의 시작 주소 = 66
Exploit 순서
Libc의 memcpy() 함수는 CPU가 지원하는 스트리밍 SIMD 확장(Streaming SIMD Extensions, SSE)에 맞는 함수의 주소값을 리턴한다.
스트리밍 SIMD 확장(Streaming SIMD Extensions, SSE) 종료 : SSE, SSE2, SSSE3, ...
instruction | description |
POPAD |
|
PUSHAD |
|
다음과 같이 Overflow를 확인할 수 있다.
Return address - buf 변수의 시작 주소 = 72
mprotect() 함수를 이용하여 Shellcode가 저장된 메모리 영역의 권한을 RWX로 변경
mprotect()는 [addr, addr+len-1] 구간 주소 범위를 일부라도 담고 있는 호출 프로세스의 메모리 페이지들에 대한 접근 보호를 변경한다.
mprotect(address of shellcode,0x2000,0x7)
addr의 값은 페이지 경계에 맞게 정렬되어 있어야 한다.
Page의 크기는 4096 이다.
Ex)
사용 불가능 : 0x7ffd0e0a4470
확인해야 할 정보 목록
REF : https://www.lazenca.net/display/TEC/03.ROP%28Return+Oriented+Programming%29+-+mmap%2C+mprotect
02.ROP(Return Oriented Programming)-x64 (0) | 2020.07.01 |
---|---|
01.ROP(Return Oriented Programming)-x86 (0) | 2020.06.30 |
댓글 영역