Lab: Web shell upload via Content-Type restriction bypass 문제 풀이

아래는 해당 문제 풀이 사이트에 들어가 이미지 파일을 올려보았더니 페이지에 이미지가 보이고 있다. 원하는 파일을 올릴 수 만 있다면 웹 쉘을 획득할 수 있을 것이다.

파일 전송한 페이지를 보니 아래와 같이 content-type이 image/png 라고 적혀 있다 이는 파일의 형식을 포함하여 서버로 전달하는 것을 볼 수 있다. 이는 이미지 파일의 경우 자신이 무슨종류의 파일인지 포함하는 데이터를 가지고 있기 때문에 이를 클라이언트에서 읽어서 같이 서버로 올린 것으로 파악된다.

그렇기 때문에 php 파일이 업로드가 막힌 경우 content -type을 변경하여 서버로 올리면 되는 것이다.

이제 홈으로 가면 이미지불러오는 코드로 해당 경로에서 이미지 파일을 불러오는 것을 알 수 있다.

이제 경로만 알아내면 되는데 어디로 저장되는지를 파악해야한다. 이를 위해 해당 이미지를 불러오는 사이트에서 경로를 파악해야한다.

위 이미지와 아래 이미지는 같은 것으로 위는 아래 코드가 실행된 것이다. 여기서 내가 올린 이미지 파일이 <image 태그를 통해 불러오는데 src에 이 경로가 적혀있다. 이 경로를 적어주기만 하면 이미지 파일을 불러올 것이다.

test1.php 를 업로드하는데 아래에는 해당 파일의 내용이 담겨져 있다. 하지만 contetn-type이 image/png 이기 때문에 서버에 올라가게 될 것이다. 만약 형식이 php 이면 이것이 반려되기 때문에 이처럼 클라이언트 필터링을 파일명만 변경하여 보내먄 통과된다.

이를 Repeater에서 send하기만 하면 답이 나오게 된다.

+ Recent posts