저세상 해킹/포너블 (3) 썸네일형 리스트형 ROP gadget으로 쉘 따기 feat. calc ROP gadget으로 쉘을 따기 위해 어떤 짓을 하는지 궁금해서 좀 봤다. 일단, 우리가 해야하는건, bss영역에다가 "/bin/sh"같이 생겨먹은 문자열을 박아넣고, 인터럽트를 통해서 원하는 함수를 실행시킬 수 있다. 어떤 개지랄을 해서라도 다음과 같은 환경을 만들어 놔야 한다. 내가 execve함수를 실행한다는 조건에서 이런 환경이어야 한다. eax : 0xb, ebx : &"/bin/sh" 나머지 레지스터는 잘 모르겠고, int80으로 인터럽트를 걸 수 있는 상황이어야 한다. 우선 /bin/sh같은 경우는 bss+0x100같은 곳에 쓰는게 대부분이다. 엄... 그냥 적절한 가젯을 잘 박아서 하면 된다. 원하는 레지스터에 pop해주는거 구한 다음에 그 레지스터를 dword하면 됨~ 아 생각해보니까 .. Chunk - FLAG chunk에 flag라는게 N, M, P라는 명목으로 들어가 있길래 이녀석이 뭔가 하고 봤다. 한개당 1bit를 차지해 하위 3bit를 이녀석이 먹고 있는데, 자세한 내용은 다음과 같다. NON_MAIN_ARENA - 현재 청크가 다른 arena에서 위치하는 경우 true가 된다. -> 여기서 다른 아레나라는게 아레나가 쓰레드에 맞게 각각 생성되는걸로 알고 있는데, 즉 main스레드에서 생성된 청크가 아니면 1로 세트되는거 같다. (이친구가 set되면 4다) IS_MMAPPED - 맞는지 틀린지 모르겠는데, 청크의 크기가 과하게 커지면 mmap을 통해 청크를 할당시킨다고 한다. 이때 1로 세트된다.(이 친구가 set되면 2다) PREV_INUSE - 이전 청크가 malloc같은걸로 할당되면 1로 set된.. malloc chunk 구조체 아래처럼 생겨먹었다. 1 2 3 4 5 6 7 8 9 10 11 struct malloc_chunk { INTERNAL_SIZE_T prev_size; /* Size of previous chunk (if free). */ INTERNAL_SIZE_T size; /* Size in bytes, including overhead. */ struct malloc_chunk* fd; /* double links -- used only if free. */ struct malloc_chunk* bk; /* Only used for large blocks: pointer to next larger size. */ struct malloc_chunk* fd_nextsize; /* double links -- use.. 이전 1 다음