-
모의해킹의 일곱 번째 파일 공격웹 해킹 2021. 3. 17. 15:06
파일 공격중에서 파일 인클루전 공격은 주로 PHP 애플리케이션을 대상으로 발생한다.PHP는 인클루드 기능인 include() 함수를 이용하여 다른 파일을 소스 코드에 직접 포함시킬 수 있다. 이때 인클루드할 파일을 외부 사용자가 지정할 수 있는 경우 파일 인클루전 취약점이 존재하게 되고, 공격자는 본인이 원하는 파일을 인클루드시킬 수 있다.
파일 인클루전 공격은 공격자가 인클루드할 수 있는 파일이 각각 호스트 내부의 파일인지 외부의 파일인지에 따라 로컬 파일 인클루전(Local File Inclusion, LFI)과 리모트 파일 인클루전(Remote File Inclusion, RFI)의 두 종류로 구분할 수 있다.
../../../../../etc/passwd와 같이 입력하여 root 디렉토리까지 이동 가능한 공격을 디렉토리 트래버셜 공격이라고 한다.
파일 인클루전 공격중 RFI 실습을 하겠다.
위 코드를 이용하여 RFI 실습을할 것이다.
file1.php는 사용자의 ID와 IP 주소를 출력하는 코드가 인클루드되어 실행된다.
파일의 경로가 파라미터를 통해 전달되면 파일 인클루전 공격이나 디렉토리 트래버셜 공격을 시도해 볼 수 있다.
page=http://<칼리 리눅스 IP>/bad.php를 이용하여 인클루전 공격을 할 수 있다.
RFI 공격은 php 코드를 내장한 텍스트 파일이나 이미지 파일을 사용할 수 있다. 이러한 이유로, 파일 업로드 공격과 조합하여 사용되곤 한다.
파일 인클루전 공격중 LFI 실습을 하겠다.
LFI 공격은 호스트 내 경로에서 파일을 인크루드하기 때문에 ../를 이용하여 상위 디렉토리로 이동하는 공격을 한다. 또한 패스 트래버셜 공격이라고 한다. 이때, ../를 다섯 번이상 입력한 이유는 dvwa의 경로 때문에 다음과 같이 설정했다. 다섯 번이상 상위 디렉토리를 호출하여 루트 디렉토리를 거쳐 호스트 내부의 파일에 접근할 수 있기 때문이다.
파일 인클루전 공격에 대응하는 가장 좋은 방법은 외부 사용자가 입력한 파일 이름을 인클루드에 사용하지 않는다는 것이다. 만약 어쩔수 없이 파일의 이름을 외부에서 입력 받아야한다면, 그 입력 값에 검증을 해야한다. 또한 파일 이름 목록을 작성하여 해당 파일들만 허용하고 나머지는 차단해야 한다. http://, https://, ../ 와 같은 디렉토리 트래버셜 공격을 위한 문자열도 차단하여 파일 인클루전 공격에 대응할 수 있다.
이번에는 파일 업로드 공격을 하겠다. 파일 업로드 공격은 웹 애플리케이션의 파일 업로드 기능을 이용하여 웹쉘이라고 하는 악성 파일을 업로드하고 시스템 권한을 탈취한다.
form 태그에서 명령어를 입력받고, cmd 파라미터를 통해 전달되고, system() 함수를 이용하여 명령어를 실행한다.
이제 파일 업로드 공격 실습을 하겠다.
보안 레벨을 low로 설정을하고, File Upload 메뉴로간다.
이미지 파일이 아닌데 업로드가 성공됬다. 이와 같은 경우에는 업로드된 경로를 찾아야한다. 이 경로가 웹을 통해 접근할 수 있는 경로여야만 파일 업로드 공격에 성공할 수 있다.
원하는 명령어를 통해 위 그림과 같이 데이터를 찾을 수 있다.
파일 업로드 공격의 대응 방법으로는,
- 필요한 파일 형식만 업로드되도록 파일의 확장자와 내용을 검사한다.
- 업로드된 파일을 사용자가 접근 불가능한 경로에 저장한다.(별도의 서버를 구축하고, 웹 애플리케이션 서비스 서버와 분리한다)
- 파일이 업로드되는 디렉토리의 실행권한을 제거한다.
- 업로드된 파일을 다른 확장자로 변경하거나 이름을 랜덤하게 재생성하여 저장한다.
위 글은 화이트 해커를 위한 웹 해킹의 기술을 참고했습니다.
'웹 해킹' 카테고리의 다른 글
모의해킹의 아홉 번째 접근 통제 취약점 공격 (0) 2021.03.19 모의해킹의 여덟 번째 민감한 데이터 노출 (0) 2021.03.18 모의해킹의 여섯 번째 CSRF 공격 (0) 2021.03.16 모의해킹의 다섯 번째 XSS 공격 (0) 2021.03.15 모의해킹의 네 번째 커맨드 인젝션 공격 (0) 2021.03.14