初探命令执行漏洞
2022-10-28 20:3:6 Author: 网安之道(查看原文) 阅读量:20 收藏

命令执行漏洞是值攻击者可以随意执行系统命令,它属于高危漏洞之一,也属于代码执行的范畴。命令执行漏洞不仅存在 B/S 架构中,还在 C/S 架构中也常常遇到。

应用有时需要调用一些执行系统命令的函数,如 PHP system execshell_execpassthruproc_popen等,当用户能控制这些函数中的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞。

命令执行漏洞的危害

·继承 web 服务程序的权限去执行系统命令或读写文件

·反弹 Shell

·控制整个网站甚至控制服务器

·进一步内网渗透

命令执行漏洞的原理

当应用需要调用一些外部程序去处理内容的情况下,就会用到一些执行系统命令的函数。如 PHP 中的 system execshell_exec 等,如果用户可以控制命令执行函数中的参数时,将可以注入恶意系统命令到正常的命令中, 造成命令执行漏洞。

在操作系统中,“&|||” 都可以作为命令连接符使用, 用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令,从而造成漏洞。

命令执行漏洞成因

·代码层过滤不严格

商业应用需要执行命令,商业应用的一些核心代码可能在二进制文件当中,在 web 应用中通过 system 函数调用。例如 system ("/bin/program --arg c194a9eg<!-- begin-inline-katexarg");

·系统漏洞造成命令注入

例如 bash 破壳漏洞(CVE-2014-6271),如果我们控制执行的 bash 的环境变量,就可以通过破壳漏洞来执行任意代码。

·第三方组件造成命令注入

Wordpress,可以选择ImageMagick 这个常用的 图片处理组件,处理用户上传图片时造成命令执行,如 JAVA Struts2/ElasticsearchGroovy 等。

命令执行漏洞常见函数

·System 函数的语法是: system (string $command [, int &end-inline-katex-->return_var ] )

o C 版本的system () 函数一样

o 本函数执行 command 参数所指定的命令,并且输出执行结果

o 命令执行后的返回值为输出值的最后一行

o 函数本身也会打印全部的输出值

·Exec 函数的语法为:exec (string $command [, array &$output [, int &c194a9eg<!-- begin-inline-katexreturn_var]] )

o 这个函数的作用是执行 command 参数所指定的命令

o 命令执行后的值为输出值的最后一行

o 函数本身不会打印任何内容

·Passthru 函数的语法为:passthru (string $command [, int &end-inline-katex-->return_var ] )

o exec () 函数类似

o passthru () 函数也是用来执行外部命令 command

o 当所执行的系统命令输出二进制数据, 并且需要直接传送到浏览器的时候, 需要用此函数来替代 exec () system () 函数。

·Shell_exec 函数的语法为: shell_exec (string $cmd)

o cmd 是要执行的命令

o String 是参数的数据类型,也就是字符串。

o 函数会在命令执行完成后将全部的输出值作为字符串输入返回值,本身并不打印任何信息。

o Shell_exec 函数的用法同反引号形同,注意是反引号(``)而不是普通单引号(’’)。

命令执行漏洞连接符

&: 顺序执行多条命令,而不管命令是否执行成功

&&:逻辑与,当用此连接符连接多个命令时,前面的命令执行成功,才会执行后面的命令, 前面的命令执行失败,后面的命令不会执行,与 || 正好相反

|: 显示后面命令的结果

||: 逻辑或,当用此连接符连接多个命令时,前面的命令执行成功,则后面的命令不会执行。前面的命令执行失败,后面的命令才会执行

命令执行漏洞防御

·不执行外部的应用程序或命令

尽量使用自定义函数或函数库实现外部应用程序或命令的功能。在 执行 systemeval 等命令执行功能的函数前,要先确定参数内容。

·使用 escapeshellarg 函数处理相关参数

Escapeshellarg 函数会将任何引起参数或命令结束的字符进行转义

·使用 safe_mode_exec_dir 执行可执行的文件路径

php.ini 文件中的safe_mode 设置为 On,然后将允许执行的文件放入一个目录中,并使用 safe_mode_exec_dir 指定这个可执行的文 件路径。


文章来源: http://mp.weixin.qq.com/s?__biz=MzIxMDI2ODM1OA==&mid=2651501822&idx=1&sn=2c47a98520e73f51a6b26adade910a90&chksm=8c992d57bbeea4415ea147313c928016a32f1c7f47589f9929eed5941760059b9f35523633a4#rd
如有侵权请联系:admin#unsafe.sh