代码执行漏洞指的是可以执行PHP脚本代码,而命令执行漏洞指的是可以执行系统命令或应用指令(如cmd命令或bash命令)的漏洞
php命令执行漏洞主要是一些函数的参数过滤不严格所导致,可以执行OS命令的函数一共有7个:system(), exec(), shell_exec(), passthru(), pcntl_exec(), popen(), proc_open()
另外,反单引号(`)也可以执行命令,不过要调用shell_exec()函数
1.system(),exec(),shell_exec()和passthru()函数是可以直接传入命令并且会返回执行结果
payload: <?php system('whoami');?> //返回当前web服务器用户
2.pcntl是php的多进程处理扩展,在处理大量任务的情况下会使用
void pcntl_exec(string $path, [,array $args [, array $envs]])
3.popen()和proc_open()函数不会直接返回执行结果,而是返回一个文件指针
payload: <?php popen('whoami >>D:/2.txt','r'); ?> //两个参数,第二个参数是指针文件的连接模式,有r和w模式
4.反单引号(`)执行命令需要调用shell_exec()函数
payload: <?php echo `whoami`;?> //返回当前用户
命令防注入函数:
1.escapeshellcmd()函数是过滤的整条命令
payload:
<?php eche(escapeshellcmd($_GET['a']));?>
请求1.php?a=whoami', 在windows下返回whoami^',在linux下返回whoami\'
2.escapeshellarg()函数则是过滤参数
payload:
<?php echo escapeshellarg('a"');?> //会见双引号替换成空格,输出为"a "