什么是命令注入漏洞?

一颗小胡椒2022-06-04 22:46:17

什么是命令注入漏洞?

命令注入漏洞如何让攻击者接管机器,以及如何防止这些漏洞。

命令注入漏洞可能是应用程序中可能发生的最危险的漏洞之一。当应用程序允许用户输入与系统命令混淆时,就会发生命令注入漏洞或操作系统命令注入漏洞。当用户输入在没有适当预防措施的情况下直接连接到系统命令中时,就会发生这种情况。让我们用一个例子来理解。

在代码中调用系统命令

假设Web应用程序具有允许用户通过站点下载网页的功能。要实现此功能,可以使用Python执行系统命令wget来下载网页。代码如下:

导入操作系统def下载(url):
os.system("wget-O- {}".format(url))显示(下载(user_input.url))

首先定义一个函数download,该函数调用wget从传入的URL下载内容。然后它调用download用户提供的输入并显示结果。如果用户提交以下请求,应用程序将下载Google的主页并将其显示给用户:

GET/download?url=google.com
主机:example.com

命令注入是如何发生的

在Linux命令行上,分号;字符分隔各个命令。而且由于这里的用户输入是直接传递给系统命令的,因此攻击者可以wget通过在分号后提交他们想要的任何命令来执行命令之后的任意命令。例如,如果恶意用户提交了这个请求会发生什么?

GET/download?url=google.com;ls
主机:example.com

此请求将导致应用程序同时执行wget-O-google.com和 ls,从而输出当前目录的内容。由于应用程序随后会将命令的结果显示给用户,因此恶意用户也将能够读取ls命令的输出。同样,攻击者也可以通过此漏洞读取敏感文件:

GET/download?url=google.com;cat/etc/shadow
主机:example.com

/etc/shadow是Unix系统上存储散列用户密码的文件。攻击者将能够执行运行Web应用程序的用户有权执行的任何系统命令。例如,他们可能能够读取敏感文件、访问和利用本地网络上的其他机器,或者修改服务器上的文件。

如何防止命令注入?

那么如何防止代码中的命令注入漏洞呢?

为防止命令注入,应避免将用户输入直接插入系统命令。可以使用的第一个替代策略是使用编程语言的系统API,而不是system()直接调用。大多数编程语言都有内置函数,允许您运行常见的系统命令,而不会冒命令注入的风险。

例如,PHP有一个名为
mkdir(DIRECTORY_NAME).
可以使用它来创建新目录
而不是调用
system("mkdirDIRECTORY_NAME").

如果必须将用户输入插入系统命令,请在将用户输入传递到系统命令之前实施强输入验证。可以使用字符串或字符的允许列表来指定允许的值并拒绝所有其他不符合该格式的用户输入。例如,如果想允许用户使用系统命令读取系统文件的子集,可以创建允许的文件名列表并拒绝所有其他输入。还可以使用正则表达式将用户输入限制为特定的字符子集,以防止用户提交允许他们操纵系统命令的特殊字符。例如,这个正则表达式字符串会将用户输入限制为字母数字字符。

并将用户输入限制为15个字符:^[A-Za-z0–9]{1,15}$.

纵深防御策略

最后,还有深度防御策略可以帮助将命令注入的风险降至最低。首先,可以部署WAF(Web应用程序防火墙)来帮助过滤掉可疑的用户输入。还应该仅使用完成其任务所需的权限来运行应用程序。例如,当应用程序只需要对文件进行读取访问时,不应授予它任何写入或执行权限。这被称为“最小特权原则”。这种做法将降低在攻击期间系统受损的风险,因为攻击者即使在应用程序上获得命令注入,也无法获得对敏感文件和操作的访问权限

url注入漏洞
本作品采用《CC 协议》,转载必须注明作者和本文链接
在 HTTP 协议中,HTTP header 之间是由一个 CRLF 字符序列分隔开的,HTTP Header 与 Body 是用两个 CRLF 分隔的,浏览器根据这两个 CRLF 来取出 HTTP 内容并显示出来。
今天分享一篇文章,涉及Redis未授权、SSRF漏洞、宽字节注入、JSONP劫持、CORS、CRLF注入等技能,并详细讲述了其原理和漏洞利用等。能够回连且权限够的话,写crontab利用计划任务执行命令反弹shell?图片加载与下载:通过URL地址加载或下载图片?禁用不需要的协议。禁止30x跳转Java和PHP的SSRF区别PHP支持的协议:
最近在学习关于SQL注入方面的知识,想将一些相关的知识点做个汇总和笔记,方便日后的查阅也方便现在的学习。因为刚开始学习,涉猎还没有很深入,本章将简单的讲讲关于SQL注入的原理及其产生的过程和基本的一些加固方法。
8月2日,虚拟化和云计算巨头VMware发布了一项重要的安全公告VMSA-2022-0021,通告用户修复数个在VMware产品中发现的安全漏洞。
id=3';对应的sql:select * from table where id=3' 这时sql语句出错,程序无法正常从数据库中查询出数据,就会抛出异常; 加and 1=1 ,URL:xxx.xxx.xxx/xxx.php?id=1' order by 3# 没有报错,说明存在3列爆出数据库:?id=-1' union select 1,group_concat,3 from information_schema.schemata#爆出数据表:?id=1' and extractvalue--+(爆字段)?
漏洞——即将进行概念验证——是该公司修复的一系列可能导致攻击链的缺陷之一。
id=1' order by 3# 没有报错,说明存在3列。id=-1' union select 1,group_concat,3 from 数据库名.数据表名--+拓展一些其他函数:system_user() 系统用户名。updatexml函数:细节问题:extractvalue()基本一样,改个关键字updatexml即可,与extractvalue有个很大的区别实在末尾注入加上,如:,而extractvalue函数末尾不加1(数值)?
虚拟化服务提供商 VMware 周二发布了更新,以解决影响多个产品的 10 个安全漏洞,这些漏洞可能被未经身份验证的攻击者滥用以执行恶意操作。
F-vuln(全称:Find-Vulnerability)是为了自己工作方便专门编写的一款自动化工具,主要适用于日常安全服务、渗透测试人员和RedTeam红队人员,它集合的功能包括:存活IP探测、开放端口探测、web服务探测、web漏洞扫描、smb爆破、ssh爆破、ftp爆破、mssql爆破等其他数据库爆破工作以及大量web漏洞检测模块。
一颗小胡椒
暂无描述