输入/输出模块测试3-命令执行测试

命令执行测试

测试原理和方法

在应用需要调用一些外部程序去处理内容的情况下,就会用到一些执行系统命令的函 数。如PHP中的system、exec、shell_exec等,当用户可以控制命令执行函数中的参数时, 将可注入恶意系统命令到正常命令中,造成命令执行攻击。测试中如果没有对参数(如 cmd=、command、excute=等)进行过滤,就可以直接造成命令执行漏洞或配合绕过及命 令连接符(在操作系统中,“&、|、||、;”都可以作为命令连接符使用,用户通过浏览器 提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况 下就执行命令)等进行命令执行漏洞测试。

测试过程

攻击者发现疑似存在命令执行的漏洞链接,添加命令执行payload,确认漏洞,如图所示。
image.png

以某网络安全审计系统为例,由于未对register_key参数进行过滤可能存在命令执行漏 洞,抓包并对其进行测试,构造命令执行语句并执行成功,证明此参数未经严格过滤造成 命令执行漏洞,如图所示。

抓包并进行测试.png

漏洞成功执行.png

再以自己搭建的网站http://localhost/DVWA/ 为例。 在dvwa处提供了一个免费的ping命令,如图所示。

image.png

步骤一:我们ping一下自己的主机并抓包,如图所示。

抓取请求包.png

步骤二:由于ip接收一个参数并执行ping命令,如果接收的参数没有过滤就可以 用“&、|、||、;”构造语句,进行命令执行漏洞测试,成功执行系统命令,如图所示。

漏洞成功触发.png

修复建议

尽量少用执行命令的函数或者直接禁用,参数值尽量使用引号包括在使用动态函数之 前,确保使用的函数是指定的函数之一,在进入执行命令的函数/方法之前,对参数进行 过滤,对敏感字符进行转义。