목록분류 전체보기 (13)
9oat's LAB
로컬 익스플로잇 시엔 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)가 저장되어 있어..
BOF 문제를 풀이하면서 생겼었던 궁금증에 대해 연구해보고자 한다. 함수가 한 번 호출되고 나면 함수 호출 메커니즘에 의해 GOT에는 함수의 라이브러리 주소가 저장된다고 알고있다. 그래서 그 주소가 해당 함수의 실제 주소겠거니 생각했는데 gdb의 print로 함수 주소를 출력했을 땐 이와 다른 주소가 출력된다. [사진 1] 이 글을 쓰는 이유.jpg 보통 exploit payload를 구성할 땐 print로 exploit에 사용할 함수의 주소를 출력해서 그 주소를 활용했었는데 이 주소가 got에 저장되는 라이브러리 함수 주소와 다르다니.. 프로그램이 실행되는 중 함수를 호출할 때는 해당 함수의 PLT 주소를 call한다. 이것은 GOT에 저장된 주소를 이용한다는 것과 같기 때문에 실제로 프로그램이 동작하..