02.ROP(Return Oriented Programming)-x64
x86의 경우 pop 명령어의 피연산자가 중요하지 않았지만, x64에서는 호출 규약 때문에 피연산자가 매우 중요하다.
x86의 호출 규약은 Cdecl(C declaration)이며, x64의 호출 규약은 System V AMD64 ABI 이다.
stack address | value | explanation |
0x7ffffffe498 | Gadget(pop rdi, ret) address | Return address area of function |
0x7ffffffe4a0 | First argument value | |
0x7ffffffe4a8 | Gadget(pop rsi, pop rdx, ret) address | |
0x7ffffffe4b0 | Second argument value | |
0x7ffffffe4b8 | Third argument value | |
0x7ffffffe4c0 | read function address of libc | |
0x7ffffffe4c8 | Gadget(pop rdi, ret) address | |
0x7ffffffe4d0 | First argument value | |
0x7ffffffe4d8 | System function address of libc |
다음과 같이 Overflow를 확인할 수 있다.
Return address - buf 변수의 시작 주소 = 72
Exploit 순서
setresuid 함수를 이용해 권한을 root(0)으로 변경
setresuid(0,0,0)
system(binsh)
확인해야 할 정보 목록
setresuid
03.ROP(Return Oriented Programming) - mmap, mprotect (0) | 2020.07.07 |
---|---|
01.ROP(Return Oriented Programming)-x86 (0) | 2020.06.30 |
댓글 영역