安全矩阵

 找回密码
 立即注册
搜索
查看: 3768|回复: 0

命令执行漏洞浅析

[复制链接]

114

主题

158

帖子

640

积分

高级会员

Rank: 4

积分
640
发表于 2020-8-23 19:36:57 | 显示全部楼层 |阅读模式
命令执行漏洞浅析
来自于公众号:计算机与网络安全
侵删

一次性付费进群,长期免费索取教程,没有付费教程。
进微信群回复公众号:微信群;QQ群:460500587



微信公众号:计算机与网络安全
ID:Computer-network

命令执行(Command Execution)漏洞即黑客可以直接在Web应用中执行系统命令,从而获取敏感信息或者拿下shell权限。造成的原因可能是Web服务器对用户输入命令安全检测不足,导致恶意代码被执行。常见的命令执行漏洞发生在各种Web组件,包括Web容器、Web框架、CMS软件、安全组件等。

应用程序有时需要调用一些执行系统命令的函数,如在PHP中,使用system、exec、shell_exec、passthru、popen、proc_popen等函数可以执行系统命令。当黑客能控制这些函数中的参数时,就可以将恶意的系统命令拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞。

1、命令执行漏洞攻击

命令执行攻击的测试地址:http://127.0.0.1/1.php?ip=127.0.0.1

页面1.php提供了ping的功能,当给参数IP输入127.0.0.1时,程序会执行ping 127.0.0.1,然后将ping的结果返回到页面上,如图1所示。
图1  执行ping 127.0.0.1

而如果将参数IP设置为127.0.0.1|dir,然后再次访问,从返回结果可以看到,程序直接将目录结构返回到页面上了,这里就利用了管道符“|”让系统执行了命令dir,如图2所示。
图2  执行ping 127.0.0.1 |dir

下面展示了常用的管道符。

Windows系例支持的管道符如下所示

“|”:直接执行后面的语句。例如:ping 127.0.0.1|whoami。
“||”:如果前面执行的语句执行出错,则执行后面的语句,前面的语句只能为假。例如:ping 2||whoami。
“&”:如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。例如:ping 127.0.0.1&whoami。
“&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句只能为真。例如:ping 127.0.0.1&&whoami。

Linux系统支持的管道符如下所示。

“;”:执行完前面的语句再执行后面的。例如:ping 127.0.0.1;whoami。
“|”:显示后面语句的执行结果。例如:ping 127.0.0.1|whoami。
“||”:当前面的语句执行出错时,执行后面的语句。例如:ping 1||whoami。
“&”:如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。例如:ping 127.0.0.1&whoami。
“&&”:如果前面的语句为假则直接出错,也不执行后面的,前面的语句只能为真。例如:ping 127.0.0.1&&whoami。

2、命令执行漏洞代码分析

服务端处理ping的代码如下所示,程序获取GET参数IP,然后拼接到system()函数中,利用system()函数执行ping的功能,但是此处没有对参数IP做过滤和检测,导致可以利用管道符执行其他的系统命令,代码如下所示。

3、命令执行漏洞修复建议

针对命令执行漏洞的修复,给出以下这几点建议。

● 尽量不要使用命令执行函数。
● 客户端提交的变量在进入执行命令函数前要做好过滤和检测。
● 在使用动态函数之前,确保使用的函数是指定的函数之一。
● 对PHP语言来说,不能完全控制的危险函数最好不要使用。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-28 07:31 , Processed in 0.013428 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表