티스토리 뷰

한 줄 요약 : 환경변수같은 특정한 입력을 이용해 파일을 조작하는 안전하지 않은 코드에서 발생하는 취약점이다.


절대 디렉토리 경로 조작(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


실습


과정 설명

  1. 첫 번째 ls에서 /home/tribal/tmp라는 디렉토리에 test와 test.c 파일만 있는 것을 확인할 수 있다.
  2. test 파일은 EGG라는 환경변수의 값을 가져와 값에 해당하는 경로의 파일을 지우는 프로그램이다.
  3. env 명령어로 환경변수를 확인해보면 EGG라는 환경변수에 /home/tribal/tmp/file이라는 경로가 지정되어 있다.
  4. file이라는 파일이 없으므로 touch 명령어로 하나 생성해본다.
  5. ls로 확인해보면 제대로 생성된 것을 확인할 수 있다.
  6. test 파일을 실행시키면 환경변수 EGG로부터 값을 가져와 file을 삭제할 것이다.
  7. 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
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
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