esp : 현재의 스택 위치를 나타내는 포인터 ebp : 스택의 베이스 위치를 나타내는 포인터 eip : 다음 명령을 가리키는 레지스터 프롤로그 - 함수가 호출되었을 때, 스텍 프레임을 구성하는 작업 push eip : 다음 명령을 가리키는 값을 스택에 push push ebp : 베이스 포인터의 초기 값을 스택에 push mov ebp, esp : ebp를 esp 값으로 저장시킴 에필로그 leave mov esp, ebp : esp 레지스터에 ebp 주소를 저장시킴 pop ebp : ret 과정 전에 ebp 값을 스택 프레임에서 pop 시킴(mov esp, ebp 과정이 선행되었으므로 pop되는 것은 ebp 값이 됨) ret pop eip : eip 값을 스택에서 꺼냄 jmp eip : 꺼낸 값으로 점프함

먼저 환경 변수란... export 명령어로 임시 적용시킬 수 있으며, 틀은 다음과 같다. export name=value 영구적으로 적용시키기 위해서는 /etc/bash.bashrc 파일을 수정하면 되는데 이거는 별로 중요한 건 아니니까.. 일반적으로는 export를 사용한다 적용된 환경 변수를 확인하기 위해서는 env 명령어를 사용해 줄 수 있음 환경 변수를 이용하여 bof 를 실행시키는 방법은 ,, 먼저 환경 변수에 shellcode (저번에 구했던 nullbyte 없는 shellcode 이어야 함) 를 등록한 후, 환경 변수 shellcode를 가리키는 주소 값을 ret값에 넣어주는 방식으로 진행된다 환경 변수의 주소 값을 출력시키는 파일을 하나 생성하여 주소 값을 확인해 보면 실행 시마다 주소 ..

진도는 나가는데 내가 소화를 못 해서 씀 Buffer overflow( 메모리에서 데이터가 넘쳐서 overflow 다른 데이터의 영역을 침범하는 것, 보통 스택 영역에서의 overflow를 뜻함) -이를 이용하여 return address를 내가 원하는 다른 주소로 덮어 씌워 프로그램의 흐름을 바꿀 수 있음 간단하게 pwnable.kr 의 bof 문제로 설명을 쓰자면 #include #include #include void func(int key){ char overflowme[32]; printf("overflow me : "); gets(overflowme);// smash me! if(key == 0xcafebabe){ system("/bin/sh"); } else{ printf("Nah..\n")..

RTL과 비슷하면서.. 더 발전된 기법 같음 ROP의 설명을 찾아보면, 취약한 프로그램 내부에 있는 기계어 코드 섹션들(Gadget)을 이용하여 BOF 공격 때에 특정 명령을 실행시키도록 하는 방법 이라고 한다. 그렇다면 Gadget이 무엇인가를 보자면 위의 사진은 gdb-peda의 ropgadget 명령어를 이용하여 가젯들의 값을 찾은 사진이다. (gdb가 아닌 peda에만 이 명령어가 존재하고, 가젯의 값들을 파일마다 바뀌는 듯) 일단 찾아낸 주소 위치에 있는 명령어를 한 번씩 체크해 봤다. 위와 같이 popret을 이용하여서는 ebx를 pop시킬 수 있고, pop2ret을 이용하여는 ecx, edx를 pop시킬 수 있다 이 때 시스템 콜을 호출하는 방법에 대하여 갑자기!! 생각해 보면 syscall..

쉘 코드가 nullbyte를 갖고 있을 때, strcpy와 같은 문자열 함수를 호출할 때 모든 내용이 복사되지 않을 수 있다. ( -> strcpy 함수는 복사되는 크기가 정해져있지 않고, \00(NULL)을 만날 때까지 실행된다.) 따라서 nullbyte를 제거한 쉘 코드를 구해야 한다. 쉘을 실행시키는 기존의 c 코드는 다음과 같다. execve의 인자로 argv[0],argv,NULL이 차례로 정해진다. 어셈블리어로 이를 생각하여 보면, 첫 번째 인자는 ebx, 두 번째 인자 ecx, 세 번째 인자는 edx에 삽입되어 사용된다. (어쩔수없는것, 정해져있음) 위의 코드에서 널 바이트를 제거한 어셈블리 코드는 위와 같다. xor %eax, %eax -> 이를 통하여 eax레지스터에 0의 값을 저장시킬 ..
- Total
- Today
- Yesterday
- MaxHeap
- 페르마의 정리
- 완전 탐색
- 배낭 문제
- RequiredArgsConstructor
- LowerBound
- 분할 정복
- 이분탐색
- 희소 배열
- MinHeap
- 구간 합
- Segment Tree
- 동적계획법
- 완전탐색
- 참조 지역성
- 백트래킹
- 부분 합
- 누적 합
- dfs
- HashSet
- prirotyqueue
- 위상 정렬
- 분할정복
- Priority Queue
- Sort
- 최단 거리
- 비트마스킹
- Knapsack
- dp
- Greedy
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |