[목차]
-What are file upload vulnerabilities?
-How do file upload vulnerabilities arise?
-Exploiting unrestricted file uploads to deploy a web shell
-Exploiting flawed validation of file uploads
-실습
-What are file upload vulnerabilities?
파일 업로드 취약점이란 웹서버가 유저들에게 충분한 이름,타임,콘텐츠,사이즈의 점검없이 파일 업로드를 허락할때 발생하는 취약점 입니다.
이 취약점은 기본적인 이미지를 업로드 하는것만으로 잠재적인 위험이 있는 위험한 취약점 입니다.
심지어 원격으로 웹 코드를 실행시킬수 있는 server-side script 를 파일에 포함시킬수도 있습니다.
-How do file upload vulnerabilities arise?
일반적으로 허락된 파일확장자 파일을 올리게 할 수 있습니다.
그러나 실수로 어느 파일 유형을 블랙리스트에 올리는걸 실수할수도 있고 , Burp proxy 나 Repeater 같은 도구를 통하여 공격자가 쉽게 조작할 수 있는 속성을 통해 공격 할수도 있습니다.
(가령 파일 확장자를 image 나 png 파일만 가능하게 해놧는데 , repeater 를 통하여 이 확장자를 image라고 바꾼후 보내어 속이는 경우가 있을 수 있습니다.)
-Exploiting unrestricted file uploads to deploy a web shell
최악인 경우로는 웹사이트에 php,java,python 파일같은 server-side scripts를 업로드 하는것이 가능할 때 입니다.
이럴 경우 서버에 웹쉘을 업로드 할수 있게 되면 서버의 명령어 권한이 넘어갈 수가 있습니다.
※웹쉘(WebShell)? : web+shell 의 합성어로 , shell 은 시스템해킹에서 쓰이듯 사용자와 운영체제의 커널 간 인터페이스 역할을 하는 명령어 해석기 이다.
즉 이 웹쉘을 업로드하는것에 성공하면 웹에서 원하는 명령을 실행할 수 있다. 다시말해 '뚫린것'이다
*php 파일업로드가 가능할 시엔
<?php echo file_get_contents('/path/to/target/file'); ?> 라는 식의 코드를 넣어 원하는 경로의 파일을 볼수도있고,
<?php echo system($_GET['command']); ?> 일반적으론 이런 코드를 실행시켜 명령어를 실행시킨다.
-Exploiting flawed validation of file uploads
일반적으로 웹사이트는 파일 확장자를 검증하는 절차를 거치기 마련이다. 하지만 그렇다고 취약점이 사라지진 않는다.
만약 웹사이트가 파일 업로드에 대한 요청의 Content-Type 이 허락된 MIME type 인지 확인한다고 치자.
허락된 타입은 image/jpeg , image/png 이기 때문에 검증을 했더니 php 파일이여서 거부를 했다.
하지만 앞서 말했다시피 이런 내용은 Burp Repeater 와 같은 도구로 조작이 될 수 있다.
즉 php 파일에 대한 요청에서 Content-type 을 image/jpeg 로 바꿔주면 뚫리는것이다.
그래서 추가적인 유효성 검사가 따로 필요하다.
-실습
실습환경 : 이 사이트는 기본적으로 허락된 파일타입만 업로드 가능하되 그 외에 추가적인 검사는 하지않는다.
랩을 해결하기 위해선 , /home/carlos/secret 에 있는 내용을 제출해야한다.
일단 사이트의 계정홈페이지에 들어오니 내 프로필 사진을 업로드 할 수 있는 버튼이 있었다.
그래서 webshell.php 란 스크립트를 저렇게 작성해준후 업로드 해보았지만...
(참고로 php 파일은 php를 다운받은후 , 메모장에 작성후 확장자를 php 라고 해주시면 파일이 만들어집니다!)
당연히 Image/jepg 타입이 아니라서 막혔다.
그래서 Burp Suite 로 가서 POST 명령을 찾은 후 방금 보낸 요청을 Repeater 를 사용하여 수정하기로 했다.
이렇게 Content-Type 을 application/octet-stream -> image/jpeg로 바꾸어주었다.
그리곤 다시 요청을 보내주자
파일이 업로드 되었다는 창이 나오게 되었다.
이제 프로필 사진을 한번 봐보자.
프로필 사진이 이상한 사진아이콘으로 바뀌었다.
이 사진아이콘을 새창에서 열어보도록 하자.
파일이 잘 업로드 되어서 php 파일 안에있던 코드가 실행되어 무사히 secret 폴더에 있던 플래그를 가져온것을 볼수있다.
위에 코드를 제출하자 무사히 실습을 마칠수 있게되었다!
'웹해킹' 카테고리의 다른 글
XSS(Cross-site scripting)기법 (0) | 2024.06.24 |
---|---|
SQL Injection(SQLi) (0) | 2024.05.27 |
SSRF(Server-side request forgery) (0) | 2024.01.29 |
Authentication vulnerabilities (1) | 2024.01.26 |
Access control (2) | 2024.01.25 |