1免责声明
本公众号提供的工具、教程、学习路线、精品文章均为原创或互联网收集,旨在提高网络安全技术水平为目的,只做技术研究,谨遵守国家相关法律法规,请勿用于违法用途,如果您对文章内容有疑问,可以尝试加入交流群讨论或留言私信,如有侵权请联系小编处理。
2内容速览
命令注入简介
命令注入漏洞和SQL注入、XSS漏洞很相似,也是由于开发人员考虑不周造成的,在使用web应用程序执行系统命令的时候对用户输入的字符未进行过滤或过滤不严格导致的,常发生在具有执行系统命令的web应用中,如内容管理系统(CMS)等。
命令注入是一种常见的漏洞形态。一旦存在命令注入漏洞,攻击者就可以在目标系统执行任意命令。说到这里,我们不得不提另外一个叫做远程代码执行(RCE)的漏洞。许多人总会把这两个漏洞混淆,其实它们是有本质的区别的。命令执行只是针对系统命令,而远程代码执行针对的是编程代码,两者互不能替换
命令注入原理
原理:web应用在调用这些函数执行系统命令的时候,在没有做好过滤用户输入的情况下,如果用户将自己的输入作为系统命令的参数拼接到命令行中,就会造成命令注入(命令执行)的漏洞。
危害:
- 继承web服务器程序权限,去执行系统命令
- 读写文件
- 反弹shell
- 控制整个网站及服务器
本文以DVWA中的Command Injection为例,查看Command Injection的源代码,如图:
后台代码并未对用户输入的参数ip的值进行过滤就直接与ping命令进行拼接并执行 ,因此我们可以使用常见的命令拼接字符对命令进行拼接,如使用“&”,“|”,“&&”,“||”等,linux系统下还可以使用“;”,“``”。
命令分隔符
说明
; | 分号在linux命令执行的时候,可以分隔多条命令 |
& | Windows顺序执行,Linux先执行后面的命令 |
&& | 与,前面的命令执行成功后才可以执行下面的命令 |
| | 管道符,前面的命令输出结果为后面的命令输入的内容 |
|| | 或,前面的命令执行失败后才会执行后面的命令 |
漏洞利用
本文中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函数判断数组是否为数字。
常见危险函数
system()
直接将结果输出到游览器,不需要使用 echo 或 return 来查看结果
exec()
不会输出结果,而是返回结果的最后一行
shell_exec()
函数实际上仅是反引号 (`) 操作符的变体,不输出结果,返回执行结果
passthru()
passthru直接将结果输出到浏览器,不需要使用 echo 或 return 来查看结果,不返回任何值,且其可以输出二进制,比如图像数据
popen()
popen(command, mode) 使用 command 参数打开进程文件指针。能够将字符串作为OS命令执行,但是该函数并不返回命令结果,也没有任何输出结果,而是返回一个文件指针。
command 必需。规定要执行的命令。
mode 必需。规定连接模式。
可能的值: r: 只读。 w: 只写(打开并清空已有文件或创建一个新文件) 例: ipconfig>>1.txt 执行ipconfig并写到1.txt中
漏洞防范
命令注入漏洞是由于考虑不周,过滤不严格导致的,因此只要过滤的够严格就可以防范该漏洞,此外还可以设置命令选项,只允许执行几个常用的命令,除此之外的命令都不允许执行,也可以使用安全工具进行防范,如使用WAF,IDS,IPS等进行防御。
总结
近年来命令注入漏洞出现的较少,因此本文仅以DVWA为例讲解了命令注入漏洞的形成原理,漏洞的利用方法以及如何防范该漏洞发生,帮助大家学习命令注入漏洞。