
程序员征服安全:分享与学习系列-操作系统命令注入
每当应用程序允许用户在 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 平台,该平台培训网络安全团队成为终极网络战士。要了解有关克服此漏洞以及其他恶棍威胁的更多信息,请访问 安全代码勇士博客。
야프 카란 싱은 보안 코딩 전도자, 수석 싱 및 공동 설립자입니다 Secure Code Warrior .

Secure Code Warrior는 조직이 소프트웨어 개발 생명주기 전반에 걸쳐 코드를 보호하고 사이버 보안을 최우선으로 하는 문화를 조성하도록 지원합니다. 앱 보안 관리자, 개발자, 최고정보보안책임자(CISO) 또는 보안 관련 업무를 수행하는 모든 분들에게, 저희는 조직이 안전하지 않은 코드와 관련된 위험을 줄일 수 있도록 돕습니다.
데모 예약야프 카란 싱은 보안 코딩 전도자, 수석 싱 및 공동 설립자입니다 Secure Code Warrior .


每当应用程序允许用户在 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 平台,该平台培训网络安全团队成为终极网络战士。要了解有关克服此漏洞以及其他恶棍威胁的更多信息,请访问 安全代码勇士博客。

每当应用程序允许用户在 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는 조직이 소프트웨어 개발 생명주기 전반에 걸쳐 코드를 보호하고 사이버 보안을 최우선으로 하는 문화를 조성하도록 지원합니다. 앱 보안 관리자, 개발자, 최고정보보안책임자(CISO) 또는 보안 관련 업무를 수행하는 모든 분들에게, 저희는 조직이 안전하지 않은 코드와 관련된 위험을 줄일 수 있도록 돕습니다.
보고서 보기데모 예약야프 카란 싱은 보안 코딩 전도자, 수석 싱 및 공동 설립자입니다 Secure Code Warrior .
每当应用程序允许用户在 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 平台,该平台培训网络安全团队成为终极网络战士。要了解有关克服此漏洞以及其他恶棍威胁的更多信息,请访问 安全代码勇士博客。




%20(1).avif)
.avif)
