일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- c++
- 풀이
- hackctf
- 기계학습
- lob
- c
- siss
- Javascript
- HTML
- C언어
- 웹페이지 만들기
- CSS
- 생활코딩
- 백준
- 숙명여자대학교 정보보안동아리
- BOJ
- 숙명여자대학교 정보보안 동아리
- 머신러닝
- PHP 웹페이지 만들기
- BOJ Python
- SWEA
- WarGame
- 자료구조 복습
- 드림핵
- Sookmyung Information Security Study
- Python
- 파이썬
- XSS Game
- hackerrank
- The Loard of BOF
- Today
- Total
목록전체 글 (346)
혜랑's STORY
# checksec을 통해 보호기법 및 파일 유형 체크하기 -> 확인해본 경과 prob1dms 32bit 파일이고, 보호기법은 없다. 따라서 Return Shellcode를 사용해 프로그램의 흐름을 변경할 수 있을 것 같다. # IDA를 통해 Pseudo Code 확인하기 s의 크기는 0x14(20) byte라는 것을 알 수 있다. gets() 함수로 s 변수에 입력받은 문자열을 저장함으로써 버퍼오퍼플로우 취약점이 발생한다. name 주소는 bss영역에 있어 주소가 바뀌지 않는다. (bss영역 : 초기화되지 않은 전역 데이터를 위한 영역) -> 즉, s의 크기가 쉘코드를 전달하기에 충분하지 못하므로 name에 쉘코드를 담고 Return address를 name의 주소를 저장하면 RET 명령어로 해당 주소..
# checksec을 통해 보호기법 및 파일 유형 체크하기 -> 확인해본 결과 pwn3은 32 bit 파일이고, 보호기법은 없다. 따라서 앞서 정리한 Retrun to Shellcode를 사용해 프로그램의 흐름을 변경할 수 있을 것 같다. # IDA를 통해 Pseudo code 확인하기 echo() 함수를 살펴보자. gets(&s) : gets() 함수로 s변수에 입력받은 문자열을 저장한다. -> gets() 함수는 입력받는 문자열의 길이 제한이 없기 때문에 버퍼오버플로우 취약점이 발생한다. -> ebp-EE를 통해 s의 크기가 238 byte 라는 것을 알 수 있다. -> s의 크기가 쉘코드를 전달하기 충분히 크기 때문에 s에 쉘코드를 담고 Return address를 s의 주소를 저장하면 RET 명령..
# checksec을 통해 보호기법 및 파일 유형 체크하기 확인해 본 결과 ret2sc는 32 bit 파일이고, 보호기법이 없다. 따라서 앞서 정리한 Return to Shellcode를 사용해 프로그램의 흐름을 변경할 수 있을 것 같다. # IDA를 통해 Pseudo code 확인하기 read(0, &name, 0x32u) : read 함수로 사용자로부터 50 바이트를 입력받는다. gets(&s) : gets() 함수로 s변수에 입력받은 문자열을 저장 -> 길이에 제한 없음. 버퍼오버플로우 취약점 발생 -> name 변수에 shellcode를 저장하고 gets 함수로 payload를 전달해 return address에 name의 주소를 저장하면 RET 명령어로 해당 주소로 리턴하여 쉘코드를 실행할 수 ..
www.notion.so/1-3-29-4-4-d092d58d554540d18c77daa9a1db2434 1주차 (3/29 ~ 4/4) 1. 기초 문법 www.notion.so
#Return to Shellcode Return to Shellcode란 Return address 영역에 Shellcode가 저장된 주소로 변경해, Shellcode를 호출하는 방식이다. CALL & RET instruction CALL 명령어는 Return address(CALL 명령어 다음 명령어의 위치(주소값))를 Stack에 저장하고, 피연산자 주소로 이동한다. RET 명령어는 POP 명령어를 이용해 RSP 레지스터가 가리키는 Stack영역에 저장된 값을 RIP(EIP)에 저장 후, 해당 주소로 이동한다. -> Stack 영역에 저장된 Return address 값을 변경할 수 있다면 프로그램의 흐름을 변경할 수 있다. 1. Proof of concept 코드를 통해 CALL, RET 명령어에..
자료구조 복습용 sorting 문제입니다. - 문제 www.hackerrank.com/challenges/insertionsort2/problem Insertion Sort - Part 2 | HackerRank Code Insertion Sort itself. www.hackerrank.com 첫번째 원소가 정렬되어있다 가정하고 두번째 원소부터 삽입 정렬을 반복 후, 올바른 위치에 삽입될 때마다 배열을 인쇄한다. - 풀이 // Complete the insertionSort2 function below. void insertionSort2(int n, int arr_count, int* arr) { for (int i = 1; i < n; i++) { int key = arr[i]; for (int j..
자료구조 복습용 sorting 문제입니다. - 문제 Insertion Sort - Part 1 | HackerRank Insert an element into a sorted array. www.hackerrank.com 정렬된 리스트에 새로운 값을 오른쪽에 넣는다 하였을 때 올바른 자리에 넣기까지의 과정을 출력하라. - 풀이 // Complete the insertionSort1 function below. void insertionSort1(int n, int arr_count, int* arr) { int compare = arr[n - 1]; for (int i = n - 1; i >= 0; i--) { if (arr[i - 1] > compare) { arr[i] = arr[i - 1]; for..
# IDA Pro 7.0 사용법 1) Pseudo Code 보기 - F5, 특정 함수 이름 더블클릭 2) 디스어셈블 상태, 디버깅 상태에서 특정 어셈블리어 코드를 고치고 싶을 때 - 고칠 부분 클릭하고 Alt + F2 - Menu: edit -> other -> manual instruction -> 바꾸고 싶은 어셈블리어 구문 넣고 ok (프로그램 파일이 수정되는 것이 아니라 분석 화면에서만 바뀐다.) 3) Text View 화면과 Layout Graph 화면으로 전환 - IDA View 화면에서 Spacebar - Graph Overview 기능으로 각 함수들의 관계와 분기점들을 Graph 화면으로 보여준다. 4) Open 한 파일 정보 보기 - IDA View 화면에서 스크롤을 맨 위로 올린다. -..