命令注入与代码执行详解(命令注入会造成什么风险)

命令注入与代码执行详解命令注入和代码执行的原理是相似的,它们都涉及到攻击者通过向应用程序提供恶意输入来控制应用程序执行系统命令或代码的能力。以下是它们的基本原理:
1. 命令注入(Command

命令注入和代码执行的原理相似,都允许攻击者通过向应用程序提供恶意输入来控制应用程序执行系统命令或代码的能力。其基本原则是:

1. 命令注入:命令注入是一种攻击技术,攻击者通过向应用程序提供恶意输入来控制应用程序执行系统命令的能力。攻击者可以利用此功能执行任意命令,包括破坏系统、窃取数据或提升权限。

工作原理:当应用程序接收用户输入并将其作为命令的一部分执行时,攻击者可以通过插入特殊字符或字符串来更改原始命令的意图。例如,如果攻击者输入“;rm -rf /”,服务器上的文件可能会被删除。这是因为分号(;)用于分隔多个命令,而“rm -rf /”是一个危险命令,可以删除整个文件系统。

2. 代码执行:代码执行是指攻击者执行恶意代码的能力。当应用程序存在允许攻击者注入和执行恶意代码的漏洞时,通常会发生这种情况。

工作原理:一旦应用程序收到用户输入并将其作为代码的一部分执行,攻击者就可以通过注入恶意代码来控制应用程序的行为。例如,当其他用户查看包含恶意代码的页面时,攻击者可能会尝试注入在该用户的浏览器上运行的JavaScript 代码。这是因为浏览器解析并执行嵌入网页中的JavaScript 代码。

为了防止这些攻击,开发人员应采取适当的预防措施,例如验证和过滤用户输入、使用参数化查询和准备好的语句以及实施内容安全策略(CSP)。定期更新和维护您的应用程序也是确保安全的重要一步。

命令注入:

通常,当应用程序与操作系统交互以执行系统命令,并且用户输入未得到正确验证、过滤和清理时,就会出现漏洞。攻击者寻找接受用户输入的点,并直接使用它来构造系统命令并创建包含恶意命令的输入数据。

例如,如果您的Web 应用程序接受用户输入并执行文件搜索操作,您的代码可能如下所示:

导入操作系统

user_input=input(\’请输入文件名:进行搜索\’)

os.system(\’查找/-name\’ + user_input)

如果用户输入类似test.txt; rm -rf/的名称而不是普通文件名,系统将运行危险命令rm 来删除该文件,同时运行查找test.txt 文件的命令- 也会执行。根目录rf/,这会造成严重破坏。

下面介绍一些常用的命令注入绕过编码方法。

1. 替换空格:在Linux 上的Bash 中,可以使用以下字符替换空格:

• 或:重定向字符。可以用作空格分隔符。

• %20:表示空格的URL 编码。

• %09:制表符(制表符)。

• $IFS$9、${IFS} 或$IFS:$IFS 代表Linux 中的分隔符。添加诸如{} 或$9 之类的内容可以修复变量名称或截断它们以替换空格。例如,您可以使用cat${IFS}2 而不是cat 2。

2. 截断符号:您可以使用多个截断符号来解决命令限制或连接多个命令。常见的截断符号包括$、|、-、(、)、反引号、||、} 和{。例如,ip=127.0.0.1;cat /home/flag.txt 用; 截断原始命令,并在末尾添加读取flag.txt 文件的命令。

3.使用Base64编码绕过。如果系统过滤了敏感字符,敏感命令首先会进行Base64编码,并可能在执行过程中被解码。例如,如果过滤的命令是cat ,则在终端中运行echo \’cat\’ | 获取编码后的字符串Y2F0Cg==,然后运行echo \’Y2F0Cg==\’ 命令。具体的命令,比如显示文件test.txt的内容,是echo \’Y2F0Cg==\’ | test.txt。

4、大括号的不同用途:在Linux Bash中,还可以使用{OS_COMMAND,ARGUMENT}来执行系统命令。例如,{echo,\’Hello\’} 相当于直接echo \’Hello\’。

5.绕过黑名单:

• 拼接绕过:将命令或字符串拆分为多个部分,然后在目标环境中将它们连接起来。例如,a=l;b=s;$a$b 相当于串联的ls 命令。

• 编码旁路:除了Base64编码外,还可以使用十六进制(hex)、八进制(oct)等编码方式。例如echo \’636174202f666c6167\’ | xxd -r -p|bash 可以达到cat /flag 的效果。这里,636174是cat的十六进制编码,2f666c6167是/flag的十六进制编码。

• 绕过单引号和双引号:例如,您可以使用ca\’\’t 或ca\’t 标志来绕过对某些命令的限制。

• 绕过反斜杠:如果命令太长,您可以使用\\ 作为换行符输入来绕过它。例如,ca\\t fl\\ag。

• 使用shell 特殊变量绕过:Linux shell 中的$n 表示传递给脚本或函数的参数。如果该参数不存在,则其值为空。范围。例如,ca$@t fla$@g 或ca$1t fla$2g。

6. 通配符:正确使用通配符可能会导致意想不到的结果。常用的Linux shell通配符有: * 匹配任意字符(包括零个字符);[.] 匹配方括号内的任意字符。 {start.end} 匹配连续字符。例如,cat fla* 匹配以fla 开头的文件,而cat${IFS}fl* 使用$IFS 来避免空间限制并匹配以fl 开头的文件。

请注意,命令注入绕过的具体方法受到多种因素的影响,包括目标系统环境、应用程序实现和施加的安全限制。同时,系统开发人员和管理员必须采取适当的安全措施来防止和减轻命令注入漏洞,例如输入验证、参数化查询和最小权限原则。

执行代码:

PHP 代码执行漏洞的常见原因有:

1. 处理不安全的用户输入:当PHP 应用程序直接使用用户输入动态包含文件、执行函数或操作变量而不进行适当的验证或过滤时,攻击者可以构造恶意输入来执行任意代码。

2. 危险函数的不当使用:某些PHP 函数,如eval()、assert() 和preg_replace()(带有/e 修饰符)如果使用不当可能会导致代码执行漏洞。例如,使用eval()函数直接执行用户输入的字符串。

3. 文件包含漏洞:include()、require() 和其他文件包含函数允许在未经正确验证的情况下使用用户可控输入来指定要包含的文件路径时进行攻击。攻击者可能通过指定恶意代码来执行任意代码。文件路径。

4、反序列化漏洞:当PHP应用程序反序列化不受信任的序列化数据时,类的魔术方法(如__wakeup()、__destruct()等)存在安全问题,可能导致代码执行。

以下是一些可能导致PHP 中代码执行漏洞的功能和使用场景。

1. eval() 函数:将传递的字符串作为PHP 代码执行。

例子:

eval(\’回显\’你好世界!\’;\’)

风险:如果用户可以控制输入到eval() 的字符串,则有可能执行任意恶意代码。

2.assert()函数:通常如果断言为假,就会产生错误,但是如果设置了assert_options(ASSERT_ACTIVE, 1)和assert_options(ASSERT_CALLBACK, \’callback_function\’),那么断言的表达式是列的话,就会被处决。作为代码。

例子:

断言(\’回显“危险!”;\’)

风险:当用户可控的输入传递给assert() 时,可能会发生代码执行。

3. preg_replace()函数(带有/e修饰符):用于执行正则表达式搜索和替换。 /e 修饰符允许您将替换作为PHP 代码运行。

例子:

preg_replace(\’/(.*)/e\’, \’trtoupper($1)\’, \’你好\’)

风险:如果正则表达式的匹配或替换部分由用户控制,则可能会执行恶意代码。

4.create_function()函数:用于动态创建匿名函数。

例子:

$func=create_function(\’$x\’, \’echo $x;\’);

风险:如果函数体是根据用户输入构建的,则可能会出现风险。

在实际开发中,为了避免代码执行漏洞,需要避免使用这些函数,或者在使用时保证输入控制和安全。

#以上关于命令注入和代码执行详细解释的相关内容摘自网络,仅供参考。相关信息请参见官方公告。

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92848.html

(0)
CSDN's avatarCSDN
上一篇 2024年7月4日 下午4:35
下一篇 2024年7月4日 下午4:35

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注