命令执行漏洞
什么是命令执行漏洞
命令执行漏洞是指攻击者可以随意执行系统命令。
命令执行漏洞的原理
脚本语言有点事简洁,方便,但也伴随一些问题,比如运行速度慢,无法接触系统底层,如果我们开发的应用(特别是企业级的一些应用)需要除去web的特殊功能时,就需要调用一些外部程序。在应用需要去调用外部程序去处理的情况下,就会用到一些执行系统命令的函数。如php中的system,exec,shell_exec等,当用户可以控制命令执行的函数时,可以恶意注入系统命令到正常命令中,造成命令执行
命令执行漏洞的分类
代码过滤不严或无过滤
系统漏洞造成的命令执行
调用第三方组件
PHP命令执行函数
exec(): 执行一个外部程序,该函数可执行系统命令,命令执行结果的最后一行内容。
passthru() :执行外部程序并且显示原始输出
system(): 执行外部程序,并且显示输出,成功则返回命令输出的最后一行,失败则返回FALSE
shell_exec(): 通过shell环境执行命令,并且将完整的输出以字符串的方式返回命令执行的输出,如果执行过程中发生错误或者进程不产生输出,则返回NULL.
Java命令执行
structs2框架,Java的三大框架之一。
Linux特殊命令
1) >重定向输出符号。
2) >>重定向输出符号,但有追加的功能。
3) 2>错误重定向输出符号,覆盖原文件内容。
4) 2>>错误重定向输出符号,有文件内容追加的功能。重定向:I/O。Linux Shell 环境中支持输入输出重定向,用符号<和>来表示。0、1和2分别表示标准输入、标准输出和标准错误信息输出,可以用来指定需要重定向的标准输入或输出,比如 2>a.txt 表示将错误信息输出到文件a.txt中。
5) *匹配任意字符。
6) ?匹配任意一个字符。
7) |管道符号。解释:command1|command2,将command1的输出作为command2的输入,比如ls -al|less,表示将ls -al的输出作为less的输入,即将la -al的输出分页。管道命令只接受标准输入(standoutput)。
8) &后台运行符。
9) && 逻辑与符号。用法:命令1 && 命令2 表示如果命令1执行成功,继续执行命令2。
10) ||逻辑或符号。用法:命令1 | | 命令2 表示如果命令1执行成功,不执行命令2;但如果命令1执行失败才执行命令2。
实验测试
实验环境DVWA, Linux操作系统
安全级别LOW
接下来我们试试能不能直接执行其它
既然不能直接执行,那我们换个方式试试吧
在这里我们用了管道符,就可以输出我们想要的东西了
这就是一个简单的命令执行漏洞的利用了。