PHP를 이용한 Web Shell 준비
PHP를 이용해서 Web Shell을 로컬환경에서 제작하기 위해서는 XAMPP나 APM_setup 같은 패키지를 이용하는 것이 매우 간단하고 효율적이다.
- XAMPP 설치
XAMPP 같은 경우는 공식 홈페이지에서 설치가 가능하다. 운영체제에 맞는 버전을 다운로드해주면 된다.
XAMPP 공식 홈페이지 - https://www.apachefriends.org/
XAMPP Installers and Downloads for Apache Friends
What is XAMPP? XAMPP is the most popular PHP development environment XAMPP is a completely free, easy to install Apache distribution containing MariaDB, PHP, and Perl. The XAMPP open source package has been set up to be incredibly easy to install and to us
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 |