命令执行漏洞浅析
来自于公众号:计算机与网络安全 侵删
一次性付费进群,长期免费索取教程,没有付费教程。 进微信群回复公众号:微信群;QQ群:460500587
微信公众号:计算机与网络安全 ID:Computer-network
命令执行(Command Execution)漏洞即黑客可以直接在Web应用中执行系统命令,从而获取敏感信息或者拿下shell权限。造成的原因可能是Web服务器对用户输入命令安全检测不足,导致恶意代码被执行。常见的命令执行漏洞发生在各种Web组件,包括Web容器、Web框架、CMS软件、安全组件等。
应用程序有时需要调用一些执行系统命令的函数,如在PHP中,使用system、exec、shell_exec、passthru、popen、proc_popen等函数可以执行系统命令。当黑客能控制这些函数中的参数时,就可以将恶意的系统命令拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞。
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语言来说,不能完全控制的危险函数最好不要使用。
|