前言
对于Unix或Linux系统的安全测试和网络防御,了解如何绕过命令过滤器非常重要。今天我们将了解一些使用shell 命令绕过安全限制的技术。这些技术通常用于渗透测试来检测系统安全漏洞。
0x00 命令介绍
一般来说,cat /etc/passwd 是查看系统用户信息文件的常用命令。但在某些安全设置下,直接运行该命令可能会被系统的安全机制拦截。以下是一些绕过常见过滤器的创造性方法。
0x01 利用变量截取
猫${HOME:0:1}etc${HOME:0:1}密码
该命令使用shell 变量拦截功能,使用$HOME 变量的第一个字符(通常为/)构建所需的路径,以避免直接字符串匹配过滤。
命令分解
${HOME:0:1}:
这是如何使用Bash 的字符串切片功能来使用参数扩展。 ${HOME:0:1} 获取环境变量HOME 的第一个字符。对于大多数用户来说,$HOME 变量通常是/home/username。所以${HOME:0:1} 得到/。
2.猫:
cat 命令用于连接文件并将其内容打印到标准输出设备(通常是终端)。在这种情况下,cat 命令用于显示文件的内容。
3、连接文件路径:
将${HOME:0:1}(/)的两个结果分别与etc和passwd连接起来,形成/etc/passwd。这实际上构建了完整路径,因此您不必直接写出/etc/passwd,并且可以绕过一些可能正在寻找直接路径引用的安全限制和监视工具。
0x02 编码和转义
`回显$\’猫\\x20\\x2f\\x65\\x74\\x63\\x2f\\x70\\x61\\x73\\x73\\x77\\x64\’`
该方法通过以十六进制显示命令来直观地显示命令并执行必要的操作。
命令分解
回声$\’.\’:
如前所述,此echo 命令打印解码后的字符串(cat /etc/passwd)。 命令替换(“ “):
使用反引号括起来的echo 命令意味着shell 首先执行echo 命令,捕获输出(此处为字符串cat /etc/passwd),并将该输出返回到原始命令位置。
整体效果
在这种特殊情况下,命令将如下所示:
`回显$\’猫\\x20\\x2f\\x65\\x74\\x63\\x2f\\x70\\x61\\x73\\x73\\x77\\x64\’`
事实上,这和直接在shell 中输入是一样的。
猫/etc/passwd
echo 打印此命令的字符串表示形式,该命令通过命令替换进行解释并作为新命令执行。这将在终端或命令行界面中显示/etc/passwd 文件的内容。
0x03 字符转换
cat $(echo . | tr \’!-0\’ \’\’-1\’)etc$(echo . | tr \’!-0\’ \’\’-1\’)passwd
使用tr 命令将某些字符转换为其他字符,可以构造您想要的字符,例如路径分隔符/,从而绕过对某些字符的过滤。
命令分解
1.$(.):
$(.) 是一种命令替换,它执行其中的命令并用外部命令替换输出。此处使用两次来生成单个/字符。
2.回显\’!-0\’\’\’-1\’:
echo .命令打印一个点字符(.)。
tr\’!-0\’\’-1\’
是
t
该命令转换输入字符。这个特定的转换指令意味着:
将所有字符从! 到0(ASCII 表中的连续字符)转换为\’ 到1(也是连续字符序列)。这里重要的是,ASCII 字符! 之后的下一个字符是\’,\’ 后面的字符是#,依此类推,直到/转换为自身(/在ASCII 表中位于! 和0 的范围内)。 ))。 因此,此tr 调用将所有字符转换为/,因为它输出.(不在!-0 范围内,因此不受转换影响)。用于生成/。
3、连接文件路径:
使用两个命令替换生成的/字符与etc 和passwd 连接形成路径/etc/passwd。
0x04 十六进制转换
猫`xxd -r -ps(回声2f6574632f706173737764)`
此方法允许您通过以十六进制格式指定路径/etc/passwd 并通过xxd 命令将其转换为常规文本来绕过基于文本扫描的过滤。
命令分解
xxd-r-ps:
xxd 是一个十六进制转换工具,通常用于生成十六进制转储并将其转换回来。 -r选项表示逆向转换,即将十六进制数据转换为二进制数据。 -ps 选项表示从纯十六进制字符串进行解析。 (回声2f6574632f706173737764):
(.) 是Bash 的进程替换语法,用于创建包含命令输出的临时命名管道。 echo 2f6574632f706173737764 将指定的十六进制字符串打印到管道。该字符串表示/etc/passwd 的ASCII 十六进制编码。 反引号\”\” :
反引号用于命令替换,即执行命令并将输出替换到其原始位置。
整体命令执行和作用
结合上述元素,该命令运行如下:
echo 2f6574632f706173737764 打印字符串2f6574632f706173737764。 xxd -r -ps 获取此十六进制字符串,将其转换为二进制格式,并将其解码到/etc/passwd 中。然后cat 命令获取解码后的路径/etc/passwd 并显示该文件的内容。
0x05 使用Base64编码
回声Y2F0IC9ldGMvcGFzc3dk |
该命令首先将Base64编码的字符串解码为原始命令,然后通过sh执行。
命令分解
回声Y2F0IC9ldGMvcGFzc3dk:
echo 命令用于将字符串及其后面的字符串显示到标准输出。 Y2F0IC9ldGMvcGFzc3dk 是字符串cat /etc/passwd 的Base64 编码格式。 Base64 –decode:
Base64 是一种对数据进行编码和解码的工具。 –decode 或-d 选项用于将Base64 编码数据转换为原始数据。 管道(|):
管道用于将一个命令的输出作为输入传递给另一命令。在此示例中,echo 的输出被传递给base64 命令,然后base64 的输出被传递给sh 命令。 sh:
sh 是一个命令行解释器,用于执行从标准输入读取的命令。在此上下文中,将执行base64 –decode 解码命令。
整体命令执行和作用
结合上述元素,该命令运行如下:
echo 命令输出Base64 编码的字符串Y2F0IC9ldGMvcGFzc3dk。 base64 –decode 获取此编码字符串并将其解码回原始字符串cat /etc/passwd。 sh 命令获取解码后的命令字符串cat /etc/passwd 并执行它。
0x06 使用bash的间接引用
cmd=\’cat /etc/passwd\’
bash -c \’$cmd\’
此方法通过变量间接执行命令,可能绕过简单的命令行监视工具。
命令分解
cmd=\’cat /etc/passwd\’:
该命令行定义了一个名为cmd 的变量,并将字符串cat /etc/passwd 分配给该变量。 cat /etc/passwd 是一个常用命令,用于显示/etc/passwd 文件的内容,该文件包含系统用户的基本信息。 bash -c \’$cmd\’:
bash 是Unix 和Linux 系统上常用的命令行解释器。 -c 选项告诉bash 从字符串中读取命令并执行它。该字符串是紧跟在-c 选项之后的参数。 “$cmd”是对先前定义的变量cmd 的引用,当执行bash -c \’$cmd\’ 时,该变量将扩展为bash -c \’cat /etc/passwd\’。
整体命令执行和作用
结合以上元素,运行这两行命令的过程如下所示:
第一行定义变量cmd 并保存命令cat /etc/passwd。第二行通过bash -c 使用此变量。这实际上告诉新启动的Bash 进程运行cat /etc/passwd 命令。
0x07 利用命令替换
猫$(echo \’/etc/pass\’ | tr \’ \’ \’)wd
该命令使用echo 和tr 间接构建文件路径,避免直接写入完整路径。
命令分解
$(.):
$(.) 是命令替换的一种形式,用于执行命令并将输出替换为原始命令的位置。回显\’/etc/pass\’|\’\’\’:
echo \’/etc/pass\’ 命令打印字符串/etc/pass。 tr \’ \’ \’ 是一个转换命令,用于替换输入中的字符。在此示例中,它用于将空格字符转换为空格字符,而不实际更改输入。虽然这种用法看起来有些多余,但它可以用来说明tr 命令的使用或者作为示例的一部分,并且其实际效果可能会根据情况而有所不同。 连接字符串:
输出/etc/pass 通过命令替换传递给外部cat 命令。字符串wd 直接附加到命令替换的结果后,形成/etc/passwd。
整体命令执行和作用
运行echo \’/etc/pass\’ | tr \’ \’ \’ 将生成/etc/pass 并将其插入到带有命令替换$(.) 的cat 命令中。所以最后执行的命令是cat /etc/passwd。这将在终端上显示/etc/passwd 文件的内容,其中包含系统用户的帐户信息。
0x08 拆分字符串
第1 部分=\’/etc/pas\’
第2 部分=“SWD”
猫$第1部分$第2部分
这种方法通过分隔敏感字符串来避免直接字符串匹配。
命令分解
第1部分=\’/etc/pas\’:
该命令行定义了一个名为part1 的变量,并将字符串/etc/pas 分配给该变量。第2 部分=\’swd\’:
该命令行定义了一个名为part2 的变量,并将字符串swd 分配给该变量。猫$part1$part2:
cat 是Unix 和Linux 系统上用于显示文件内容的命令。 $part1 和$part2 是对先前定义的变量的引用。当执行cat $part1$part2命令时,这两个变量被扩展为各自的值,然后连接起来。所以$part1$part2扩展后就变成了/etc/paswd,其实和/etc/passwd是一样的。
整体命令执行和作用
这一系列命令定义了两个变量part1和part2,并将它们连接成完整路径/etc/passwd。使用cat 命令打印/etc/passwd 文件的内容。该文件包含系统用户的帐户信息。
0x09 环境变量利用
导出PATH_PART=\’密码\’
猫/etc/$PATH_PART
通过环境变量PATH_PART隐藏密钥文件路径。这可能会绕过基于静态路径的监控。
命令分解
导出PATH_PART=\’密码\’:
import 是用于设置或导出环境变量的命令。导出使变量PATH_PART 不仅可用于当前shell 会话,还可用于当前shell 启动的子进程。将字符串“passwd”分配给环境变量PATH_PART。这里的passwd 是/etc/passwd 文件名的一部分。猫/etc/$PATH_PART:
cat 是读取文件并将其内容打印到标准输出设备的命令。 /etc/$PATH_PART 利用Bash 的变量替换功能。运行此命令会将$PATH_PART 替换为其值“passwd”,并构建完整的文件路径/etc/passwd。
整体命令执行和作用
该命令的第一行设置环境变量PATH_PART,使其可供当前会话和所有子进程使用。该命令的第二行将环境变量PATH_PART 的值连接到/etc/路径的末尾,形成完整的文件路径/etc/passwd 并使用cat 命令显示该文件的内容。
0x10 利用awk执行命令
awk \’BEGIN {system(\’cat /etc/passwd\’)}\’
该命令使用awk 的系统函数来执行外部命令,可能绕过直接命令执行监控。
命令分解
awk:
awk 是一种用于文本处理的编程语言,通常用于模式匹配、文本分析和复杂的文本操作任务。开始:
BEGIN 是一种特殊的awk 模式,在awk 处理输入行之前运行。在处理输入文件之前,使用BEGIN 块设置任何必要的预操作。系统(\’猫/etc/passwd\’):
system函数是awk中用于执行外部系统命令的函数。该函数接受一个包含要运行的命令的字符串参数。 “cat /etc/passwd”是传递给系统函数的命令,用于显示/etc/passwd 文件的内容。 /etc/passwd 文件包含系统上所有用户的信息,包括用户名、用户ID、组ID、主目录和shell。
整体命令执行和作用
当执行此awk 命令时,它首先进入BEGIN 块并在处理任何输入之前执行块内的命令。在BEGIN块中,系统函数调用cat /etc/passwd命令将/etc/passwd文件的内容打印到标准输出。
0x11 利用sed执行命令
回声| sed \’e cat /etc/passwd\’
可以使用sed的e函数间接执行命令(替换的执行结果是一个命令)。
命令分解
回声:
通常,echo 命令用于打印后面的字符串,但这里没有指定参数,所以它打印一个空行。 管道(|):
管道用于将一个命令的输出作为输入传递给另一命令。这里,echo 命令的输出(空行)被传递给sed 命令。 sed \’e cat /etc/passwd\’:
sed 是一个流编辑器,用于处理和转换输入。某些版本的sed 使用e 选项将模式空间的内容作为命令执行。这意味着sed 将尝试将模式空间中的任何内容作为命令运行。但是,并非所有sed 版本都支持此用法。当支持时,其正确用法通常是接收模式空间中的动态内容以供执行,而不是静态指定命令。
使用上的问题
大多数标准sed 实现(例如GNU sed)不支持e 作为命令执行选项。在支持此功能的sed 版本中(例如GNU sed 4.2.2 及更高版本),e 命令通常用于处理模式空间中的数据,而不是执行静态指定的命令。因此,在大多数环境中,此命令将失败并出现语法错误。
实际意图
如果您的目标是使用sed 运行cat /etc/passwd 命令,则需要使用不同的方法,如下例所示(除非使用的sed 版本支持e )。
回声\’cat /etc/passwd\’ | sed \’e\’
在这个修改后的例子中:
echo 打印cat /etc/passwd 字符串。该字符串通过管道传输到sed。 sed 使用e 执行传入的命令并显示/etc/passwd 文件的内容。
echo | sed \’e cat /etc/passwd\’ 该命令的配置几乎总是不正确的,因为它错误地使用了sed 的e 选项。正确的使用场景应该根据您的sed 版本的功能和支持进行定制。
0x12 使用perl执行命令
perl -e \’系统(\’cat /etc/passwd\’)\’
Perl 的系统函数允许您执行几乎任何命令。
命令分解
perl:
Perl 是一种功能丰富的编程语言,广泛应用于文本处理、系统管理、网络编程和其他应用程序。 -e 选项:
-e 选项告诉Perl 解释器直接从命令行运行以下代码。这使您可以快速运行小段代码,而无需创建完整的脚本文件。系统(\’猫/etc/passwd\’):
system 是一个用于执行外部命令的Perl 函数。接受包含要运行的命令的字符串参数。在此示例中,传递到系统的命令是cat /etc/passwd。这是一个Unix/Linux 命令,用于显示/etc/passwd 文件的内容。该文件通常包含系统用户的帐户信息,例如用户名、用户ID、组ID、主目录和shell。
整体命令执行和作用
当您运行此命令时,Perl 解释器会解析并执行-e 之后的代码。 system(\’cat /etc/passwd\’) 调用使操作系统运行cat /etc/passwd 命令,其输出显示在标准输出(用户的终端或控制台)上。
0x13 利用python执行命令
python -c \’导入os.system(\’cat /etc/passwd\’)\’
该命令使用Python的os.system方法来执行系统命令,适合绕过基于特定shell语法的过滤器。
命令分解
蟒蛇:
python 命令启动Python 解释器。这用于运行后续的Python 代码。 -c 选项:
您可以使用-c 选项直接从命令行运行Python 代码。这是运行单个命令或一小段代码的简单方法。 Python 代码:import os.system(\’cat /etc/passwd\’):
import os:这部分代码导入Python的os模块,该模块提供了许多与操作系统交互的功能,包括运行命令。 os.system(\’cat /etc/passwd\’): os.system() 是os 模块中用于执行外部命令的方法。该函数接受一个包含要在操作系统命令行执行的命令的字符串。 “cat /etc/passwd”是传递给os.system() 的命令,用于显示/etc/passwd 文件的内容。 /etc/passwd 文件包含系统上所有用户的帐户信息。
整体命令执行和作用
当您运行此命令时,Python 解释器将执行-c 之后指定的代码。代码中的os.system(\’cat /etc/passwd\’) 调用会导致操作系统运行cat /etc/passwd 命令。 cat /etc/passwd 命令的输出(即文件的内容)显示在终端或命令行界面中。
结语:不断探索,精进攻击技术
本文让您更深入地了解绕过命令过滤器的技术。然而,这里介绍的技术仅涉及各种旁路方法的表面。在真实的攻击环境中,往往会遇到更加复杂多变的防御措施,需要不断创新和灵活组合各种命令和代码,以增加绕过技术的有效性和攻击力。
掌握这些技术不仅突破现有的安全防护,而且有利于安全研究的深入发展,更好地了解安全系统潜在的弱点。这样,我们不仅可以为安全社区揭露和修补这些漏洞,还可以在现实战斗中保持技术进步。
进攻与防守之间的战斗永无休止。每一次成功的绕过都提供了更深入的技术理解,每一次失败都提供了战略调整的启示。让我们在法律和道德框架下继续探索这一领域,利用我们的专业知识和技能推动网络安全技术的进步,共同构建更安全的数字世界。
以上关于绕过#command过滤器的信息:探索UnixLinux绕过技术来自网络,仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92345.html