
编码员征服安全。分享与学习系列 - 操作系统命令注入
只要应用程序允许用户向外壳输入信息,但不采取任何行动来验证输入的字符串是否有效,就会发生操作系统命令注入攻击。这使攻击者能够将命令直接投放到托管应用程序的操作系统中,而且是在为被攻击的应用程序设置的任何权限级别。
操作系统命令注入攻击可以由入门级和不太熟练的黑客执行,这使得它们成为安全团队遇到的最常见的弱点之一。值得庆幸的是,有不少非常有效的方法来防止它们的成功。在这一集里,我们将学习。
它们是如何工作的
为什么它们如此危险
你如何能把防御措施放在适当的位置来阻止他们。
攻击者如何使用操作系统命令注入?
攻击者为了发起操作系统命令注入攻击,必须做的第一件事是在应用程序中找到用户输入。用户填写的表格是潜在的好跳板。最聪明的攻击者还可以使用诸如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 博客。
Jaap Karan Singh是一位安全编码布道者,首席辛格和Secure Code Warrior 的共同创始人。

Secure Code Warrior 我们在这里为您的组织提供服务,帮助您在整个软件开发生命周期中确保代码安全,并创造一种将网络安全放在首位的文化。无论您是应用安全经理、开发人员、CISO或任何涉及安全的人,我们都可以帮助您的组织减少与不安全代码有关的风险。
预定一个演示Jaap Karan Singh是一位安全编码布道者,首席辛格和Secure Code Warrior 的共同创始人。


只要应用程序允许用户向外壳输入信息,但不采取任何行动来验证输入的字符串是否有效,就会发生操作系统命令注入攻击。这使攻击者能够将命令直接投放到托管应用程序的操作系统中,而且是在为被攻击的应用程序设置的任何权限级别。
操作系统命令注入攻击可以由入门级和不太熟练的黑客执行,这使得它们成为安全团队遇到的最常见的弱点之一。值得庆幸的是,有不少非常有效的方法来防止它们的成功。在这一集里,我们将学习。
它们是如何工作的
为什么它们如此危险
你如何能把防御措施放在适当的位置来阻止他们。
攻击者如何使用操作系统命令注入?
攻击者为了发起操作系统命令注入攻击,必须做的第一件事是在应用程序中找到用户输入。用户填写的表格是潜在的好跳板。最聪明的攻击者还可以使用诸如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 博客。

只要应用程序允许用户向外壳输入信息,但不采取任何行动来验证输入的字符串是否有效,就会发生操作系统命令注入攻击。这使攻击者能够将命令直接投放到托管应用程序的操作系统中,而且是在为被攻击的应用程序设置的任何权限级别。
操作系统命令注入攻击可以由入门级和不太熟练的黑客执行,这使得它们成为安全团队遇到的最常见的弱点之一。值得庆幸的是,有不少非常有效的方法来防止它们的成功。在这一集里,我们将学习。
它们是如何工作的
为什么它们如此危险
你如何能把防御措施放在适当的位置来阻止他们。
攻击者如何使用操作系统命令注入?
攻击者为了发起操作系统命令注入攻击,必须做的第一件事是在应用程序中找到用户输入。用户填写的表格是潜在的好跳板。最聪明的攻击者还可以使用诸如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 博客。
只要应用程序允许用户向外壳输入信息,但不采取任何行动来验证输入的字符串是否有效,就会发生操作系统命令注入攻击。这使攻击者能够将命令直接投放到托管应用程序的操作系统中,而且是在为被攻击的应用程序设置的任何权限级别。
操作系统命令注入攻击可以由入门级和不太熟练的黑客执行,这使得它们成为安全团队遇到的最常见的弱点之一。值得庆幸的是,有不少非常有效的方法来防止它们的成功。在这一集里,我们将学习。
它们是如何工作的
为什么它们如此危险
你如何能把防御措施放在适当的位置来阻止他们。
攻击者如何使用操作系统命令注入?
攻击者为了发起操作系统命令注入攻击,必须做的第一件事是在应用程序中找到用户输入。用户填写的表格是潜在的好跳板。最聪明的攻击者还可以使用诸如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 博客。
资源
OpenText 应用程序安全性的强大功能 + Secure Code Warrior
OpenText Application Security and Secure Code Warrior combine vulnerability detection with AI Software Governance and developer capability. Together, they help organizations reduce risk, strengthen secure coding practices, and confidently adopt AI-driven development.
Secure Code Warrior corporate overview
Secure Code Warrior is an AI Software Governance platform designed to enable organizations to safely adopt AI-driven development by bridging the gap between development velocity and enterprise security. The platform addresses the "Visibility Gap," where security teams often lack insights into shadow AI coding tools and the origins of production code.
安全代码培训主题和内容
Our industry-leading content is always evolving to fit the ever changing software development landscape with your role in mind. Topics covering everything from AI to XQuery Injection, offered for a variety of roles from Architects and Engineers to Product Managers and QA. Get a sneak peek of what our content catalog has to offer by topic and role.
资源
Observe and Secure the ADLC: A Four-Point Framework for CISOs and Development Teams Using AI
While development teams look to make the most of GenAI’s undeniable benefits, we’d like to propose a four-point foundational framework that will allow security leaders to deploy AI coding tools and agents with a higher, more relevant standard of security best practices. It details exactly what enterprises can do to ensure safe, secure code development right now, and as agentic AI becomes an even bigger factor in the future.






