본문 바로가기

3. Pwnable (포너블)

[2024.11.22] PWN PWN 해 7주차 활동

7주차는 드림핵의 System Hacking 로드맵에서 Type Error, Command Injection, Path Traversal 강의를 공부했다.

https://dreamhack.io/lecture/roadmaps/2

 

System Hacking

시스템 해킹을 공부하기 위한 로드맵입니다.

dreamhack.io

 


 

Type Error 

 

Type Error: 변수의 자료형 선언 시, 변수를 활동하는 동안 담게 될 값의 크기와 용도, 부호 여부를 고려해야 하는데, 이런 고려 없이 부적절한 자료형을 사용했을 때 발생한다.

-  자로형은 변수의 크기를 정의하고, 용도를 암시한다.

-  한 번 정의된 변수의 자료형은 바꿀 수 없다. , 변수에 할당된 메모리의 크기는 확장되거나 줄어들지 않는다.

   이에 따라 변수의 크기보다 큰 값을 대입하려고 할 때, 데이터가 넘쳐서 유실될 수 있다.

-  양수로만 쓰일 값에는 unsigned를 붙이는 습관을 들이면 좋다.

 

Type overflow/Underflow: 변수의 값이 연산 중에 자료형의 범위를 벗어나면, 갑자기 크기가 작아지거나 커지는 현상. 정수 자료형을 대상으로 발생하면 Integer overflow/underflow라고 한다.

- Type overflow: 변수가 저장할 수 있는 최댓값을 넘어서서 최솟값이 되는 버그

- Type underflow: 변수가 저장할 수 있는 최솟값보다 작아 최댓값이 되는 버그

- MSB (Most Significant Bit): 데이터의 최상위 비트, 부호 표현하기 위해 사용된다.

 

 

 

 

Command Injection

 

Command Injection: 사용자의 입력을 시스템 명령어로 실행하게 하는 것으로, 명령어 실행 함수를 잘못 사용해 발생한다. 명령어 실행 함수에 사용자가 임의의 인자를 전달할 수 있을 때 발생한다.

-  인젝션: 악의적인 데이터를 프로그램에 입력해 이를 시스템 명령어, 코드, 데이터베이스 쿼리 등으로 실행되게 하는 기법

-  커맨드 인젝션: 인젝션의 종류 중 하나로, 시스템 명령어에 대한 인젝션을 의미.

-  메타 문자: 셸 프로그램에서 특수하게 처리하는 문자이다. ;를 사용하면 여러 개의 명령어를 순서대로 실행시킬 수 있다.

 

 

 

 

Path Traversal

 

Path Traversal: 사용자가 허용되지 않은 경로에 접근할 수 있는 취약점이다. 사용자가 접근하려는 경로에 대한 검사가 미흡하여 발생하며, 임의 파일 읽기 및 쓰기의 수단으로 활용될 수 있다.

-  로컬 파일 시스템에 접근하는 서비스를 외부에 공개할 때는 접근할 수 있는 파일의 경로에 제한을 두어야 한다.

 

<리눅스에서 파일의 경로를 지정하는 두 가지 방법>

1. 절대 경로: 루트 디렉토리(‘/’)부터 파일에 이를 때까지 거쳐야 하는 디렉토리 명을 모두 연결해 구성한다. 각 디렉토리는 ‘/’로 구분되며, 끝에 대상 파일의 이름을 추가해 완성한다.

리눅스의 파일 시스템에서 한 파일에 대응되는 절대 경로는 유일하며, 그것은 그 파일만의 고유한 값이다. 그렇기 때문에 현재 사용자가 어떤 디렉토리에 있어도, 절대 경로를 사용하면 대상 파일을 가리킬 수 있다.

 

2. 상대 경로: 현재 디렉토리를 기준으로 다른 파일에 이르는 경로를 상대적으로 표현한 것이다. 리눅스에서 ..는 이전 디렉토리, .는 현재 디렉토리를 의미한다.

어떤 파일을 가리키는 상대 경로의 수는 무한하다.