10.1 命令执行的原理
用户的输入作为 系统命令 的参数拼接到命令行中,应用在调用这些函数执行系统命令的时候,又没有过滤用户的 输入的情况下, 就会造成命令执行漏洞。
10.2 命令执行的危害
10.2.1 继承Web服务器程序的权限,去执行系统命令或读写文件
10.2.2 反弹shell
10.2.3 控制整个网站,甚至控制整个服务器
10.3 漏洞产生的原因
10.3.1 没有对用户输入进行过滤或过滤不严
10.3.2 系统漏洞造成的命令执行
10.4 相关函数
system() passthru() exec() shell_exec() popen() proc_open() `(反引号) ob_start()
10.5 防御
my.ini配置文件修改禁用命令执行
disable_functions
11.1 什么是代码执行
应用程序对传入命令的参数过滤不严导致入侵系统,造成严重破坏的高危漏洞。
11.2. 危害
执行任意代码。
11.3 相关函数
①(),assert(),preg_replace(),create_function(),array_map(),call_user_func()…动态函数赋值
11.4 防御
11.4.1 使用addslashes()函数将参数转译,或使用黑白名单校验
11.4.2 禁用或减少使用执行代码的函数
11.4.3 限制Web用户的权限
文件包含
12.1 原理
在引入文件时,包含的文件名用户可控,由于传入的文件名没有经过合理的校验,或者校验被绕过。
12.2 相关函数
include(),include_once() ,require(),require_once()
12.3 require()与include()的区别
require()执行如果发生错误,函数会输出错误信息,并终止脚本的运行
12.4 文件包含分为 本地文件包含 以及 远程文件包含
本地文件包含: 只能包含当前服务器上存储的文件
远程文件包含 : allow_url_fopen allow_url_include 均为On
12.5 作用
a) 上传文件配合文件包含getshell
b) 包含日志文件getshell
c) 读取源码文件
d) 使用协议 执行php代码
12.6 不允许使用http时
1. php://input协议 该协议是读取post请求包中,请求体的数据
2. file:// 协议 访问本地文件系统,跟绝对路径
3. zip:// (PHP的版本> =5.3.0)
4. php://filter协议 将文件中的数据进行base64加密后在输出
5. data:text/plain
6. phar://
12.7 危害
1、敏感信息泄露
2、获取Webshell
3、任意命令执行
12.8 防御
1. 设置白名单
2. 过滤危险字符
3. 设置文件执行目录(open_basedir选项可以设置用户需要执行的文件目录)
4. 关闭危险配置 (allow_url_fopen allow_url_include)