目录
命令注入简介
命令注入漏洞和SQL注入、XSS漏洞很相似,也是由于开发人员考虑不周造成的,在使用web应用程序执行系统命令的时候对用户输入的字符未进行过滤或过滤不严格导致的,常发生在具有执行系统命令的web应用中,如内容管理系统(CMS)等。
命令注入原理
本文以DVWA中的Command Injection为例,查看Command Injection的源代码,如图:
后台代码并未对用户输入的参数ip的值进行过滤就直接与ping命令进行拼接并执行 ,因此我们可以使用常见的命令拼接字符对命令进行拼接,如使用“&”,“|”,“&&”,“||”等,linux系统下还可以使用“;”,“``”。
- 对于shell1 & shell2,既执行shell1的命令也执行shell2的命令;
- 对于shell1 && shell2,在shell1执行成功的情况下执行shell2,shell1执行失败就不会执行shell2,和逻辑与一样;
- 对于shell1 | shell2,“|”为管道符,它将shell1执行的结果作为shell2的输入,因此无论shell1执行结果如何,都会执行shell2;
- 对于shell1 || shell2,在shell1执行失败的情况下执行shell2,shell1执行成功则不会执行shell2,和逻辑或一样;
- 对于shell1;shell2,在Linux系统下会将shell1和shell2都执行;
- 对于shell1 `shell2`,shell2的执行结果会在shell1的报错信息中显示。
漏洞利用
本文中DVWA安装在windows7系统下,输入1 | dir,提交之后如图:
然后输入127.0.0.1 && net user,提交后如图:
同理可使用“&”和“||”进行命令注入漏洞的利用。如果该web应用具有较高的权限,可以利用该漏洞建立新账户,使用1 | whoami查看系统权限:
发现是SYSTEM权限(系统的最高权限),然后使用1 | net user /add hacker 123456创建一个名为hacker的账户,密码为123456,执行完之后使用1 | net user查看,如图:
然后可以使用1 | net localgroup Administrators /add hacker,将hacker账户添加到管理员用户组。然后可以使用1 | net start termservice开启远程桌面服务,如图:
然后就可以使用hacker账户远程登录系统了,如图:
设置安全等级为Medium,查看源代码,如图:
后台代码将用户输入的字符串中的“&&”和“;”替换为了空字符,但是我们仍然可以使用“&”,“|”,“||”进行注入命令,如使用1 | whoami,如图:
设置安全等级为High,查看源代码如图:
后台代码将“&”,“;”,“| ”(符号后有空格),“_”,“$”,“(”,“)”,“`”,“||”替换为空字符,但未将“|”替换为空字符,因此可以使用“|”进行命令注入,使用1 |dir,如图:
查看安全等级为Impossible级别的源代码,如图:
后台代码使用stripslashes函数删除用户输入的字符串中的反斜杠,然后使用explode函数将字符串按“.”分割为数组,接着使用is_numeric函数判断数组是否为数字。
漏洞防范
命令注入漏洞是由于考虑不周,过滤不严格导致的,因此只要过滤的够严格就可以防范该漏洞,此外还可以设置命令选项,只允许执行几个常用的命令,除此之外的命令都不允许执行,也可以使用安全工具进行防范,如使用WAF,IDS,IPS等进行防御。
总结
近年来命令注入漏洞出现的较少,因此本文仅以DVWA为例讲解了命令注入漏洞的形成原理,漏洞的利用方法以及如何防范该漏洞发生,帮助大家学习命令注入漏洞。