명령어 주입 공격
PHP에서는 다음 5가지 함수를 사용하여 외부 애플리케이션이나 함수를 실행할 수 있습니다.
system, exec, passthru, shell_exec, "(shell_exec와 동일한 함수)
함수 프로토타입
string system(string command, int &return_var)
command 실행할 명령
return_var은 실행된 명령 실행 후 상태 값을 저장합니다.
string exec (string command, array &output, int &return_var)
command 실행할 명령
출력
명령을 실행하여 문자열 출력의 각 줄을 가져옵니다.return_var는 명령 실행 후 상태 값을 저장합니다.
void passthru(string command, int &return_var)
명령 실행할 명령
return_var은 상태 값을 저장합니다. 명령 실행 후
string shell_exec(문자열 명령)
명령 실행할 명령
취약점 인스턴스
예 1:
命令注入攻击 PHP中可以使用下列5个函数来执行外部的应用程序或函数 system、exec、passthru、shell_exec、“(与shell_exec功能相同) 函数原型 string system(string command, int &return_var) command 要执行的命令 return_var 存放执行命令的执行后的状态值 string exec (string command, array &output, int &return_var) command 要执行的命令 output 获得执行命令输出的每一行字符串 return_var 存放执行命令后的状态值 void passthru (string command, int &return_var) command 要执行的命令 return_var 存放执行命令后的状态值 string shell_exec (string command) command 要执行的命令 漏洞实例 例1:
http://www.sectop.com/ex1.php?dir=| cat /etc/passwd
제출 후 명령은 system("ls -al | cat /etc/ passwd");
eval 주입 공격
eval 함수는 입력 문자열 매개변수를 PHP 프로그램 코드로 실행합니다
함수 프로토타입:
mixed eval(string code_str) //eval 주입은 일반적으로 공격자가 입력 문자열을 제어할 수 있을 때 발생합니다.
http://www.sectop을 제출할 때. .com/ex2.php?arg=phpinfo();취약점 발생;
동적 함수
php
func A()
{
dosomething();
}
func B()
{
dosomething()
}
if (isset($_GET["func" ]) )
{
$myfunc = $_GET["func"]
echo $myfunc() }
?>
프로그래머의 원래 의도는 함수 A와 B를 동적으로 호출한 다음 http://www.sectop.com/ex.php?func=phpinfo 취약점 생성
방지 방법
을 제출하는 것입니다. 🎜>1. 외부 명령을 실행하지 마세요2. 외부 명령의 기능을 대체하려면 사용자 정의 함수나 함수 라이브러리를 사용하세요3. 명령 매개변수를 처리하려면 escapeshellarg 함수를 사용하세요4. safe_mode_exec_dir을 사용하여 실행 파일의 경로를 지정하세요. esacpeshellarg 함수는 매개변수 또는 명령의 끝을 유발하는 모든 문자(작은따옴표 "'", "'"로 대체, 이중)를 이스케이프합니다. 따옴표 """, 세미콜론 ";"을 ";"로 바꾸십시오.safe_mode_exec_dir을 사용하여 이 경로에 사용할 명령을 넣을 수 있습니다. advance safe_mode = Onsafe_mode_exec_dir = /usr/local/php/bin/ 위는 PHP 취약점(2) - 명령 주입 공격에 대한 전체 설명입니다. 더 많은 관련 내용을 보시려면 PHP 중국어 넷(www.php.cn)을 주목해주세요!