본문 바로가기
보안/웹

PHP 함수 정리

by ByteGuard 2023. 4. 23.

 

 

 


<?php : 코드의 시작을 나타내는 태그

?> : 코드의 끝을 나타내는 태그

# : 주석

 

 

변수 선언

$username = “abcdef”;

$num = 1;

 

GET 또는 POST 요청에서 보낸 값을 변수값으로 설정

$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