命令执行漏洞

 

什么是命令执行漏洞

命令执行漏洞是指攻击者可以随意执行系统命令。

命令执行漏洞的原理

脚本语言有点事简洁,方便,但也伴随一些问题,比如运行速度慢,无法接触系统底层,如果我们开发的应用(特别是企业级的一些应用)需要除去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

 

 

接下来我们试试能不能直接执行其它

 

既然不能直接执行,那我们换个方式试试吧

 

 

在这里我们用了管道符,就可以输出我们想要的东西了

 

这就是一个简单的命令执行漏洞的利用了。

 

 

 

 

posted @ 2019-11-14 14:35  情殇王子  阅读(729)  评论(0编辑  收藏  举报