PHP를 이용한 Web Shell 준비
PHP를 이용해서 Web Shell을 로컬환경에서 제작하기 위해서는 XAMPP나 APM_setup 같은 패키지를 이용하는 것이 매우 간단하고 효율적이다.
- XAMPP 설치
XAMPP 같은 경우는 공식 홈페이지에서 설치가 가능하다. 운영체제에 맞는 버전을 다운로드해주면 된다.
XAMPP 공식 홈페이지 - https://www.apachefriends.org/
2. APM_setup 7
APM_setup7 버전같은 경우는 기존에 제공해 주던 설치파일을 다운로드할 곳이 존재하지 않기 때문에 아래 파일을 받아 설치해 주면 된다.
https://drive.google.com/file/d/1L4v9y15BupAHeQNRKG5bpy7qlmRD7mBW/view?usp=drive_link
APM_setup을 이용한 PHP 구축 준비
APM_setup7을 설치하고 APMSETUP Monitor를 통해서 Apache와 MySQL이 정상적으로 동작되고 있는지 확인해야한다.
바탕화면에 있는 경우 APMSETUP Monitor를 실행시켜 주면 된다.
APM_setup을 설치한 폴더에서 APM_SETUP/server/Apache/bin 파일로 들어가면 ApacheMonitor라는 프로그램이 존재한다. 해당 프로그랭을 실행시켜주면 아파치 서버 Start, Stop, Restart, 등 다양한 기능을 사용할 수 있다.
아파치 서버를 재시작할 때 유용하다.
APMsetup을 설치한 폴더에서 APM_SETUP/htdocs를 들어가서 Index를 제외하고 파일을 삭제시켜주면 된다.
우리가 만들 로컬 웹 페이지는 해당 폴더에서 동작하게 된다. 정상적으로 APM_setup이 동작한다면
인터넷 브라우저에 127.0.0.1을 치고 들어가면 다음과 같이 동작하게 된다.
웹 페이지에서 파일 업로드 제작하기
준비과정
- APM_setup/htdocs 폴더에 example_upload 폴더 생성
- example_upload 폴더에 upload 폴더 생성 ( 웹에서 파일을 업로드하면 upload로 들어오게 된다.)
- Visual Studio code를 통해 폴더열기 기능을 통해 APM_setup/htdocs을 열기
- index.php, upload.php, upload_test.php 파일 생성
아래는 example_upload파일의 index.php 코드이다.
<?php
header("Content-Type: text/html; charset=UTF-8");
?>
<form action="upload.php" method="POST" enctype="multipart/form-data">
<input type="file" name="userfile">
<input type="submit" value="UPLOAD">
</form>
아래는 웹 페이지에서 파일 업로드를 구현한 upload.php코드이다.
<?php
header("Content-Type: text/html; charset=UTF-8");
# 파일 핸들링
if(empty($_FILES["userfile"]["name"])) {
echo "<script>alert('파일을 업로드 하세요!.');history.back(-1);</script>";
exit();
}
#경로지정
$path = "./upload/";
$filename = $_FILES["userfile"]["name"];
#move_upload_file 임시업로드 파일을 지정된 경로에 넣는것
if(!move_uploaded_file($_FILES["userfile"]["tmp_name"], $path.$filename)) {
echo "<script>alert('파일 업로드에 실패했습니다.!.'); history.back(-1);</script>";
exit();
#T->F F->T
}
?>
<li>업로드 성공: <?=$path.$filename?></li>
아래는 upload_test.php의 코드이다. upload_test.php 코드는 파일을 업로드했을 경우 이름, 타입, 임시파일, 업로드된 파일 경로, 에러코드 등 살펴볼 수 있다
<?php
print_r($_FILES[userfile])
?>
해당 코드를 사용해기 위해서는 index.php을 다음과 같이 수정해야 한다.
<form action="upload_test.php" method="POST" enctype="multipart/form-data">
<input type="file" name="userfile">
<input type="submit" value="UPLOAD">
</form>
그럼 다음과 같은 결괏값을 받을 수 있다.
'CERT > Web' 카테고리의 다른 글
[Web] PHP기반 WebShell 인증기능 추가 (part2) (0) | 2024.09.23 |
---|---|
[Web] PHP기반 간단한 명령어 실행 WebShell 제작 (part1) (0) | 2024.09.23 |
[Web] GET&POST 방식 정의 및 차이점 (0) | 2024.09.17 |
[웹 취약점] 웹 셸(Web shell) 정의 및 종류 (1) | 2024.09.16 |
[웹 취약점] 파일 업로드 및 다운로드 취약점 개념 (1) | 2024.09.16 |