글
Pwnable study 1주차[함수 프롤로그 & 에필로그]
함수 프롤로그 & 에필로그
스택프레임
-함수가 실행되기 위해 스택에 여러 데이터를 올리게되는데 이때 각 함수가 사용하는 스택의 영역
함수 프롤로그
-
함수내에서 사용할 스택프레임 설정한다
함수 에필로그
-
함수내에서의 수행을 마치고 처음 호출한 지점으로 돌아가기위해 스택을 복원
-
leave(move ebp, pop ebp)
-
ret
ebp? esp? 에필로그?
pop?스택에서빼줌(스택의 맨위)
mov esp, ebp(esp값을 ebp에 넣어준다.)
pop ebp? esp에 있는 값을 ebp에 넣어준다
함수 프롤로그 & 에필로그 - 예제
환경 red hat linux (Ftz) 어셈문법 intel
-
eip? 레지스터
-
다음 실행할 코드
-
-
eps?
-
스택을 내리는 것굳이 입력을 하지 않아도 시스템적으로 dummy를 넣어 스택을 늘림
-
-
esp? 스택의 가장 위!
-
ebp? 스택의 바닥(기준) | 절대 안움직임.
서브 넣는ㄴ것 푸쉬는 esp 늘어남
ad는 스택이 줄어든다. 더하니까
*call? jmp? =======> jmp 점프하고 그대로 쭉진행, call main25에서 main30으로 돌아갈수있게해줌 <주소값으로!>
main 호출한애 function 호출받은애
함수호출규약(fastcall, cdecel etc..)
ret?
-
pop eip
-
jp eip
버퍼오버플로우가 일어나면 안될까?
-
ret
-
eip가 다음으로 실행됨 (쉘코드를 넣으면 거기로 실행된다.)
스택 : 가장 마지막에 들어온게 먼저 나갈 수 있다. 정보가 쌓인다
스택의 구조?
기본적으로 함수에 대한 정보들을 포함하고 있다.
지역변수 포함
여기서 가장 취약점이 많이 생기고 버퍼오버플로우가 생길 수 있다.
스택프레임?
리턴어드레스? 가장 아래쪽에 존재함. 특정한 함수가 끝난뒤에 돌아갈 장소를 의미한다
Rbp? 스택이 시작하는 베이스 포인트
변수 c
버퍼
시스템은 운영에 필요한 기본적인 명령어 집합을 커널에서 찾기 때문에 영역은 반드시 저 위치에 있어야 한다.
시스템은 멀티 테스킹이 가능하므로 메모리에는 여러 개의 프로세스가 저장되어 병렬적으로 작업을 수행한다. 가용한 메모리 영역에는 여러개의 segment들이 저장될 수 있다.
segment는 위에서 언급한 바와 같이 하나의 프로세스 묶은 것으로 실행 시점에 실제 메모리의 어느 위치에 저장될 지가 결정된다.
ret를 바꿔서 서버에 나쁜 짓을 할 수 있다. ex) 버퍼오버플로우
Heap?
동적으로 할당되는 변수들이 위치하는 공간 C언어 mallocq?
프로그램에서 **자유롭게 할당하고 해제할 수 있는 영역**입니다.
BSS?
프로그램에서 사용된 변수들이 실제로 위치한 영역. 초기화가 아직 이루어지지 않은 곳
Data는 초기화가 이루어진 곳
Text 는 우리가 작성한 코드가 들어가는 곳, 모두 기계어, 컴파일러가 만들어놓은 코드
'포너블' 카테고리의 다른 글
| FTZ training 01~10 (0) | 2020.02.25 |
|---|---|
| Pwnable study 2주차[함수 프롤로그 & 에필로그] (0) | 2020.02.11 |
| 버퍼오버플로우 05- 해쿨핸드북 (0) | 2020.01.01 |
| 버퍼오버플로우 04- 해쿨핸드북 (0) | 2020.01.01 |
| 버퍼오버플로우 03 - 해쿨 핸드북 (0) | 2020.01.01 |