파일 업로드 공격
파일이 업로드 되는 페이지(게시판, SNS 등)에 악성 파일(웹쉘)을 업로드
웹쉘 php 파일을 업로드를 하게 되면
../../hackable/uploads/webshell.php succesfully uploaded!
라고 뜬다
주소창을 보면 현재
http://localhost/dvwa/vulnerabilities/upload/#
두번의 상위 디렉토리이므로
http://localhost/dvwa/hackable/uploads/webshell.php
를 치고 들어가면
웹쉘 커맨드가 나온다
medium 단계에서는
jpeg나 png 확장자만 가능하다고 하다
버프스위트를 키고 인터셉트를 킨 다음 업로드를 누르면
보내는 것에 대한 정보가 나온다
그 중 Content-Type 을 조작해볼거다
image/jpeg 라고 해주고 forward 로 보내주면
성공적으로 됨을 볼 수 있다
high 단계는 실제 파일 확장자가 jpg 인지 jpeg 인지 png 인지 확인하게 된다
버프스위트를 키고 인터셉트 킨 후 똑같이 업로드를 한다
파일명을 webshell.php 되어있는 것 뒤에 .jpg를 붙히면 된다
webshell.php.jpg 이렇게 말이다
그리고 뒤에 GIF89a를 적어준다
이 때 GIF89a 는 GIF파일의 표준의 값으로 이것을 파일 앞에 입력하게 되면 이미지파일처럼 해서 속일 수 있다
하지만 이렇게 해서 얻은 url을 치면 결국은 jpg파일이기 때문에 실행이 안된다
만약 파일인클루젼 공격이 가능한 경우에 이걸 조합하면 가능하다
파일이 jpg파일이더라도 결국 웹쉘코드이기 때문에 파일에 삽입된 코드를 인클루드해서 할 수 있다
먼저 File Inclusion을 들어가서 주소창을 본다
high 단계에서는 file 을 적어주어야 우회가 되기 때문에 file로 시작한다
그리고 아까 경로를 보면 ../../hackable/uploads/webshell.php.jpg 이기 때문에
http://localhost/dvwa/vulnerabilities/fi/?page=file/../../../hackable/uploads/webshell.php.jpg
라고 치면 좌측상단에 쉘이 뜨는걸 볼 수 있다
하지만 이 쉘 폼을 이용하면 오류가 뜨게된다
그래서 결국 cmd파라미터를 사용하기 때문에
바로 주소 뒤에 &cmd= 로 넘겨주어야 한다
즉 http://localhost/dvwa/vulnerabilities/fi/?page=file/../../../hackable/uploads/webshell.php.jpg&cmd=cat /etc/passwd
하게되면 정보를 출력하게 된다
이것은 3가지 공격방법이 섞인 공격이다 (파일업로드 공격 + 파일인클루젼 공격 + 패스트래버설 공격)
impossible 단계에서는
이미지 파일이 맞는지 확인한 다음에 업로드 된 내용으로 이미지 파일을 다시 생성하고 있다
이 방법 말고도 업로드 파일 이름을 랜덤으로 변경해서 해커가 마음대로 접근하지 못하게 하는 방법도 있다
또 다른 방법은 업로드되는 서버를 웹 애플리케이션 서버와 분리하는 것