blackbearwow 2022. 3. 20. 20:56

return oriented programming을 배운 다음 바로 푸는 문제이다.

소스코드부터 보자.

매우 간단한 코드다. 

그리고 checksec으로 시큐리티 검사를 하면 

Arch:     amd64-64-little
    RELRO:    Partial RELRO
    Stack:    No canary found
    NX:       NX enabled
    PIE:      No PIE (0x400000)

카나리와 PIE는 없고 not execute는 있다. 그러므로 버퍼에 직접 쉘코드를 넣는건 안된다.

 

보아하니, setvbuf를 호출했으므로 setvbuf의 got에 libc가 매핑된 함수의 주소가 있을것이다.

리턴 가젯을 이용해 setvbuf의 실행부분의 주소를 받아와서 libc의 오프셋 계산을 하면 된다.

setvbuf_got에 system의 실행부분으로 덮어씌워 실행시키면 된다.

__libc_csu_init가젯을 사용했다.