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 함수에서는...
포멧 스트링 버그, Format String Bug(2)

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

포멧 스트링 버그, Format String Bug
포멧 스트링 버그는 printf 함수 등에서 사용되는 포멧 스트링(%d, %s...)을 잘못된 형태로 사용할 경우 발생하는 버그이다. 포멧 스트링은 데이터를 어떤 형식에 따라 입력받거나 출력하기 위하여 사용하는데 형식을 잘못사용하면 메모리의 데이터가 유출되고 변조될 수 있다.
포멧 스트링 버그는 메모리 릭, 메모리 변조 모두 가능하기 때문에 취약점이 발생하면 exploitable할 가능성이...
피드 구독하기:
글 (Atom)
Categories
- programming (17)
- security (46)
- study (22)
- system (35)
Recent 7 Days Popular Posts
-
프로그램은 실행하면서 많은 함수를 호출한다. 함수가 호출되고 호출받은 함수가 실행되려면 레지스터와 스택을 사용해야 한다. 버퍼오버플로우 공격을 공부하면서 호출된 함수가 어떻게 esp (스택을 관리하는 레지스터)를 백업하는지 어떻게 스택을 독립적으로 ...
-
_start, __libc_start_main, main hello를 출력하는 hello C언어로 작성한 간단한 elf파일의 헤더를 보면 실행파일의 시작주소값인 Entry point address에 _start 의 주소가 들...
-
진법 변환과 데이터의 표현 - 2 진수 (binary digit) – 숫자 0 과 1 만으로 모든 수를 나타내는 방법 10 진법 2 진법 기호 0 0 ...
-
Calling Convection 함수호출규약 은 함수(subroutine, callee)가 어떻게 인자를 전달받고 결과값을 반환하는지에 대한 로우레벨에서의 규칙이다. 다양하게 구현된 함수호출규약들은 파라미터의 위치, 리턴 값이나 리턴 ...
-
UBUNUT SSH 서버에 접속 시도를 하면 로그인이 성공하기 전에 뜨는 배너와 로그인이 성공한 후에 뜨는 메세지가 있다. id, pw를 입력하기 전에 뜨는 배너는 디폴트 값으로 /etc/issue.net 을 읽어온다. issue.net 안...