basic_rop_x64와 소스코드는 똑같다. 다만 x86이냐 x64의 차이만 있다.
둘의 차이는, syscall을 할 때 인자값을 레지스터에 넣느냐 스택에 넣느냐 차이이다.
x64에서는 rdi, rsi, rdx순서대로 인자를 넣어야 했다.
그러나 x86에서는 스택에만 넣어주면 된다.
__libc_csu_init함수를 호출하지 않아도 된다. 하지만 스택을 정리하는 가젯을 호출해야한다.
read() write()같은 인자가 3개인 함수를 호출하고난 후에는 pop esi; pop edi; pop ebp; ret가젯을 이용해 스택을 정리해줘야 한다.
1. setvbuf_got의 값을 얻어온다.
2. setvbuf_got의 값을 이용해 system함수의 주소를 계산한다.
3. setvbuf_got에 system함수의 주소를 넣는다. /bin/sh도 연달아 넣어준다.
4. setvbuf를 호출하면 system함수가 호출된다. 파라미터는 setvbuf_got+0x4
'system hacking > dreamhack(드림핵)' 카테고리의 다른 글
oneshot (0) | 2022.04.01 |
---|---|
hook (0) | 2022.04.01 |
basic_rop_x64 (0) | 2022.03.20 |
Return Oriented Programming (0) | 2022.03.18 |
ssp_001 (0) | 2022.03.07 |