1. 파일 실행(File Inclusion) 공격 Medium 단계 실습
(1) RFI 공격
[그림 1-1] 파일 실행 공격
파일 실행 공격 시도 결과 에러 메시지가 출력되지만 etc/passwd에 관한 내용은 화면에 출력되지 않는 다는 것을 볼 수 있다.
[그림 1-2] 소스 코드
소스 코드를 보면 page 변수 값에서 "http://", "https://", "../", "..\"을 삭제한다. 대소문자를 구분하는 str_replace() 함수를 사용하고 있어 이 취약점을 이용하면 Http://, HTTP://, …/./ 등으로 우회가 가능하다. ..././는 ./이 삭제되서 ../로 복구가 가능하다.
[그림 1-3] 우회 성공
page=HTTP://192.168.171.175/cat.php로 우회한 결과 cat.php에 심어놨던 공격 코드들이 동작해 파일 내용들이 웹 페이지에 노출 되는 것을 확인할 수 있다. 또한 page=Http://192.168.171.175/cat.php로 우회해서 실행해도 결과값은 똑같다.
(2) LFI 공격
[그림 1-4] 우회 성공
[그림 1-4]는 page=..././..././..././..././..././..././..././etc/passwd 접근 화면이다. 페이지 상단에 /etc/passwd 관련된 내용들이 출력됐음을 볼 수 있다. 이 또한 변수 검증 결함 취약점을 이용해 우회한 결과다.
2. 파일 실행(File Inclusion) 공격 High 단계 실습
(1) LFI공격
[그림 2-1] 에러 페이지
page=http://192.168.171.175/cat.php를 입력해 요청하면 에러 페이지가 나오고 원하는 결과값은 출력되지 않는다.
[그림 2-2] 소스 코드
소스코드를 보면 fnmatch 함수를 사용해 file*이라는 패턴, 즉 file로 시작하는 경우에 매칭이 되는지에 대한 여부와 include.php인 경우에만 입력을 허용했다. 만약 파일 업로드 시엔 file로 시작하는 파일을 업로드 하거나 file:// 형식의 URL을 사용하면 우회가 가능하다.
[그림 2-3] 우회 성공
page=file:///etc/passwd로 우회해서 접근하면 /etc/passwd 파일 경로 조작이 가능하다. URL에서 file로 시작하고 php는 내부 파일로 인식을 하기 때문에 High 단계에서도 우회가 가능함을 알 수 있다. 공격자는 취약점이 있다는 것을 발견하고 어떤 방식으로 웹 서버에 자신이 원하는 공격 코드가 담긴 파일을 업로드 할 것인지 생각하게 된다. 추가로 RFI 공격은 반드시 http 프로토콜이 들어가야 로컬 파일을 불러와 실행할 수 있기 때문에 현재 방어 관점에서 보면 우회가 불가능하기 때문에 실행할 수 없다.
3. 대응방안
- 외부 사용자가 입력한 파일 이름을 사용하지 않는다.
- 반드시 파일 이름의 입력값을 검증한다.
- 화이트리스트에 인클루드가 필요한 파일 이름의 목록을 작성해 화이트리스트에 있는 파일 이름들만 허용하고 나머지 파일들은 전부 차단한다.
- ../과 같은 디렉터리 트레버설 공격 문자열을 차단한다.
'웹해킹 > DVWA' 카테고리의 다른 글
파일 업로드 공격 대응 방안 (0) | 2020.01.04 |
---|---|
파일 업로드 공격 (2) (0) | 2020.01.04 |
파일 업로드 공격 (1) (0) | 2020.01.04 |
파일 실행(File Inclusion) 공격 (1) (0) | 2020.01.04 |
Command Injection 공격 (1) (0) | 2019.05.23 |