목록Pwnable/Linux (2)
Sechack
ASLR로 인해서 stack, heap, libc의 base주소가 프로그램 실행할때마다 매번 변한다. 따라서 우리는 libc를 이용해서 exploit하려면 취약점을 이용해서 libc주소를 leak하고 적절한 offset연산을 거쳐서 base주소를 구해야 한다. libc를 leak하는데는 여러가지 방법이 있다. 가장 일반적이고 떠올리기 쉬운건 fsb가 터질때 %p를 이용해서 leak하거나 bof가 터질때 rop chain으로 puts, write와 같은 출력함수들을 이용해서 함수 got와 같은 libc주소를 담고 있는 메모리 공간을 출력해주는 것이다. 아니면 스택에 libc주소가 정리 안되고 남아있을수가 있다. printf같은 함수는 NULL을 만나기 전까지 출력해주므로 스택에 libc나 stack주소가 ..
FSB문제를 풀다보면 주소를 2바이트, 1바이트 단위로 쪼개서 페이로드에 집어넣어야되는 상황이 흔하게 생긴다. (사실 2바이트 쪼개서 넣는게 가장 일반적인데 경우에 따라서 1바이트까지 쪼개야하는 경우가 생긴다.) 주소를 쪼개서 넣는이유는 한번에 넣어버리면 화면에 출력되는 시간이 너무 길다. (%n서식지정자는 출력된만큼 덮어쓰기 때문이다.) 바이너리에 따라서 익스플로잇 시간제한이 있을수도 있고 무엇보다 익스플로잇 시간이 너무 오래걸리기 때문에 주소를 쪼개서 넣어서 익스플로잇 시간을 단축하는것이다. 일단 주소 쪼개기의 예를 들자면 printf got를 system함수의 주소로 덮는다 가정해보자. printf got : 0x08048782 system addr : 0xf7ed8a40 라고 치고 offset이 ..