SCW图标
英雄背景无分隔线
博客

Les codeurs conquièrent la sécurité : série Share & Learn - OS Command Injection

Jaap Karan Singh
发布时间 2019年02月07日
最后更新于 2026年3月8日

只要应用程序允许用户向外壳输入信息,但不采取任何行动来验证输入的字符串是否有效,就会发生操作系统命令注入攻击。这使攻击者能够将命令直接投放到托管应用程序的操作系统中,而且是在为被攻击的应用程序设置的任何权限级别。  

操作系统命令注入攻击可以由入门级和不太熟练的黑客执行,这使得它们成为安全团队遇到的最常见的弱点之一。值得庆幸的是,有不少非常有效的方法来防止它们的成功。在这一集里,我们将学习。

       它们是如何工作的

       为什么它们如此危险

       你如何能把防御措施放在适当的位置来阻止他们。

攻击者如何使用操作系统命令注入?

攻击者为了发起操作系统命令注入攻击,必须做的第一件事是在应用程序中找到用户输入。用户填写的表格是潜在的好跳板。最聪明的攻击者还可以使用诸如cookies甚至HTTP头文件作为他们的启动点,这几乎是每个应用程序或网站都会使用的东西。

他们需要做的第二件事是弄清楚什么操作系统是应用程序的主机。鉴于只有少数几个选择,试错在这个阶段可以很好地发挥作用。大多数应用服务器要么是基于Windows的(Windows的味道通常并不重要),要么是某种类型的Linux盒子,或者可能是Unix。

在这一点上,黑客修改了输入,在看似无害的输入中注入了一个操作系统的命令。这可以欺骗主机操作系统,使其以应用程序的任何权限级别执行非预期的命令。

例如,以下命令可以被应用程序中的有效用户用来查看一个文件的内容,在这种情况下,就是每月一次的董事会会议的记录。

exec("cat " + filename)

在我们的例子中,这将执行以下命令并将会议记录返回给用户。

$ ./cat MeetingNotes.txt
7月份的会议上有三名执行委员会成员出席。会议讨论了新的预算项目,但没有采取任何行动或投票。

当攻击者在输入的末尾添加额外的命令时,就会发生这种情况,例如在Linux中用于列出目录内容的命令。在这种情况下,显示会议记录的原始命令仍然发生。但恶意用户也会被显示目录中的其他一切内容,以及他们可以在后续的操作系统命令注入攻击中使用哪些其他命令。他们输入

$ ./cat MeetingNotes.txt && ls

而得到的却是这个。

7月份的会议上有三名执行委员会成员出席。会议讨论了新的预算项目,但没有采取任何行动或投票。

MeetingNotes.txt
JuneMeetingNotes.txt
MayMeetingNotes.txt
format.c
misnull.c
notefault.c
trunc.c
writewhatwhere.c

正如你所看到的,在这个案例中,黑客不仅看到了目录的内容,而且还得到了一个他们可以使用的其他命令的菜单 " 他们现在知道他们可以在主机操作系统上执行的命令。

为什么操作系统命令注入攻击如此危险?

允许用户绕过目标应用程序的目的并使用它来运行操作系统命令是非常危险的。攻击者可以很容易地执行破坏性的行动,例如窃取机密数据或格式化整个服务器驱动器。攻击者可用的选择只受操作系统内允许的命令和他们使用这些命令的创造力的限制。

操作系统命令在与应用程序相同的权限级别上运行。以管理权限运行的应用程序意味着入侵它们的黑客可以运行每个操作系统命令。

操作系统命令注入的攻击模式是众所周知的,也是有记录的。一个易受攻击的应用程序和专业黑客一样容易受到脚本儿童的攻击。没有什么技能的攻击者可以尝试将操作系统命令剪切和粘贴到应用程序中,看看会发生什么。

针对操作系统的命令注入获得安全许可

有几个好的技术可以阻止操作系统的命令注入。第一步是以完成其功能所需的最少权限来运行应用程序。这并不能阻止攻击,但是如果真的发生了漏洞,损失就会降到最低。

大多数编程语言和框架为常见的操作系统方法提供了API调用,如列出目录内容、创建或读取硬盘上的文件。从你的环境中消除操作系统命令注入的一个完美方法是让所有应用程序使用这些API调用,而不是直接使用操作系统命令。

在无法做到这一点的情况下,在操作系统命令中使用用户输入之前,要对其进行验证。白名单可以用来确保只有一小部分可信的值可以被使用。从技术上讲,使用黑名单也可以做到这一点,但允许的命令可能少得多,所以白名单几乎总是更容易。不要忘记在你的白名单中包括有效的POST和GET参数,以及经常被忽视的用户输入载体,如cookies。

最后,如果没有可用的编程API,并且不能使用白名单,那么在操作系统命令中使用用户输入的任何特殊字符之前,使用消毒库来转义这些字符。

关于操作系统命令注入攻击的更多信息

要进一步阅读,你可以看一下OWASP关于操作系统命令注入攻击的文章。你也可以用Secure Code Warrior 平台的免费演示来测试你新发现的防御知识,该平台培训网络安全团队成为终极网络战士。要了解更多关于击败这个漏洞以及其他威胁的流氓画廊,请访问Secure Code Warrior 博客。

显示资源
显示资源

Les attaques par injection de commandes du système d'exploitation peuvent être effectuées par des pirates informatiques débutants et moins expérimentés, ce qui en fait l'une des faiblesses les plus courantes rencontrées par les équipes de sécurité. Heureusement, il existe de nombreux moyens très efficaces de les empêcher de réussir.

您想了解更多吗?

Jaap Karan Singh est un évangéliste du codage sécurisé, Chief Singh et cofondateur de Secure Code Warrior.

了解更多

Secure Code Warrior 在整个软件开发周期中保障代码安全,并营造将网络安全置于首位的企业文化。无论您是应用安全负责人、开发人员、信息安全主管,还是其他任何参与安全工作的人员,我们都能协助您的组织降低不安全代码带来的风险。

预约演示
分享到:
领英品牌社交x 标志
作者
Jaap Karan Singh
发布日期:2019年02月07日

Jaap Karan Singh est un évangéliste du codage sécurisé, Chief Singh et cofondateur de Secure Code Warrior.

分享到:
领英品牌社交x 标志

只要应用程序允许用户向外壳输入信息,但不采取任何行动来验证输入的字符串是否有效,就会发生操作系统命令注入攻击。这使攻击者能够将命令直接投放到托管应用程序的操作系统中,而且是在为被攻击的应用程序设置的任何权限级别。  

操作系统命令注入攻击可以由入门级和不太熟练的黑客执行,这使得它们成为安全团队遇到的最常见的弱点之一。值得庆幸的是,有不少非常有效的方法来防止它们的成功。在这一集里,我们将学习。

       它们是如何工作的

       为什么它们如此危险

       你如何能把防御措施放在适当的位置来阻止他们。

攻击者如何使用操作系统命令注入?

攻击者为了发起操作系统命令注入攻击,必须做的第一件事是在应用程序中找到用户输入。用户填写的表格是潜在的好跳板。最聪明的攻击者还可以使用诸如cookies甚至HTTP头文件作为他们的启动点,这几乎是每个应用程序或网站都会使用的东西。

他们需要做的第二件事是弄清楚什么操作系统是应用程序的主机。鉴于只有少数几个选择,试错在这个阶段可以很好地发挥作用。大多数应用服务器要么是基于Windows的(Windows的味道通常并不重要),要么是某种类型的Linux盒子,或者可能是Unix。

在这一点上,黑客修改了输入,在看似无害的输入中注入了一个操作系统的命令。这可以欺骗主机操作系统,使其以应用程序的任何权限级别执行非预期的命令。

例如,以下命令可以被应用程序中的有效用户用来查看一个文件的内容,在这种情况下,就是每月一次的董事会会议的记录。

exec("cat " + filename)

在我们的例子中,这将执行以下命令并将会议记录返回给用户。

$ ./cat MeetingNotes.txt
7月份的会议上有三名执行委员会成员出席。会议讨论了新的预算项目,但没有采取任何行动或投票。

当攻击者在输入的末尾添加额外的命令时,就会发生这种情况,例如在Linux中用于列出目录内容的命令。在这种情况下,显示会议记录的原始命令仍然发生。但恶意用户也会被显示目录中的其他一切内容,以及他们可以在后续的操作系统命令注入攻击中使用哪些其他命令。他们输入

$ ./cat MeetingNotes.txt && ls

而得到的却是这个。

7月份的会议上有三名执行委员会成员出席。会议讨论了新的预算项目,但没有采取任何行动或投票。

MeetingNotes.txt
JuneMeetingNotes.txt
MayMeetingNotes.txt
format.c
misnull.c
notefault.c
trunc.c
writewhatwhere.c

正如你所看到的,在这个案例中,黑客不仅看到了目录的内容,而且还得到了一个他们可以使用的其他命令的菜单 " 他们现在知道他们可以在主机操作系统上执行的命令。

为什么操作系统命令注入攻击如此危险?

允许用户绕过目标应用程序的目的并使用它来运行操作系统命令是非常危险的。攻击者可以很容易地执行破坏性的行动,例如窃取机密数据或格式化整个服务器驱动器。攻击者可用的选择只受操作系统内允许的命令和他们使用这些命令的创造力的限制。

操作系统命令在与应用程序相同的权限级别上运行。以管理权限运行的应用程序意味着入侵它们的黑客可以运行每个操作系统命令。

操作系统命令注入的攻击模式是众所周知的,也是有记录的。一个易受攻击的应用程序和专业黑客一样容易受到脚本儿童的攻击。没有什么技能的攻击者可以尝试将操作系统命令剪切和粘贴到应用程序中,看看会发生什么。

针对操作系统的命令注入获得安全许可

有几个好的技术可以阻止操作系统的命令注入。第一步是以完成其功能所需的最少权限来运行应用程序。这并不能阻止攻击,但是如果真的发生了漏洞,损失就会降到最低。

大多数编程语言和框架为常见的操作系统方法提供了API调用,如列出目录内容、创建或读取硬盘上的文件。从你的环境中消除操作系统命令注入的一个完美方法是让所有应用程序使用这些API调用,而不是直接使用操作系统命令。

在无法做到这一点的情况下,在操作系统命令中使用用户输入之前,要对其进行验证。白名单可以用来确保只有一小部分可信的值可以被使用。从技术上讲,使用黑名单也可以做到这一点,但允许的命令可能少得多,所以白名单几乎总是更容易。不要忘记在你的白名单中包括有效的POST和GET参数,以及经常被忽视的用户输入载体,如cookies。

最后,如果没有可用的编程API,并且不能使用白名单,那么在操作系统命令中使用用户输入的任何特殊字符之前,使用消毒库来转义这些字符。

关于操作系统命令注入攻击的更多信息

要进一步阅读,你可以看一下OWASP关于操作系统命令注入攻击的文章。你也可以用Secure Code Warrior 平台的免费演示来测试你新发现的防御知识,该平台培训网络安全团队成为终极网络战士。要了解更多关于击败这个漏洞以及其他威胁的流氓画廊,请访问Secure Code Warrior 博客。

显示资源
显示资源

请填写以下表格以下载报告

我们希望获得您的授权,以便向您发送有关我们产品和/或安全编码相关主题的信息。我们将始终以最高标准谨慎处理您的个人数据,绝不会将其出售给其他企业用于营销目的。

提交
scw 成功图标
SCW 错误图标
要提交表单,请启用「Analytics」Cookie。完成操作后,请随时将其重新禁用。

只要应用程序允许用户向外壳输入信息,但不采取任何行动来验证输入的字符串是否有效,就会发生操作系统命令注入攻击。这使攻击者能够将命令直接投放到托管应用程序的操作系统中,而且是在为被攻击的应用程序设置的任何权限级别。  

操作系统命令注入攻击可以由入门级和不太熟练的黑客执行,这使得它们成为安全团队遇到的最常见的弱点之一。值得庆幸的是,有不少非常有效的方法来防止它们的成功。在这一集里,我们将学习。

       它们是如何工作的

       为什么它们如此危险

       你如何能把防御措施放在适当的位置来阻止他们。

攻击者如何使用操作系统命令注入?

攻击者为了发起操作系统命令注入攻击,必须做的第一件事是在应用程序中找到用户输入。用户填写的表格是潜在的好跳板。最聪明的攻击者还可以使用诸如cookies甚至HTTP头文件作为他们的启动点,这几乎是每个应用程序或网站都会使用的东西。

他们需要做的第二件事是弄清楚什么操作系统是应用程序的主机。鉴于只有少数几个选择,试错在这个阶段可以很好地发挥作用。大多数应用服务器要么是基于Windows的(Windows的味道通常并不重要),要么是某种类型的Linux盒子,或者可能是Unix。

在这一点上,黑客修改了输入,在看似无害的输入中注入了一个操作系统的命令。这可以欺骗主机操作系统,使其以应用程序的任何权限级别执行非预期的命令。

例如,以下命令可以被应用程序中的有效用户用来查看一个文件的内容,在这种情况下,就是每月一次的董事会会议的记录。

exec("cat " + filename)

在我们的例子中,这将执行以下命令并将会议记录返回给用户。

$ ./cat MeetingNotes.txt
7月份的会议上有三名执行委员会成员出席。会议讨论了新的预算项目,但没有采取任何行动或投票。

当攻击者在输入的末尾添加额外的命令时,就会发生这种情况,例如在Linux中用于列出目录内容的命令。在这种情况下,显示会议记录的原始命令仍然发生。但恶意用户也会被显示目录中的其他一切内容,以及他们可以在后续的操作系统命令注入攻击中使用哪些其他命令。他们输入

$ ./cat MeetingNotes.txt && ls

而得到的却是这个。

7月份的会议上有三名执行委员会成员出席。会议讨论了新的预算项目,但没有采取任何行动或投票。

MeetingNotes.txt
JuneMeetingNotes.txt
MayMeetingNotes.txt
format.c
misnull.c
notefault.c
trunc.c
writewhatwhere.c

正如你所看到的,在这个案例中,黑客不仅看到了目录的内容,而且还得到了一个他们可以使用的其他命令的菜单 " 他们现在知道他们可以在主机操作系统上执行的命令。

为什么操作系统命令注入攻击如此危险?

允许用户绕过目标应用程序的目的并使用它来运行操作系统命令是非常危险的。攻击者可以很容易地执行破坏性的行动,例如窃取机密数据或格式化整个服务器驱动器。攻击者可用的选择只受操作系统内允许的命令和他们使用这些命令的创造力的限制。

操作系统命令在与应用程序相同的权限级别上运行。以管理权限运行的应用程序意味着入侵它们的黑客可以运行每个操作系统命令。

操作系统命令注入的攻击模式是众所周知的,也是有记录的。一个易受攻击的应用程序和专业黑客一样容易受到脚本儿童的攻击。没有什么技能的攻击者可以尝试将操作系统命令剪切和粘贴到应用程序中,看看会发生什么。

针对操作系统的命令注入获得安全许可

有几个好的技术可以阻止操作系统的命令注入。第一步是以完成其功能所需的最少权限来运行应用程序。这并不能阻止攻击,但是如果真的发生了漏洞,损失就会降到最低。

大多数编程语言和框架为常见的操作系统方法提供了API调用,如列出目录内容、创建或读取硬盘上的文件。从你的环境中消除操作系统命令注入的一个完美方法是让所有应用程序使用这些API调用,而不是直接使用操作系统命令。

在无法做到这一点的情况下,在操作系统命令中使用用户输入之前,要对其进行验证。白名单可以用来确保只有一小部分可信的值可以被使用。从技术上讲,使用黑名单也可以做到这一点,但允许的命令可能少得多,所以白名单几乎总是更容易。不要忘记在你的白名单中包括有效的POST和GET参数,以及经常被忽视的用户输入载体,如cookies。

最后,如果没有可用的编程API,并且不能使用白名单,那么在操作系统命令中使用用户输入的任何特殊字符之前,使用消毒库来转义这些字符。

关于操作系统命令注入攻击的更多信息

要进一步阅读,你可以看一下OWASP关于操作系统命令注入攻击的文章。你也可以用Secure Code Warrior 平台的免费演示来测试你新发现的防御知识,该平台培训网络安全团队成为终极网络战士。要了解更多关于击败这个漏洞以及其他威胁的流氓画廊,请访问Secure Code Warrior 博客。

查看网络研讨会
开始
了解更多

点击下方链接,下载此资源的PDF文件。

Secure Code Warrior 在整个软件开发周期中保障代码安全,并营造将网络安全置于首位的企业文化。无论您是应用安全负责人、开发人员、信息安全主管,还是其他任何参与安全工作的人员,我们都能协助您的组织降低不安全代码带来的风险。

显示报告预约演示
下载PDF文件
显示资源
分享到:
领英品牌社交x 标志
您想了解更多吗?

分享到:
领英品牌社交x 标志
作者
Jaap Karan Singh
发布日期:2019年02月07日

Jaap Karan Singh est un évangéliste du codage sécurisé, Chief Singh et cofondateur de Secure Code Warrior.

分享到:
领英品牌社交x 标志

只要应用程序允许用户向外壳输入信息,但不采取任何行动来验证输入的字符串是否有效,就会发生操作系统命令注入攻击。这使攻击者能够将命令直接投放到托管应用程序的操作系统中,而且是在为被攻击的应用程序设置的任何权限级别。  

操作系统命令注入攻击可以由入门级和不太熟练的黑客执行,这使得它们成为安全团队遇到的最常见的弱点之一。值得庆幸的是,有不少非常有效的方法来防止它们的成功。在这一集里,我们将学习。

       它们是如何工作的

       为什么它们如此危险

       你如何能把防御措施放在适当的位置来阻止他们。

攻击者如何使用操作系统命令注入?

攻击者为了发起操作系统命令注入攻击,必须做的第一件事是在应用程序中找到用户输入。用户填写的表格是潜在的好跳板。最聪明的攻击者还可以使用诸如cookies甚至HTTP头文件作为他们的启动点,这几乎是每个应用程序或网站都会使用的东西。

他们需要做的第二件事是弄清楚什么操作系统是应用程序的主机。鉴于只有少数几个选择,试错在这个阶段可以很好地发挥作用。大多数应用服务器要么是基于Windows的(Windows的味道通常并不重要),要么是某种类型的Linux盒子,或者可能是Unix。

在这一点上,黑客修改了输入,在看似无害的输入中注入了一个操作系统的命令。这可以欺骗主机操作系统,使其以应用程序的任何权限级别执行非预期的命令。

例如,以下命令可以被应用程序中的有效用户用来查看一个文件的内容,在这种情况下,就是每月一次的董事会会议的记录。

exec("cat " + filename)

在我们的例子中,这将执行以下命令并将会议记录返回给用户。

$ ./cat MeetingNotes.txt
7月份的会议上有三名执行委员会成员出席。会议讨论了新的预算项目,但没有采取任何行动或投票。

当攻击者在输入的末尾添加额外的命令时,就会发生这种情况,例如在Linux中用于列出目录内容的命令。在这种情况下,显示会议记录的原始命令仍然发生。但恶意用户也会被显示目录中的其他一切内容,以及他们可以在后续的操作系统命令注入攻击中使用哪些其他命令。他们输入

$ ./cat MeetingNotes.txt && ls

而得到的却是这个。

7月份的会议上有三名执行委员会成员出席。会议讨论了新的预算项目,但没有采取任何行动或投票。

MeetingNotes.txt
JuneMeetingNotes.txt
MayMeetingNotes.txt
format.c
misnull.c
notefault.c
trunc.c
writewhatwhere.c

正如你所看到的,在这个案例中,黑客不仅看到了目录的内容,而且还得到了一个他们可以使用的其他命令的菜单 " 他们现在知道他们可以在主机操作系统上执行的命令。

为什么操作系统命令注入攻击如此危险?

允许用户绕过目标应用程序的目的并使用它来运行操作系统命令是非常危险的。攻击者可以很容易地执行破坏性的行动,例如窃取机密数据或格式化整个服务器驱动器。攻击者可用的选择只受操作系统内允许的命令和他们使用这些命令的创造力的限制。

操作系统命令在与应用程序相同的权限级别上运行。以管理权限运行的应用程序意味着入侵它们的黑客可以运行每个操作系统命令。

操作系统命令注入的攻击模式是众所周知的,也是有记录的。一个易受攻击的应用程序和专业黑客一样容易受到脚本儿童的攻击。没有什么技能的攻击者可以尝试将操作系统命令剪切和粘贴到应用程序中,看看会发生什么。

针对操作系统的命令注入获得安全许可

有几个好的技术可以阻止操作系统的命令注入。第一步是以完成其功能所需的最少权限来运行应用程序。这并不能阻止攻击,但是如果真的发生了漏洞,损失就会降到最低。

大多数编程语言和框架为常见的操作系统方法提供了API调用,如列出目录内容、创建或读取硬盘上的文件。从你的环境中消除操作系统命令注入的一个完美方法是让所有应用程序使用这些API调用,而不是直接使用操作系统命令。

在无法做到这一点的情况下,在操作系统命令中使用用户输入之前,要对其进行验证。白名单可以用来确保只有一小部分可信的值可以被使用。从技术上讲,使用黑名单也可以做到这一点,但允许的命令可能少得多,所以白名单几乎总是更容易。不要忘记在你的白名单中包括有效的POST和GET参数,以及经常被忽视的用户输入载体,如cookies。

最后,如果没有可用的编程API,并且不能使用白名单,那么在操作系统命令中使用用户输入的任何特殊字符之前,使用消毒库来转义这些字符。

关于操作系统命令注入攻击的更多信息

要进一步阅读,你可以看一下OWASP关于操作系统命令注入攻击的文章。你也可以用Secure Code Warrior 平台的免费演示来测试你新发现的防御知识,该平台培训网络安全团队成为终极网络战士。要了解更多关于击败这个漏洞以及其他威胁的流氓画廊,请访问Secure Code Warrior 博客。

目录

下载PDF文件
显示资源
您想了解更多吗?

Jaap Karan Singh est un évangéliste du codage sécurisé, Chief Singh et cofondateur de Secure Code Warrior.

了解更多

Secure Code Warrior 在整个软件开发周期中保障代码安全,并营造将网络安全置于首位的企业文化。无论您是应用安全负责人、开发人员、信息安全主管,还是其他任何参与安全工作的人员,我们都能协助您的组织降低不安全代码带来的风险。

预约演示下载
分享到:
领英品牌社交x 标志
资源中心

帮助您入门的资源

更多帖子
资源中心

帮助您入门的资源

更多帖子