파일 업로드 취약점 실습
1. 파일 업로드 취약점 아무런 검증이 없는 경우
(1) php 파일을 올려본다. 정상적으로 작동하는 것을 볼 수 있다.
(2) Back to My account에서 이전 페이지로 돌아간 다음 사진 아이콘을 우클릭해서 이미지 주소 복사를 눌러 URL을 얻은 후 새 창에 해당 URL 주소를 연다.
실행 시 코드가 적상 작동해 플래그 값이 나온 것을 볼 수있다.
** 웹셀 대신 해당 코드를 업로드하는 이유는 웹셀이 안전상의 이유로 가상머신이 아닌 일반 컴퓨터 등에서 실행이 안되고, 버프스윗 자체에는 웹셀이 안올라가기 때문이다.
대안으로 사용하는 코드는 이렇다.
<?php
echo file_get_content('/home/carlos/secret');
?>
이외에도 print문이나 실행을 증명할 수있는 스크립트 코드를 사용하기도 한다.
2. Content-Type 변경 우회
(1) Content-Type을 변경해 우회해야하는 경우는 중간에 패킷을 가로채서 수행해야하기때문에 버프스윗의 intercept is on 을 킨다. 사실 그냥 HTTP History에서 바로 Repeater로 보내도 된다.
(2) 파일 업로드에서 php 파일을 선택해 올린 후 업로드를 눌러준다.
(3) 패킷이 오면 바로 우클릭해서 Repeater로 넘겨준다. 커서로 잡혀있는 해당 부분을 수정할것이다.
(4) Content-Type을 application/octet-stream에서 image/jpeg로 바꿔준 후 Send를 눌러 실행시켜준다.
(5) 여기서 Copy URL이 안돼서 이것저것 해봤는데 Show response in browser를 눌러주면 우리가 Repeater내에서 요청채서 받은 Response를 브라우저에서 바로 열수있다.
(6) 그러면 이렇게 업로드가 성공한 페이지가 새 창에 뜨게된다.
(7) Back to My account에서 이전 페이지로 돌아간 다음 사진 아이콘을 우클릭해서 이미지 주소 복사를 눌러 URL을 얻은 후 새 창에 해당 URL 주소를 연다.
(8) 정상 실행 페이지를 확인한다.
3. Directory Traversal 실습
https://portswigger.net/web-security/file-upload/lab-file-upload-web-shell-upload-via-path-traversal
(1) php 파일을 업로드 했을 때 정상적으로 업로드 되고, 파일을 우클릭해 URL을 타고 들어갔을 때 실행이 되지 않고 PHP문이 그대로 노출되는 것을 볼 수있다. 여기서 Directory Traversal을 사용하는 이유는 상위폴더로 이동해 실행권한이 없는 해당 폴더가 아닌 상위 폴더로 가서 실행을 하기 위함이다.
Directory Traversal가 할수있는 것들
-> Override, Deface
-> ../../../../../etc/passwd
-> 권한 획득: 웹쉘시 root 웹쉘일수 있음.
(2 해당 패킷을 Repeater로 보내서 File name부분을 찾아 수정할것이다. 커서에 잡힌 부분을 찾는다.
(3) 파일 이름 앞에 ../를 붙여본다.
우측 Response를 보면 200 ok 응답을 받았지만 업로드 경로는 여전히 avatars/test.php임을 확인할 수있다.
(4) ../를 ..%2f로 수정해서 다시 요청해본다. /는 인코딩시 %2F이다.
해당 %2F가 안될시 %252F도 요청해본다. (%252F -> %2F)
요청을 보냈을때 파일 경로가 avatars/../test.php로 정상 반영되었음을 확인할 수있다.
(5) 그럼 여전히 Copy URL로는 페이지를 찾을 수없다는 요청이 뜨니 Show response in browser에 URL 주소를 카피한 후 새 창에 띄운다. 경로가 반영되어 정상 업로드된것을 확인할 수있다.
(6) 내 계정 페이지로 돌아가서 이미지파일의 주소를 복사해 새창에 띄운다.
(7) 정상적으로 플래그가 뜬 것을 볼수있다. 주소를 카피해 붙여넣기했을 때 실행되는 경우가 두가지이다.
https://acc41f0b1e9097b0c0fe4ea5002700a0.web-security-academy.net/files/test.php
-> avatars/..%2F가 생략되어 실제 경로로 접속하는 경우
https://acc41f0b1e9097b0c0fe4ea5002700a0.web-security-academy.net/files/avatars/..%2Ftest.php
-> avatars/..%2F가 생략되지 않고 avatars의 상위폴더의 경로로 file내에 test.php가 실행되는 경우
4. 블랙리스트 기반 파일업로드 우회 실습
실패의 흔적들(업로드는 되는데 실행이 안된다)
(1) 일단 php 파일을 올려보고 어떤식으로 오류메세지가 뜨는지 확인한다. PHP 파일은 업로드가 되지 않는다고 뜨는 것을 확인할 수있다.
(2) 그럼 .htaccess를 사용해볼텐데, 확장자를 아무단어로 만들어서 파일명만 바꿔 저장해준다. 코드는 그대로 file_get_content('/home/carlos/secret')를 사용하고 파일명만 파일명(test).아무말확장자(myungju) 생성한 후 보낸다. 그고 버프스윗을 통해 패킷을 repeater로 보낸다.
(3) 그럼 이제 파일이름과 해당 커서로 잡힌 부분을 수정해줄텐데 파일이름은 .htaccess로 <?php ?> 문은
AddType application/x-httpd-php .myungju 로 수정해준다. AddType application/x-httpd-php .내가 만든 아무말확장자(myungju) 는 myungju 확장자도 php 확장자처럼 대해라. 라는 명령어이다.
(4) 위와 마찬가지로 Show response in browser 해서 들어가보면 확장자가 숨겨진 채 업로드 된 파일을 볼 수있다. 이제 파일을 실행시키킬텐데 My account 페이지에서 Copy URL을 한 후 붙여넣기 하면 아래와 같은 URL을 볼 수있다.
주소 복사시 뜨는 주소
https://ac631f421fc2fdddc0319228000a00ec.web-security-academy.net/files/avatars/.htaccess
---> 변경해주어야 할 주소
https://ac631f421fc2fdddc0319228000a00ec.web-security-academy.net/files/avatars/test.myungju
(5) 파일의 이름을 .htaccess가 아닌 내가 처음에 설정한 파일이름으로 바꾸어주소에 접속한다.
패킷을 보낼때, 프로그램상에서는 확장자가 숨겨졌지만 실행은 원래 파일이름으로 해야 정상적으로 파일을 불러와 실행시킬 수있다. 해당 파일이 정상적으로 실행된 패킷을 볼수있다.
'Web hacking > Nomaltic) 웹 해킹 수업 노트 👩💻' 카테고리의 다른 글
[복습]파일 업로드 취약점 실습(2) (0) | 2021.12.16 |
---|---|
[10주차] File Inclusion(LFI, RFI) (0) | 2021.12.16 |
[9주차] 파일 업로드 취약점 (0) | 2021.12.10 |
[9주차]파일 업로드/다운로드 취약점 (0) | 2021.12.08 |
[복습]CSRF 취약점 실습 (0) | 2021.12.05 |