system hacking/dreamhack(드림핵)

basic_rop_x86

blackbearwow 2022. 3. 21. 20:38

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