[시스템 해킹]_입문편
섹션 0. 시스템 해킹 이해하기
해킹목표: 하면 안되는 것 하기
해킹: 권한이 없는 행위 하기
시스템 장악(Shell 실행) == 실행하고 싶은 코드를 실행할 수 있음
실행하고 싶은 프로그램(코드)를 실행시켜주는 프로그램: 쉘(Shell)
나의 통제 하에 있는 행위: 해킹 X,내가 시스템을 장악한 상태
남의 컴퓨터로 넘어가서 계산기를 연다면 ?-> 명백한 해킹
시스템: PC 그 자체
섹션 1. 패킹대회(Pwnable)의 문제상황 이해하기

도메인 이름:인터넷에 연결된 컴퓨터의 이름
포트:네트워크에 연결된 컴퓨터에서 돌아가고있는 프로그램의 번
+시스템해킹문제를 푸는건데 왜 nc(원격접속)이 필요한가 ?
ctf pwnable에서 출제되는 문제상황 : 인터넷 어딘가에 위치한 외부 remote환경에서 내부 환경으로 침투하여 들어가는 것
따라서 인터넷 어딘가에 있는 프로그램에 접속하는 이 nc 그리고 접속정보가 필요함
즉 pwnable의 문제상황 // 외부에 노출되어있는 포트로 접속가능한 프로그램에 접속하여, 악의적인 실행흐름을 통해 시스템을 장악하는 것
섹션2. 악의적인 실행으름 만드는법
- 컴퓨터 구조 이해하기


- 프로그램 실행과정


->컴퓨터역할은 코드에 적힌대로 실행을 해주는것 // 이것이 컴퓨터 구조의 취약점 (왜냐? 이 pc에 있는 값이 잘못된 값인지 실행해도 되는 값인지 전혀 검사하지 않기 때문)
- 악의적인 실행흐름 만들기
컴퓨터는 주소 값들을 검증하지 않고 실행하기 떄문에 이를 이용해 악의적인 실행흐름 만듦
메모리 영역 어딘가에 실행하고 싶은 코드를 입력하고. PC 값을 그 코드가 잇는 주소로 바꿔줌
- ex) 0xFFFFF라는 임의의 주소에 'password 가 뭔지 알려줘' 라는 악의적인 코드를 삽입->다음번에 CPU가 해야할 일의 주소를 가리키고 있는 레지스터의 값을 0xFFFFF로 변경할 시, CPU는 이 주소에 가서 코드를 읽고 실행->해킹
섹션3. Pwnable 학습을 위한 실습환경설정(Configuration)
Window에서 Ubuntu OS 설치하기 (VM이용) : 포스타입 포스트 (postype.com)
링크// 윈도우에 Ubuntu OS를 설치하는 방법
https://juntheworld.postype.com/post/13437080
링크// 포너블 문제풀이를 위한 도구들을 설치(프로그램 분석도구인 gdb와 pwntools를 설치)

+ pwndbg : 시각적으로 예쁠 뿐아니라 다양한 정보들을 잘 정리해서 보여줌
섹션4. 취약점 이론과 공격기법 실습-HelloFlag
- CTF Pwnable 문제에서 주어지는 파일 확인

플래그 파일
-플래그:우리가 목표로 하고있는 값
- 쉘프로그램을 열고 쉘에서 내 명령어가 잘 작동하는 것을 증명하면 됨
-> cat flag라는 명령어를 통해 서버에 존재하는, 정상적인 루트로는 확인할 수 없고 해킹을 통해서만 확인할 수 있는 플래그 파일을 읽었음을 보이는 것
* cat flag: 파일의 값을 읽는 명령어
타겟 바이너리
- C언어, C++, python등으로 만들어진 실행가능한 프로그램
- ELF 파일(리눅스), exe 파일(윈도우)
소스코드
-getflag함수: execve라는 함수에서 /bin/sh을 실행 // 시스템에 원하는 명령어를 자유롭게 사용
- Pwnable 문제풀이 과정


pwnable 문제풀이 : 취약점 분석 → 공격 시나리오 수립 → 익스플로잇 코드 작성
섹션5. 취약점이론과 공격기법 실습 - BasicBOF


지역변수: 스택메모리 내 들어있는 값들
Return 주소:(프로그램 동작은 무조건 함수로 이뤄짐)caller로 돌아감
EBP: 전 스택 프레임의 시작 주소
스택 프레임: 특정한 함수의 실행정보들을 묶음
+ 이전 스택 프레임의 시작주소를 가지고 있으면 손쉽게 스택프레임을 나눌 수 있음!!!

- EIP와 EBP는 모두 레지스터
- EIP 레지스터의 역할: CPU가 지금 실행중인 코드의 위치를 담고있기 // CODE 영역 어딘가에 있는 ‘주소’// Program Counter에 해당하는 레지스터
- EBP 레지스터의 역할: 지금 실행중인 함수의 스택프레임 시작위치를 담고있기 // STACK 영역 어딘가에 있는 ‘주소’
// STACK에 저장하는 것은 이 레지스터 안에 담겨 있는 ‘값’
스택을 공부하는이유-> 입력길이를 검증하지않는 입력함수에 의해서 Stack Buffer Overflow가 일어날 수 있다는 것을 이해하기 위해서!!

;
보통 이런식으로 표현 ㅎ
;
'Stack Buffer Overflow 라는 취약점을 이용한 Return Address Overwrite 공격기법 실습'




*인프런 강의를 수강한 후 정리한 글입니다.*
[무료] 해킹대회(CTF) 출전을 위한 시스템해킹(Pwnable) 입문 - 인프런 | 강의 (inflearn.com)
'소학회 > 인프런_강의정리' 카테고리의 다른 글
| [Memory Forensic Volatility 와 악성코드 분석] ~8/29강의 정리본 (0) | 2023.08.28 |
|---|---|
| [Memory Forensic Volatility 와 악성코드 분석] ~8/13 강의 정리본 (0) | 2023.08.14 |
| [Memory Forensic Volatility 와 악성코드 분석] ~8/8 강의 정리본 (0) | 2023.08.08 |
| [Memory Forensic Volatility 와 악성코드 분석] ~7/31 강의 정리본 (0) | 2023.07.30 |
| [Memory Forensic Volatility 와 악성코드 분석] ~7/24 강의 정리본 (0) | 2023.07.24 |