house of force가 가능하려면 1. heap overflow가 일어나 top chunk를 overwrite 할 수 있어야 하고2. 원하는 만큼 malloc이 가능해야 한다.3. 그리고 malloc할 때 원하는 값을 쓸 수 있어야한다. house of force를 이용한 공격방법을 생각해보면첫번째 malloc을 한 chunk에서 heap overflow가 일어나 top chunk를 overwrite 할 수 있어야하고두번째 malloc을 할 때 malloc size를 임의로 조정할 수 있어야한다그리고 세번째 malloc을 할 때 자신이 원하는 값을 chunk에 쓸 수 있어야한다. //2019-02-19 hof 를 더불어 unsorted bin attack이나 fastbin duplicate 문제 풀..
int __libc_start_main(int *(main) (int, char * *, char * *), int argc, char * * ubp_av, void (*init) (void), void (*fini) (void), void (*rtld_fini) (void), void (* stack_end)); 이게 __libc_start_main 함수 인자인데 첫번째 인자가 main이다. 그러므로 ltrace ./binary_name 해서 __libc_start_main 인자를 찾아주면 된다.
https://blog.skullsecurity.org/2015/defcon-quals-r0pbaby-simple-64-bit-rop https://blog.skullsecurity.org/2013/ropasaurusrex-a-primer-on-return-oriented-programming r0pbaby 풀다가 익스 안돼서 찾아보던중에 rop 개념정리 잘 해놓은 곳 발견함,, 처음 공부하는 분들 이거 보면서 하면 이해 잘 될듯 익스플로잇까지 친절하게 스택 프레임 그려가면서 설명해줌
우선 시스템 콜(system call)이 뭔지부터 알아보자면 커널안에 구현되어있는 API로 FILE I/O, SOCKET, read, write, printf, scanf와 같은 POSIX C 함수들 모두 다, 즉 OS에서 제공하는 기본적인 기능들이 시스템 콜로 구현되어 있다. 일반적인 rop가 인자 세팅해주고 마지막에 함수 call 해서 하는 것이라면 srop는 eax(64bit 이면 rax)에 해당 함수의 시스콜 넘버를 주고, rop에서 인자 세팅 해주는것 처럼 세팅해 주고 int 0x80으로 콜 해주면 된다. 근데 가젯이 없을 수도 있거나 찾고싶은 인스트럭션이 있는데 다른 인스트럭션도 딸려나오는 경우가 있다. 보통 syscall rop는 스태틱 컴파일 돼있을 때, got, plt 가 없어서 rop를..
보호되어 있는 글입니다.