命令执行
一、命令执行漏洞
配上链接命令执行&代码执行漏洞
成因:一般是服务器没对用户提交的参数进行严格的过滤,这个参数要带入执行系统命令的函数中。
常见的有
(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
模式修正符,允许代码执行