一、命令执行漏洞

配上链接命令执行&代码执行漏洞

成因:一般是服务器没对用户提交的参数进行严格的过滤,这个参数要带入执行系统命令的函数中。

常见的有

(1) system(),

该函数会把执行结果输出,并把输出结果的最后一行作为字符串返回,如果执行失败则返回false

(2) passthru(),

此函数只调用命令,并把运行结果原样地直接输出,该函数没有返回值。

(3) exec()

不输出结果,返回执行结果的最后一行

(4) shell_exec()

不输出结果,返回执行结果;一般和echo 一起使用。

二、代码执行漏洞

(1)、常见的有eval() assert()

eval()里的参数是php代码,可以是多条代码,但是必须是没错的,需要分号结尾,但是在实战中他会把;号过滤掉,可以用?>来结束语句,这时就只能执行一句了。

assert ( mixed $assertion [, string $description ] ) 如果assertion是字符串,它将会被 assert() 当做 PHP 代码来执行,如果 assertion 失败了,选项 description 将会包括在失败信息里。

(2)、回调函数

call_user_func()

call_user_func_array()

array_map()

这三个函数的作用是调用其他函数。

mixed call_user_func ( callable $callback [, mixed $parameter [, mixed $… ]] )

第一个参数是要回调的函数,函数名。第二个是要传入的参数。

mixed call_user_func_array() 和上一个不同的是,第二个参数是以数组的形式

array array_map ( callable $callback , array $array1 [, array $… ] )

callback:要回调的函数,array1:数组,遍历运行 callback 函数

(3) 、preg_replace()函数

mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit])

此函数可以用来执行一个正则表达式的搜索和替换。

$pattern: 正则表达式匹配的内容

$replacement: 用于替换的字符串或字符串数组。

$subject: 要搜索替换的目标字符串或字符串数组。

当$pattern存在 /e 模式修正符,允许代码执行