plt로 got 채우기

puts@plt + 0에 puts@plt + 6의 주소가 들어있어서 호출되면 puts@plt+6의 코드가실행 puts@plt + 11 에서 점프하면 pushl, jmp로 분기된다. pushl로 GOT+4의 주소를 스택에 넣고 GOT+8의 주소로 분기하는데 여기에는_dl_runtime_resolve의 주소가 있다. _dl_runtime_resolve 에서 _dl_fixup 을 호출한다. _dl_fixup 함수에서는 edi에 puts의 offset을 넣고 esi에 .strtab의 주소를 넣는다 (.strtab + offset = 'puts' 문자열이 들어가있다.) eax에는 'puts'문자열의 주소를 넣고 _dl_lookup_symbol_x 함수를 호출한다. _dl_lookup_symbol_x 함수에서는...
Read more

basic C

if This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters Show hidden characters ...
Read more

포멧 스트링 버그, Format String Bug(2)

포멧 스트링 버그, Format String Bug 저번 포스팅에서 포멧 스트링 버그를 이용해서 메모리 릭을 하는 방법과 %n 포멧스트링을 어떻게 사용하는지 까지 설명하였다. 이번 포스팅에서는 직접 원하는 메모리에 %n 포멧스트링을 이용하여 원하는 값을 넣어보자. 먼저 확인할 코드! This file contains...
Read more

포멧 스트링 버그, Format String Bug(1)

포멧 스트링 버그, Format String Bug 포멧 스트링 버그는 printf 함수 등에서 사용되는 포멧 스트링(%d, %s...)을 잘못된 형태로 사용할 경우 발생하는 버그이다. 포멧 스트링은 데이터를 어떤 형식에 따라 입력받거나 출력하기 위하여 사용하는데 형식을 잘못사용하면 메모리의 데이터가 유출되고 변조될 수 있다. 포멧 스트링 버그는 메모리 릭, 메모리 변조 모두 가능하기 때문에 취약점이 발생하면 exploitable할 가능성이...
Read more