web漏洞之命令执行  一、概述 二、产生原理 三、防御方法 四、危害 五、php常见危险函数

1.1何为命令执行

  攻击者通过web应用可以执行系统命令,从而获得敏感信息,进而控制服务器攻击内网。

1.2产生条件

       1.应用调用执行命令的函数

       2.将用户输入作为系统命令的参数拼接到命令中

  3.没有对用户输入的过滤或者过滤不严格

1.2常见命令

1.2.1 Windows

dir

列出目录

Ipconfig

查看ip

arp -a

查看路由表

Calc

打开计算器

Regedit

打开注册表

netstat -ano

查看服务端口信息

1.2.2 linux

Cat /etc/passwd

查看password文件内容

Id

查看当前用户的id号(Windows中500表示admin,501表示游客,自定义用户100以上)

Cat /etc/group

查看用户组文件内容

Pwd

显示当前目录

Uname -a

查看当前系统版本

Natstat -pantu

查看当前服务的端口信息

Netstat -nr

查看网关和路由

 

1.3常见命令拼接符

格式

内容

A;B

先执行A,再执行B

A&B

简单拼接,A B之间无制约关系

A|B

显示B的执行结果

A&&B

A执行成功,然后才会执行B

A||B

A执行失败,然后才会执行B

 

 

二、产生原理

  应用有时需要调用一些执行系统命令的函数,如PHP中的system、exec、shell_exec、passthru、popen、proc_popen等,当用户能控制这些函数中的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击。

三、防御方法

  1.尽量少用执行命令的函数或者直接禁用

       2.参数值尽量使用引号包括,并在拼接前调用addslashes函数进行转义

       3.在使用动态函数之前,确保使用的函数是指定的函数之一

       4.在进入执行命令的函数方法之前,对参数进行过滤,对敏感字符进行转义

  5.对于可控点是程序参数的情况下,使用escapeshellcmd函数进行过滤,对于可控点是程序参数值的情况下,使用  escapeshellarg函数进行过滤

四、危害

       1.继承Web服务程序的权限去执行系统命令或读写文件。

       2.反弹shell

       3.控制整个网站甚至控制服务器。

  4.进一步内网渗透

五、php常见危险函数

       system:成功则返回命令输出的最后一行,失败则返回FALSE。

       exec:命令执行结果的最后一行内容。

       shell_exec:命令执行的输出。如果执行过程中发生错误或者进程不产生输出,则返回NULL。

       passthru:执行外部程序并且显示原始输出。

  eval:将输入的字符串参数当做PHP程序代码来执行