php命令执行常用函数总结

造成的原因:

php命令执行漏洞主要是一些函数的参数过滤不严格所导致,

OS端常用的命令函数:

可以执行OS命令的函数一共有7个:

1
2
3
4
5
6
7
system(), 
exec(),
shell_exec(),
passthru(),
pcntl_exec(),
popen(),
proc_open()

Tips:

另外,反单引号(`)也可以执行命令,不过要调用shell_exec()函数

函数讲解:

oox1:

system(),exec(),shell_exec()和passthru()函数是可以直接传入命令并且会返回执行结果

1
<?php system('whoami');?>  //返回当前web服务器用户

00x2:

pcntl_exec是php的多进程处理扩展,在处理大量任务的情况下会使用

1
2
<?php pcntl_exec("/bin/bash",array($_POST["cmd"])); ?>
用的不多

00x3:

popen()和proc_open()函数不会直接返回执行结果,而是返回一个文件指针

1
<?php popen('whoami >>D:/2.txt','r'); ?>  //两个参数,第二个参数是指针文件的连接模式,有r和w模式

00x4:

反单引号(`)执行命令需要调用shell_exec()函数

1
<?php echo `whoami`;?> //返回当前用户

防命令执行的注入函数:

00x1:

escapeshellcmd()函数是过滤的整条命令

1
<?php eche(escapeshellcmd($_GET['a']));?>

请求1.php?a=whoami’, 在windows下返回whoami^’,在linux下返回whoami’

00x2:

escapeshellarg()函数则是过滤参数

1
<?php echo escapeshellarg('a"');?>   //会见双引号替换成空格,输出为"a "

常见的绕过disable-fucation:

1
2
3
4
5
6
7
8
"exec",  "shell_exec",  "system",  "passthru",  "proc_open",  "show_source",
"phpinfo", "popen", "dl", "eval", "proc_terminate", "touch",
"escapeshellcmd", "escapeshellarg", "assert", "substr_replace",
"call_user_func_array", "call_user_func", "array_filter",
"array_walk", "array_map", "registregister_shutdown_function",
"register_tick_function", "filter_var", "filter_var_array",
"uasort", "uksort", "array_reduce","array_walk",
"array_walk_recursive", "pcntl_exec","fopen", "fwrite","file_put_contents"