[Dreamhack] rtld
# 보호기법 # process int main() { long addr; long value; initialize(); printf("stdout: %p\n", stdout); printf("addr: "); scanf("%ld", &addr); printf("value: "); scanf("%ld", &value); *(long *)addr = value; return 0; } libc leak을 할 수 있고, 특정 addr에 원하는 value를 쓸 수 있다. Partial RELRO이므로 위의 과정으로 GOT overwrite이 가능하다. exit로 종료되는 경우 rtld를 덮으면 프로그램의 흐름을 변조가 가능하다. _libc_start_main함수에서 exit를 자동으로 호출해서 프로그램 자체에서 ..
SYSTEM HACKING/Dreamhack
2020. 5. 17. 11:36