티스토리 뷰
한 줄 요약 : 환경변수같은 특정한 입력을 이용해 파일을 조작하는 안전하지 않은 코드에서 발생하는 취약점이다.
절대 디렉토리 경로 조작(Absolute Path Traversal) : 외부 입력이 파일시스템을 조작하는 경로를 직접 제어할 수 있거나 영향을 끼치면 위험하다. 이 취약점은 공격자가 응용프로그램에 치명적인 시스템 파일 또는 일반 파일을 접근하거나 변경 가능하도록 한다.
코드
1 2 3 4 5 6 7 8 9 | #include <stdlib.h> #include <unistd.h> int main() { char* rName = getenv("FILEPATH"); unlink(rName); return 0; } | cs |
실습
과정 설명
- 첫 번째 ls에서 /home/tribal/tmp라는 디렉토리에 test와 test.c 파일만 있는 것을 확인할 수 있다.
- test 파일은 EGG라는 환경변수의 값을 가져와 값에 해당하는 경로의 파일을 지우는 프로그램이다.
- env 명령어로 환경변수를 확인해보면 EGG라는 환경변수에 /home/tribal/tmp/file이라는 경로가 지정되어 있다.
- file이라는 파일이 없으므로 touch 명령어로 하나 생성해본다.
- ls로 확인해보면 제대로 생성된 것을 확인할 수 있다.
- test 파일을 실행시키면 환경변수 EGG로부터 값을 가져와 file을 삭제할 것이다.
- ls로 다시 확인해보면 삭제된 것을 확인할 수 있다.
여기서 만약 개발자가 특정 환경변수 명을 고정해두고 unlink() 함수로 삭제한다고 가정했을 때 공격자는 특정 환경변수에 export 명령어로 삭제하고자 하는 파일명을 넣으면 본래 삭제하려는 파일이 아닌 다른 파일을 삭제하도록 하는 것도 가능하지 않을까 싶다.
예를 들어 export $EGG=/home/tribal/tmp/test.c를 하면 test.c가 삭제될 것이다.
1 2 3 | $ export $EGG=/home/tribal/tmp/test.c $ ./test $ ls | cs |
'System > Linux' 카테고리의 다른 글
Pwnable을 위한 Tools 정리 (4) | 2017.04.14 |
---|---|
Heap 영역 정리 (7) | 2017.04.09 |
qira 설치 및 사용법 (0) | 2016.07.31 |
Understanding glibc malloc 번역 (0) | 2016.07.16 |
Heap overflow using Malloc Maleficarum 번역 (0) | 2016.07.14 |
댓글