이 글에서는 PHP 웹사이트에서 흔히 볼 수 있는 공격 방법 중 명령어 공격을 주로 소개합니다. 명령 주입은 해커가 HTML 코드를 입력 메커니즘(예: 효과적인 유효성 검사 제한이 없는 양식 필드)에 입력하여 동적으로 생성된 웹 페이지 콘텐츠를 변경하는 공격 방법을 말합니다. 시스템 명령을 사용하는 것은 위험한 작업입니다. 특히 원격 데이터를 사용하여 실행할 명령을 구성하려는 경우 더욱 그렇습니다. 오염된 데이터를 사용하면 명령어 주입 취약점이 발생한다. ㅋㅋㅋ 함수 프로토타입
string system(string command, int &return_var)
command 실행할 명령return_var은 command 실행 후 상태 값을 저장합니다
string exec(string command, array &output, int &return_var )
명령 실행할 명령출력 명령을 실행하여 문자열 출력의 각 줄을 가져옵니다.
return_var 명령 실행 후 상태 값을 저장합니다void passthru (문자열 명령, int &return_var)
실행할 명령어 Command Return_var는 명령어 실행 후 상태값을 저장합니다string shell_exec(문자열 명령어)
명령어 실행할 명령어漏洞实例
例1:
//ex1.php $dir = $_GET["dir"]; if (isset($dir)) { echo ""; system("ls -al ".$dir); echo ""; } ?>
我们提交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注入一般发生在攻击者能控制输入的字符串的时候
//ex2.php $var = "var"; if (isset($_GET["arg"])) { $arg = $_GET["arg"]; eval("\$var = $arg;"); echo "\$var =".$var; } ?>
当我们提交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을 사용하여 실행 파일의 경로를 지정하세요. 사용할 명령을 이 경로에 미리 넣어두시면 됩니다
safe_mode = On
safe_mode_exec_dir = /usr/local/php /bin/
위 내용은 PHP 웹사이트 공격방법 상세설명 - 명령어 인젝션 공격의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!