[webhacking.kr] old-43

asdf·4일 전

web

목록 보기
27/32


webshell을 업로드해서 플래그를 찾는 문제인 것 같습니다.

칼리 리눅스에 여러 종류의 웹쉘이 기본적으로 포함되어 있습니다. php 디렉터리에 있는 웹쉘만 간단히 설명드리겠습니다.

파일명유형주요 특징
php-reverse-shell.php리버스 쉘타겟 서버가 공격자에게 연결을 시도하게 하여 대화형 Bash 쉘을 획득할 때 사용합니다. 가장 널리 쓰이는 도구입니다.
simple-backdoor.php기본 백도어URL 파라미터(GET)를 통해 간단한 시스템 명령어를 실행합니다. 코드가 매우 짧고 단순한 것이 특징입니다.
php-backdoor.php일반 백도어명령어를 입력할 수 있는 웹 UI(HTML 폼)를 제공하여 브라우저상에서 편리하게 제어할 수 있습니다.
qsd-php-backdoor.php우회형 백도어전송 데이터를 인코딩하거나 난독화하여 웹 방화벽(WAF)이나 탐지 시스템을 우회하려 할 때 유리합니다.
php-findsock-shell.php소켓 탈취 쉘인바운드/아웃바운드가 모두 차단된 엄격한 방화벽 환경에서 기존 HTTP 소켓 세션을 가로채어 쉘을 연결하는 고급 기법입니다.

저는 가장 단순한 simple-backdoor.php를 사용해 보겠습니다.

업로드를 하니 wrong type이라는 텍스트가 나옵니다. 아마 php 타입의 파일을 필터링하는 것 같습니다. php와 마찬가지로 .c.py 파일도 필터링을 수행합니다.

POST에서는 파일의 타입을 Content-Type으로 전송합니다. php의 경우 application/octet-stream이라는 Content-Type을 사용합니다.

이를 Burpsuite를 사용하여 Content-Type을 php가 아닌 사진처럼 이미지 파일이라고 위조하여 전송하게 되면 필터링 로직을 우회하여 웹쉘을 업로드할 수 있습니다.

웹쉘이 정상적으로 업로드가 된 모습입니다.

앞에서 설명드린대로 simple-backdoor.php는 GET 파라미터를 통해 동작하기 때문에 뒤에 ?cmd=cat /flag를 붙여주면 플래그를 얻을 수 있습니다.

실전에서는 WAF에서 더 복잡하게 필터링을 하기 때문에 지금처럼 헤더 변경만으로는 우회를 할 수 없습니다. 그래도 old-43은 파일 업로드 공격을 배울 때 가장 기초가 되는 기법을 연습할 수 있는 좋은 문제라고 생각합니다.


+)추가

php-backdoor.php 실행 화면입니다. simple-backdoor.php와 다르게 웹 인터페이스 화면이 존재합니다.

profile
Rainy Waltz(a_hisa)

0개의 댓글