<?php : 코드의 시작을 나타내는 태그
?> : 코드의 끝을 나타내는 태그
# : 주석
변수 선언
$username = “abcdef”;
$num = 1;
$username = $_GET['username'];
$username = $_POST['username'];
eval 함수: 인자로 들어오는 문자열을 PHP 코드로써 간주해서 실행함
require 함수: 코드내에 특정 파일을 포함시켜서 평가함
include 함수: 코드 내에 특정 파일을 포함시켜서 평가함(파일을 읽어서 평가)
readfile 함수: 인자로 들어온 파일을 읽어서 출력
system 함수: 인자로 들어온 문자열을 명령어로 인식해서 실행
escapeshellcmd 함수: 인자로 들어온 문자열에 있는 세미콜론(;)을 필터링
preg_match 함수: 첫번째 인자로 들어온 문자열이 두번째 인자로 들어온 문자열 안에 포함되어 있는지를 검사함
fopen 함수: 파일을 여는데 사용됨
fwrite 함수: 파일에 내용을 쓰는데 사용됨
fclose 함수: 파일을 닫는데 사용
PHP 실습 파일
#!/usr/bin/php-cgi
<?php
print "<form method=\"get\" action=\"process_advertisement.php\">";
print "<p>\n Please leave your uername for on-line store. </p>\n";
print "<p>\n We will select five users and give gift-cards to them. </p>\n";
print "<p>\n Thank you !!! </p>\n";
print "<p>Username: <input type=\"text\" name=\"username\" /></p>\n";
print "<p><input type=\"submit\" value=\"Apply \" /></p>\n";
print "</form>";
?>
#!/usr/bin/php-cgi
<?php
$username = $_GET['username'];
$comments = "Really Bad Site";
echo "Thank you. we have successfully received your username for online store.\n";
echo "We will contact you later.\n";
echo "Please click Exit button.\n";
?>
Local File Read
- readfile 함수를 이용해서 local 파일을 읽음
- LocalFileRead.php와 process_local_file_read.php를 작성해야 함
- LocalFileRead.php: Form을 사용해서 사용자가 local 파일명을 입력할 수 있도록 구현함. Form에서 메소드는 GET으로, action은 process_local_file_read.php 로 설정함
- process_local_file_read.php : GET 요청을 통해 들어온 파일명에 대해 readfile 함수를 적용해서 입력된 파일을 읽음
- 위에서 구현한 php 파일들을 웹사이트에서 액세스 하기 위해서, 다음의 URL 정보를 브라우저에 입력하고 웹사이트로 이동함
LocalFileRead.php
#!/usr/bin/php-cgi
<?php
print "<form method=\"get\" action=\"2.php\">";
print "<p>\n Please enter local file name </p>\n";
print "<p>Filename: <input type=\"text\" name=\"filename\" /></p>\n";
print "<p><input type=\"submit\" value=\"Apply \" /></p>\n";
print "</form>";
?>
process_local_file_read.php
#!/usr/bin/php-cgi
<?php
$name = $_GET['filename'];
readfile($filename);
echo "Thank you. we have successfully received your filename for on-line store.\n";
echo "We will contact you later.\n";
echo "Please click Exit button.\n";
?>
- passwd.txt와 hosts.txt 파일 내용들이 화면에 출력되는 것을 막기 위해, process_local_file_read.php 에 아래의 필터링 기능을 구현함
- “passwd” 문자열과 “hosts” 문자열이 포함된 블랙리스트를 array로 선언
- 사용자가 입력한 파일명에 블랙리스트 내용이 있으면 해당 파일에 대한 readfile 함수 수행을 차단함 (preg_match 함수를 이용함)
- passwd.txt와 hosts.txt 파일 내용 정보들이 화면에 출력되지 않는지를 확인함
process_local_file_read.php
Remote Command Execution 실습
- system 함수를 이용해서 명령어를 실행시킴
- RemoteCommandExecution.php와 process_remote_command_execution.php를 작성해야 함
- RemoteCommandExecution.php: Form을 사용해서 사용자가 명령어를 입력할 수 있도록 구현함. Form에서 메소드는 GET으로, action은 process_remote_command_execution.php 로 설정함
- process_remote_command_execution.php: GET 요청을 통해 들어온 명령어에 대해 system 함수를 적용해서 실행시킴
- 위에서 구현한 php 파일들을 웹사이트에서 액세스 하기 위해서, 다음의 URL 정보를 브라우저에 입력하고 웹사이트로 이동함
- 웹 사이트에서 명령어로 md test1 을 입력한 후에, test1 폴더가 생성되는지 확인함
- 웹 사이트에서 명령어로 md test2&rd test1 을 입력한 후에, test2 폴더가 생성되고, test1 폴더가 삭제되었는지 확인함
- process_remote_command_execution.php에서 escapeshellcmd 함수를 이용해서 세미콜론 (;)과 &을 필터링 하는 부분을 구현함
- 다시 수행했을 때 test1 폴더가 다시 생성되는지 확인함. 웹사이트에서 md test2 명령어를 입력한 후에, test2 폴더가 생성되는지 확인함
- 웹 사이트에서 명령어로 rd test2;&dir 을 입력한 후에 발생되는 결과를 확인함
RemoteCommandExecution.php
process_remote_command_execution.php
$commandd = escapeshellcmd($_GET[command]);
system($command);
Remote Code Execution 실습
- dfsfs
- eval 함수를 이용해서 코드를 실행
- RemoteCodeExecution.php: Form을 사용해서 사용자가 코드를 입력할 수 있도록 구현함. Form에서 메소드는 GET으로, action은 process_ remote_code_execution.php 로 설정
- process_remote_code_execution.php : GET 요청을 통해 들어온 코드에 대해 eval 함수를 적용해서 실행시킴
- 위에서 구현한 php 파일들을 웹사이트에서 액세스 하기 위해서, 다음의 URL 정보를 브라우저에 입력하고 웹사이트로 이동함
- 웹 사이트에서 코드로 phpinfo(); 를 입력한 후에, php 관련 정보들이 화면에 출력되는지 확인함
- php 관련 정보들이 화면에 출력되는 것을 막기 위해서, 필터링 기능을 구현함
- ";" 문자열이 포함된 블랙리스트를 array로 선언
- 사용자가 입력한 콛에 블랙리스트 내용이 있으면 해당 코드에 대한 eval 함수 수행을 차단함 (preg_match)
- php 관련 정보가 화면에 출력되지 않는지를 확인함
RemoteCodeExecution.php
process_remote_code_execution.php
'보안 > 웹' 카테고리의 다른 글
[RAON CTF] XSS (Cross-site scripting) (0) | 2023.06.08 |
---|---|
[RAON CTF] Protocol (0) | 2023.06.08 |
20230508 (0) | 2023.05.08 |
WebGoat 문제 풀이 (기초) (0) | 2023.04.17 |
5. SQL Injection 공격 (0) | 2023.04.10 |