9oat's LAB
원격 Exploit에서 함수 주소 offset 계산과 함께 사용하는 기법인 Memory Leak에 대하여 알아보자. Memory Leak은 말 그대로 메모리를 유출시키는 것인데 방법에 따라서 인접 메모리 영역의 값을 유출시킬 수도 있고, 특정한 주소의 값을 유출 시킬 수도 있다. 여러가지 방법들이 있겠지만 본 게시물은 Buffer Overflow를 이용한 기본적인 Memory Leak 두 가지를 다룬다. 사실 이것밖에 모름 1. Overflow를 이용해 변수와 변수 사이의 Null을 덮어씌워 인접한 메모리의 값을 유출시키는 기법2. Return To Library를 이용해 특정 주소의 값을 유출시키는 기법 첫 번째 방법부터 보자. 변수와 변수 사이에는 Null Byte가 존재하고, 보통 출력 함수들이 값..
로컬 익스플로잇 시엔 gdb에서 제공하는 print 명령어로 손쉽게 원하는 함수의 주소를 찾을 수 있지만, CTF 등 원격 익스플로잇의 경우 라이브러리가 다르니 함수의 주소를 찾기가 어렵다. 이 때 함수 주소를 찾기 쉽도록 해주는 도구가 바로 Libc-Database. [사진 1] ASLR이 적용된 후 Library Base 변화 Libc-Database를 설명하기 전에 원리 겸 라이브러리에 대해 설명하자면 함수 주소는 Library Base + offset 이다. ASLR이 적용되어 있다 하더라도 Library Base가 랜덤으로 설정될 뿐 함수의 offset은 변하지 않는다. 이 offset은 Libc 버전 별로 달라지며, Libc 버전 별 offset을 DB화 시킨 것이 Libc-Database다...
저번 글의 연장선에 있는 글이다. gnu-redirect-function이 호출될 때 /lib/ld-linux.so.2를 거쳐서 호출됐었는데, 저번엔 단순히 함수 호출 과정이겠거니 하고 넘어갔기 때문에 함수가 호출되는 과정 자체가 궁금해졌다. [사진 1] 먼 길을 떠나요 글의 전반적인 내용과 흐름은 bpsecblog의 PLT와 GOT 자세히 알기 게시물을 참고했다.본 글은 가독성이 다소 떨어지므로 bpsecblog의 글과 함께 보는 것이 좋을 것 같다. strcpy를 대상으로 하여 한 줄씩 의식의 흐름을 따라 실행해보자..! [사진 2] PLT&GOT 함수를 호출하면 먼저 함수의 PLT로 간다. 그리고 PLT엔 함수의 GOT로 jmp하는 코드가 있고 GOT에는 함수의 주소(Library)가 저장되어 있어..