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

程序员征服安全:分享与学习系列-操作系统命令注入

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

每当应用程序允许用户在 shell 中输入内容,但不采取任何操作来验证输入字符串是否有效时,就会发生操作系统命令注入攻击。这使攻击者能够将命令直接丢入托管应用程序的操作系统,以及为受感染应用程序设置的任何权限级别。

操作系统命令注入攻击可以由入门级和技能较低的黑客执行,这使其成为安全团队最常见的漏洞之一。值得庆幸的是,有很多非常有效的方法可以防止他们取得成功。在本集中,我们将学习:

它们是如何工作的

为什么它们如此危险

如何设置防御措施来阻止他们。

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

为了发起操作系统命令注入攻击,攻击者必须做的第一件事是在应用程序中找到用户输入。用户填写的表单可能是很好的起点。最聪明的攻击者还可以使用诸如Cookie甚至HTTP标头之类的东西作为其启动点,几乎所有应用程序或网站都会使用这种东西。

他们需要做的第二件事是弄清楚哪个操作系统托管应用程序。鉴于只有少数几种选择,在这个阶段反复试验可以很好地发挥作用。大多数应用程序服务器要么基于Windows(Windows的风格通常并不重要),要么是某种类型的Linux机箱,要么可能是Unix的。

此时,黑客修改了输入,将操作系统命令注入看似无害的输入中。这可能会欺骗托管操作系统以应用程序的任何权限级别执行意外命令。

例如,应用程序中的有效用户可以使用以下命令来查看文件的内容,在本例中为每月一次的董事会会议记录。

exec(“cat” + 文件名)

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

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

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

$。/cat MeetingNotes.txt && ls

改为改用这个:

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

MeetingNotes.txt
JuneMeetingNotes.txt
MayMeetingNotes.txt
格式化.c
misnull.c
notefault.c
trunc.c
writewhatwhere.c

如你所见,在这种情况下,黑客不仅看到了目录的内容,还向他们提供了一个包含其他命令的菜单,供他们使用 “他们现在知道可以在主机操作系统上执行的命令”。

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

允许用户绕过目标应用程序的用途并使用它来运行操作系统命令是极其危险的。攻击者可以轻松执行破坏性操作,例如窃取机密数据或格式化整个服务器驱动器。攻击者可用的选项仅受操作系统中允许的命令及其使用这些命令的创造力的限制。

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

操作系统命令注入的攻击模式是众所周知和有据可查的。易受攻击的应用程序既容易受到脚本小子的攻击,也容易受到专业黑客的攻击。技能很少的攻击者可以尝试将操作系统命令剪切并粘贴到应用程序中,以查看会发生什么。

在操作系统命令注入方面获得安全保障

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

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

如果不可能这样做,请在操作系统命令中使用用户输入之前对其进行验证。白名单可用于确保只能使用一小部分可信值。从技术上讲,使用黑名单也可以做到这一点,但是允许的命令可能要少得多,因此列入白名单几乎总是更容易的。不要忘记在白名单中加入有效的 POST 和 GET 参数,以及经常被忽视的用户输入向量,如 cookie。

最后,如果没有可用的编程 API 且无法使用白名单,请在操作系统命令中使用用户输入中的任何特殊字符之前,使用消毒库对其进行转义。

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

要进一步阅读,你可以看看 OWASP 写在上面 操作系统命令注入攻击。你还可以使用以下方法来测试你新获得的防御知识 免费演示 Secure Code Warrior 平台,该平台培训网络安全团队成为终极网络战士。要了解有关克服此漏洞以及其他恶棍威胁的更多信息,请访问 安全代码勇士博客。

查看资源
查看资源

操作系统命令注入攻击可以由入门级和技能较低的黑客执行,这使其成为安全团队最常见的漏洞之一。值得庆幸的是,有很多非常有效的方法可以防止他们取得成功。

对更多感兴趣?

Jaap Karan Singh是一位安全编码布道者,首席辛格和Secure Code Warrior 的共同创始人。

了解更多

Secure Code Warrior可帮助您的组织在整个软件开发生命周期中保护代码,并营造一种将网络安全置于首位的文化。无论您是应用安全经理、开发人员、首席信息安全官还是任何与安全相关的人员,我们都能帮助您的组织降低与不安全代码相关的风险。

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

Jaap Karan Singh是一位安全编码布道者,首席辛格和Secure Code Warrior 的共同创始人。

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

每当应用程序允许用户在 shell 中输入内容,但不采取任何操作来验证输入字符串是否有效时,就会发生操作系统命令注入攻击。这使攻击者能够将命令直接丢入托管应用程序的操作系统,以及为受感染应用程序设置的任何权限级别。

操作系统命令注入攻击可以由入门级和技能较低的黑客执行,这使其成为安全团队最常见的漏洞之一。值得庆幸的是,有很多非常有效的方法可以防止他们取得成功。在本集中,我们将学习:

它们是如何工作的

为什么它们如此危险

如何设置防御措施来阻止他们。

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

为了发起操作系统命令注入攻击,攻击者必须做的第一件事是在应用程序中找到用户输入。用户填写的表单可能是很好的起点。最聪明的攻击者还可以使用诸如Cookie甚至HTTP标头之类的东西作为其启动点,几乎所有应用程序或网站都会使用这种东西。

他们需要做的第二件事是弄清楚哪个操作系统托管应用程序。鉴于只有少数几种选择,在这个阶段反复试验可以很好地发挥作用。大多数应用程序服务器要么基于Windows(Windows的风格通常并不重要),要么是某种类型的Linux机箱,要么可能是Unix的。

此时,黑客修改了输入,将操作系统命令注入看似无害的输入中。这可能会欺骗托管操作系统以应用程序的任何权限级别执行意外命令。

例如,应用程序中的有效用户可以使用以下命令来查看文件的内容,在本例中为每月一次的董事会会议记录。

exec(“cat” + 文件名)

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

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

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

$。/cat MeetingNotes.txt && ls

改为改用这个:

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

MeetingNotes.txt
JuneMeetingNotes.txt
MayMeetingNotes.txt
格式化.c
misnull.c
notefault.c
trunc.c
writewhatwhere.c

如你所见,在这种情况下,黑客不仅看到了目录的内容,还向他们提供了一个包含其他命令的菜单,供他们使用 “他们现在知道可以在主机操作系统上执行的命令”。

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

允许用户绕过目标应用程序的用途并使用它来运行操作系统命令是极其危险的。攻击者可以轻松执行破坏性操作,例如窃取机密数据或格式化整个服务器驱动器。攻击者可用的选项仅受操作系统中允许的命令及其使用这些命令的创造力的限制。

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

操作系统命令注入的攻击模式是众所周知和有据可查的。易受攻击的应用程序既容易受到脚本小子的攻击,也容易受到专业黑客的攻击。技能很少的攻击者可以尝试将操作系统命令剪切并粘贴到应用程序中,以查看会发生什么。

在操作系统命令注入方面获得安全保障

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

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

如果不可能这样做,请在操作系统命令中使用用户输入之前对其进行验证。白名单可用于确保只能使用一小部分可信值。从技术上讲,使用黑名单也可以做到这一点,但是允许的命令可能要少得多,因此列入白名单几乎总是更容易的。不要忘记在白名单中加入有效的 POST 和 GET 参数,以及经常被忽视的用户输入向量,如 cookie。

最后,如果没有可用的编程 API 且无法使用白名单,请在操作系统命令中使用用户输入中的任何特殊字符之前,使用消毒库对其进行转义。

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

要进一步阅读,你可以看看 OWASP 写在上面 操作系统命令注入攻击。你还可以使用以下方法来测试你新获得的防御知识 免费演示 Secure Code Warrior 平台,该平台培训网络安全团队成为终极网络战士。要了解有关克服此漏洞以及其他恶棍威胁的更多信息,请访问 安全代码勇士博客。

查看资源
查看资源

填写下面的表格下载报告

我们希望获得您的许可,以便向您发送有关我们的产品和/或相关安全编码主题的信息。我们将始终非常谨慎地对待您的个人信息,绝不会出于营销目的将其出售给其他公司。

提交
scw 成功图标
SCW 错误图标
要提交表单,请启用“分析”Cookie。完成后,可以随意再次禁用它们。

每当应用程序允许用户在 shell 中输入内容,但不采取任何操作来验证输入字符串是否有效时,就会发生操作系统命令注入攻击。这使攻击者能够将命令直接丢入托管应用程序的操作系统,以及为受感染应用程序设置的任何权限级别。

操作系统命令注入攻击可以由入门级和技能较低的黑客执行,这使其成为安全团队最常见的漏洞之一。值得庆幸的是,有很多非常有效的方法可以防止他们取得成功。在本集中,我们将学习:

它们是如何工作的

为什么它们如此危险

如何设置防御措施来阻止他们。

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

为了发起操作系统命令注入攻击,攻击者必须做的第一件事是在应用程序中找到用户输入。用户填写的表单可能是很好的起点。最聪明的攻击者还可以使用诸如Cookie甚至HTTP标头之类的东西作为其启动点,几乎所有应用程序或网站都会使用这种东西。

他们需要做的第二件事是弄清楚哪个操作系统托管应用程序。鉴于只有少数几种选择,在这个阶段反复试验可以很好地发挥作用。大多数应用程序服务器要么基于Windows(Windows的风格通常并不重要),要么是某种类型的Linux机箱,要么可能是Unix的。

此时,黑客修改了输入,将操作系统命令注入看似无害的输入中。这可能会欺骗托管操作系统以应用程序的任何权限级别执行意外命令。

例如,应用程序中的有效用户可以使用以下命令来查看文件的内容,在本例中为每月一次的董事会会议记录。

exec(“cat” + 文件名)

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

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

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

$。/cat MeetingNotes.txt && ls

改为改用这个:

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

MeetingNotes.txt
JuneMeetingNotes.txt
MayMeetingNotes.txt
格式化.c
misnull.c
notefault.c
trunc.c
writewhatwhere.c

如你所见,在这种情况下,黑客不仅看到了目录的内容,还向他们提供了一个包含其他命令的菜单,供他们使用 “他们现在知道可以在主机操作系统上执行的命令”。

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

允许用户绕过目标应用程序的用途并使用它来运行操作系统命令是极其危险的。攻击者可以轻松执行破坏性操作,例如窃取机密数据或格式化整个服务器驱动器。攻击者可用的选项仅受操作系统中允许的命令及其使用这些命令的创造力的限制。

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

操作系统命令注入的攻击模式是众所周知和有据可查的。易受攻击的应用程序既容易受到脚本小子的攻击,也容易受到专业黑客的攻击。技能很少的攻击者可以尝试将操作系统命令剪切并粘贴到应用程序中,以查看会发生什么。

在操作系统命令注入方面获得安全保障

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

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

如果不可能这样做,请在操作系统命令中使用用户输入之前对其进行验证。白名单可用于确保只能使用一小部分可信值。从技术上讲,使用黑名单也可以做到这一点,但是允许的命令可能要少得多,因此列入白名单几乎总是更容易的。不要忘记在白名单中加入有效的 POST 和 GET 参数,以及经常被忽视的用户输入向量,如 cookie。

最后,如果没有可用的编程 API 且无法使用白名单,请在操作系统命令中使用用户输入中的任何特殊字符之前,使用消毒库对其进行转义。

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

要进一步阅读,你可以看看 OWASP 写在上面 操作系统命令注入攻击。你还可以使用以下方法来测试你新获得的防御知识 免费演示 Secure Code Warrior 平台,该平台培训网络安全团队成为终极网络战士。要了解有关克服此漏洞以及其他恶棍威胁的更多信息,请访问 安全代码勇士博客。

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

点击下面的链接并下载此资源的PDF。

Secure Code Warrior可帮助您的组织在整个软件开发生命周期中保护代码,并营造一种将网络安全置于首位的文化。无论您是应用安全经理、开发人员、首席信息安全官还是任何与安全相关的人员,我们都能帮助您的组织降低与不安全代码相关的风险。

查看报告预约演示
查看资源
分享到:
领英品牌社交x 标志
对更多感兴趣?

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

Jaap Karan Singh是一位安全编码布道者,首席辛格和Secure Code Warrior 的共同创始人。

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

每当应用程序允许用户在 shell 中输入内容,但不采取任何操作来验证输入字符串是否有效时,就会发生操作系统命令注入攻击。这使攻击者能够将命令直接丢入托管应用程序的操作系统,以及为受感染应用程序设置的任何权限级别。

操作系统命令注入攻击可以由入门级和技能较低的黑客执行,这使其成为安全团队最常见的漏洞之一。值得庆幸的是,有很多非常有效的方法可以防止他们取得成功。在本集中,我们将学习:

它们是如何工作的

为什么它们如此危险

如何设置防御措施来阻止他们。

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

为了发起操作系统命令注入攻击,攻击者必须做的第一件事是在应用程序中找到用户输入。用户填写的表单可能是很好的起点。最聪明的攻击者还可以使用诸如Cookie甚至HTTP标头之类的东西作为其启动点,几乎所有应用程序或网站都会使用这种东西。

他们需要做的第二件事是弄清楚哪个操作系统托管应用程序。鉴于只有少数几种选择,在这个阶段反复试验可以很好地发挥作用。大多数应用程序服务器要么基于Windows(Windows的风格通常并不重要),要么是某种类型的Linux机箱,要么可能是Unix的。

此时,黑客修改了输入,将操作系统命令注入看似无害的输入中。这可能会欺骗托管操作系统以应用程序的任何权限级别执行意外命令。

例如,应用程序中的有效用户可以使用以下命令来查看文件的内容,在本例中为每月一次的董事会会议记录。

exec(“cat” + 文件名)

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

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

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

$。/cat MeetingNotes.txt && ls

改为改用这个:

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

MeetingNotes.txt
JuneMeetingNotes.txt
MayMeetingNotes.txt
格式化.c
misnull.c
notefault.c
trunc.c
writewhatwhere.c

如你所见,在这种情况下,黑客不仅看到了目录的内容,还向他们提供了一个包含其他命令的菜单,供他们使用 “他们现在知道可以在主机操作系统上执行的命令”。

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

允许用户绕过目标应用程序的用途并使用它来运行操作系统命令是极其危险的。攻击者可以轻松执行破坏性操作,例如窃取机密数据或格式化整个服务器驱动器。攻击者可用的选项仅受操作系统中允许的命令及其使用这些命令的创造力的限制。

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

操作系统命令注入的攻击模式是众所周知和有据可查的。易受攻击的应用程序既容易受到脚本小子的攻击,也容易受到专业黑客的攻击。技能很少的攻击者可以尝试将操作系统命令剪切并粘贴到应用程序中,以查看会发生什么。

在操作系统命令注入方面获得安全保障

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

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

如果不可能这样做,请在操作系统命令中使用用户输入之前对其进行验证。白名单可用于确保只能使用一小部分可信值。从技术上讲,使用黑名单也可以做到这一点,但是允许的命令可能要少得多,因此列入白名单几乎总是更容易的。不要忘记在白名单中加入有效的 POST 和 GET 参数,以及经常被忽视的用户输入向量,如 cookie。

最后,如果没有可用的编程 API 且无法使用白名单,请在操作系统命令中使用用户输入中的任何特殊字符之前,使用消毒库对其进行转义。

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

要进一步阅读,你可以看看 OWASP 写在上面 操作系统命令注入攻击。你还可以使用以下方法来测试你新获得的防御知识 免费演示 Secure Code Warrior 平台,该平台培训网络安全团队成为终极网络战士。要了解有关克服此漏洞以及其他恶棍威胁的更多信息,请访问 安全代码勇士博客。

目录

下载PDF
查看资源
对更多感兴趣?

Jaap Karan Singh是一位安全编码布道者,首席辛格和Secure Code Warrior 的共同创始人。

了解更多

Secure Code Warrior可帮助您的组织在整个软件开发生命周期中保护代码,并营造一种将网络安全置于首位的文化。无论您是应用安全经理、开发人员、首席信息安全官还是任何与安全相关的人员,我们都能帮助您的组织降低与不安全代码相关的风险。

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

帮助您入门的资源

更多帖子
资源中心

帮助您入门的资源

更多帖子