PHP中可以使用5种命令来执行外部应用程序或函数
system执行外部应用程序并显示输出结果
exec执行一个外部应用程序
passthru执行UNIX系统命令并显示原始的输出
shell_exec实行shell命令并返回输出的字符串
``与shell_exec命令函数功能相同
一、system函数
示例:
二、exec函数
三、passthru函数
void passthru(string cmd[,int &return_var])
cmd为要执行的UNIX命令
return_var存储系统命令返回值
注意:当UNIX系统命令输出是二进制的数据时候,需要用这个命令
四、shell_exec命令
string shell_exec(string cmd)
五、``运算符
此运算符与shell_exec有相同功能
$output=`dir c:`;
#1漏洞程序实例:
攻击手法:
使用URL:ex.php?dir=;cat /etc/passwd这个命令会显示/tec/passwd文件的内容
命令注入的方式:
`command`执行command
$(command)执行command
;command执行command并显示执行结果
|command执行command并显示执行结果
&&command执行command并显示执行结果
||command执行command并显示执行结果
/home/user/.bashrc覆盖.bashrc文件
< /home/user/.bashrc会将.bashrc文件当做输入
防范方法:
1、$dir=escapeshellarg($_GET["dir"]);//此函数作用:'被替换为/',"替换为/",;被替换为/;
2、将safe_mode设为On,使用safe_mode_exec_dir指定执行文件的路径
php.in
safe_mode=On
safe_mode_exec_dir=/user/excutable/php
#2漏洞程序实例:
使用eval函数(eval函数将字符串作为PHP源代码来执行)
攻击URL:ex.php?arg=system("dir c:")//显示c盘内容
#3漏洞程序实例:
可变变量攻击
攻击URL:ex.php?x=123
#4程序漏洞实例
攻击URL:ex.php?func=phpinfo//显示服务器信息
此类攻击防范方法:
1、检测使用者输入的字符串
2、将使用者输入的字符串进行编码处理
3、将web应用程序的输出字符串进行编码处理
4、预先指定可以提供给eval等函数的参数