1. 디렉터리 리스팅 취약점 (디렉터리)
[그림 1-1] 디렉터리 리스팅
Directory_traversal_2.php 페이지는 HTTP 연결 요청에 GET 메소드를 사용하기 때문에 URL에 변수를 노출한다. directory 변수에 입력된 documents 대신 passwords를 입력한 후 실행하면 passwords 디렉터리 안에 내용을 출력한다. 이 때 account.txt에 계정 정보가 있다고 추측할 수 있다.
[그림 1-2] etc 내 파일 목록
directory 변수에 ../을 사용해 서버에 있는 디렉터리 정보를 확인한다. etc 디렉터리에 있는 passwd 파일에 계정 비밀번호가 있다고 추측해볼 수 있다.
[그림 1-3] passwd 파일 접근 실패
../../../../etc/passwd를 입력한 후 실행하면 접근에 실패한다. 이는 passwd가 파일이어서 directory 변수에 passwd 파일의 접근이 제한되기 때문이다.
2. 대응 방안
[그림 2-1] 소스코드 - 1
난이도 high에선 directory 변수에 상대경로를 입력하거나 존재하는 디렉터리를 입력해도 다른 디렉터리로 이동되지 않는다. 소스코드를 보면 기본 경로는 변수를 사용해서 documents 디렉터리로 한정하고 있어 다른 디렉토리로 이동이 불가능하다.
[그림 2-2] 소스코드 - 2
Directory_traversal_check_3 함수에서 사용자가 입력한 경로가 관리자가 지정한 경로와 다를 경우엔 오류 메시지를 출력한다.
3. 디렉터리 리스팅 취약점 (파일)
[그림 3-1] password 파일 접근
Page 변수에 상위 경로로 가는 상대경로를 입력해서 directory 변수로 접근하지 못한 passwd 내용을 확인한다. 내용을 확인해보면 passwd는 비박스 서버에 접근 가능한 아이디, 접근 권한을 기록한 파일이다.
[그림 3-2] heroes.xml 파일 접근
Page 변수에 passwords 디렉터리 안에 있는 heroes.xml 파일을 URL에 넣고 실행하면 파일의 내용을 출력한다.
4. 대응 방안
[그림 4-1] 소스 코드 - 1
소스 코드를 확인하면 directory_traversal_check 3 함수를 사용해 변수에 입력한 데이터가 올바른 데이터인지 검사한다.
[그림 4-2] 소스 코드 - 2
directory_traversal_check 3 함수는 realpath 함수를 호출해 상대 경로를 절대경로로 바꾼 후 strpos 함수로 기본 경로에 사용자가 입력한 경로가 포함되는지 검증한다. 포함되지 않는 경로면 오류 메시지를 출력한다.
'웹해킹 > Bee-box' 카테고리의 다른 글
쉘 쇼크 취약점 (0) | 2018.01.02 |
---|---|
디바이스 접근 제한/서버 측 요청 변조 (0) | 2018.01.02 |
ARP 스푸핑 공격 (0) | 2017.12.31 |
Base 64 인코딩 복호화, Html 5 웹 저장소, 파일텍스트 중요정보 저장 (0) | 2017.12.31 |
중요정보 변경 및 초기화, 상품가격조작 (0) | 2017.12.30 |