image-storage
문제 링크
https://dreamhack.io/wargame/challenges/38
문제 설명
php로 작성된 파일 저장 서비스입니다.
파일 업로드 취약점을 이용해 플래그를 획득하는 문제이다. 플래그는 /flag.txt에 있습니다.
파일 업로드 취약점 : 파일 업로드 기능을 악용하여, 해킹 파일을 업로드하여 공격하는 수법입니다. 특히, 웹쉘 이라는 공격이 가장 유명합니다.
웹쉘 : 웹 서버측에서 실행하면, 서버 안에서 돌아가는 커맨드라인 창을 띄웁니다! 공격자는 웹쉡을 통해 서버를 마음대로 돌아다니며 원하는 명령을 수행할 수 있습니다.
풀이과정
-
제공된 사이트에 파일 업로드 기능이 구현되어 있음을 확인할 수 있습니다.

-
웹쉘을 제작합니다.
웹쉘은 배포하는 고성능 웹쉘을 사용할 수 있고, 직접 코딩하는 방법도 있습니다.
저는 커맨드 입력창만 제공하는 아주 간단한 php웹쉘을 사용하였습니다.

※ 교육용 / 분석용 목적입니다.
-
2번에서 만든 웹쉘을 파일 업로드 칸에 업로드합니다. 코드를 확인해보아도 별다른 보안이 없었기에, php 파일이 그대로 업로드에 성공함을 확인할 수 있습니다.

(참고로 Untitled-2.php가 진짜 웹쉘 파일입니다.)
-
list에서 내가 업로드 한 웹쉘을 클릭하고, 접속해줍니다.

-
플래그는 /flag.txt에 있다고 하였기에, 커맨드 인젝션인 cat /falg.txt 를 사용하여 공격해줍니다.
(cat : 파일 내용을 출력해주는 커맨드입니다.)
-
성공적으로 플래그를 획득할 수 있었습니다.

배운점
- 웹쉘의 정의를 배울 수 있었고, 실제로 공격이 되는 과정을 직접 실습할 수 있었습니다.
- 아주 간단한 웹쉘 파일 만으로도 서버의 모든 정보를 다 확인할 수 있음을 배웠습니다. 보안을 하는 입장에서는 주의해야되는 공격기법임을 깨달았습니다.
- 파일을 업로드 하는 기능을 구현할 때, 꼭 웹쉘 파일이 업로드 되지 않도록 보안이 필요하다는점을 느꼈습니다.
Summary (English)
- The challenge was about exploiting a file upload vulnerability in a PHP-based service to access the server.
- A minimal PHP web shell was created and successfully uploaded, since the server lacked file type restrictions.
- The uploaded shell allowed command execution; using
cat /flag.txt, the flag was obtained.
- This demonstrated how easily a server can be compromised through file uploads if proper security checks (e.g., MIME type filtering, extension validation) are missing.
- Gained hands-on experience with web shells and learned the importance of securing file upload functionalities in web development.