목록전체 글 (66)
ghkdtlwns987
저번에 Ubuntu16.04 부터는 vtable_check 루틴이 생겨서 vtable을 그대로 덮을 수 없다고 했다. 이번엔 그 vtable_check 루틴을 어떻게 bypass 하는지 알아보도록 하자. 다음은 vtable_check 루틴이다. static inline const struct _IO_jump_t * IO_validate_vtable (const struct _IO_jump_t *vtable) { uintptr_t section_length = __stop___libc_IO_vtables - __start___libc_IO_vtables; uintptr_t ptr = (uintptr_t) vtable; uintptr_t offset = ptr - (uintptr_t) __start___li..
저번에 _IO_FILE_vtable 에 대해 알아보았다. 이번엔 이를 가지고 어떻게 Exploit 을 하는지, 나아가 _IO_list_all 에 대해 공부해보도록 하겠다. 너무 길어진다면 끊겠지만, 내용이 적으면 _IO_FINISH 함수와 _IO_overflow 함수로 Exploit 하는 방법에 대해 다루도록 하겠다. 1. 먼저 _IO_FILE_vtable을 덮어 Exploit 하는 방법에 대해 다루도록 하겠다. 다음은 드림핵에 있는 코드를 가져와 보겠다. // gcc -o fp_vtable fp_vtable.c #include #include #include char name[256] = "\0"; FILE *fp = NULL; void getshell() { system("/bin/sh"); } in..
이번엔 _IO_FILE_vtable 에 대해 다뤄보고자 한다. _IO_FILE 이라 하면 파일 포인터(fp) 가 생각나는게 일반적이다. 하지만 _IO_FILE 은 그보다 더 많은 정보를 포함하고 있다. 예를 들자면 read,write,fread,write... 와 같은 함수를 사용하면 내부적으로 _IO_FILE 구조체를 참고하게 되는 것이다. _IO_FILE 더보기 struct _IO_FILE { int _flags;/* High-order word is _IO_MAGIC; rest is flags. */ /* The following pointers correspond to the C++ streambuf protocol. */ char *_IO_read_ptr;/* Current read pointe..