利用Linux重定向技术进行RCE漏洞利用
漏洞原理
在网站中用户输入的命令所产生的输出会发送到用户的终端,同样,用户在进行RCE漏洞测试中也会在你的终端上回显。如果开发者不希望在用户终端中输出,则会重定向到/dev/null中。
什么是/dev/null
在Linux和类UNIX操作系统中,/dev/null 是一个特殊的设备文件,它被称为“黑洞”设备,因为它会丢弃所有发送到它的数据。这个设备通常用于丢弃不需要的命令输出,或者作为一个空的输入源。
如果读取一个文件中的内容,正常情况下会直接输出,但是将输出内容重定向到/dev/null中则不会有任何回显。我们尝试获取/dev/null中的内容就会发现内容为空。
[root@localhost /]# cat /flag
this is the flag:flag{123345345}
[root@localhost /]# cat /flag > /dev/null
[root@localhost /]#
[root@localhost /]# cat /dev/null
[root@localhost /]#
常见符号及其用法
符号 | 示例 | 解释 |
---|---|---|
> | echo "Hello" > file.txt | 将 echo 的输出重定向到 file.txt 文件 |
< | wc -l < file.txt | 将 file.txt 作为 wc 命令的输入 |
>> | echo "World" >> file.txt | 将 echo 的输出以追加方式重定向到 file.txt |
<< | cat << EOF | 将输入的文本作为 cat 命令的输入,直到遇到 EOF 结束 |
<> | cat <> file.txt | 以读写模式打开 file.txt 并将其内容作为输入 |
>| | echo "Override" >| file.txt | 强制覆盖写入到 file.txt 文件,即使它具有写保护 |
: > | : > file.txt | 将 file.txt 截断为0长度,或创建空文件 |
>&n | ls >&2 | 将 ls 的标准输出和错误输出重定向到文件描述符 n (如 2 为标准错误输出) |
m>&n | exec 3>&1 | 将文件描述符 3 重定向到描述符 1 ,即输出重定向到标准输出 |
>&- | exec >&- | 关闭标准输出 |
<&n | exec <&0 | 输入来自文件描述符 0 (标准输入) |
m<&n | exec 3<&0 | 将文件描述符 3 重定向到描述符 0 (标准输入) |
<&- | exec <&- | 关闭标准输入文件描述符 |
<&n- | exec <&0- | 重定向并关闭文件描述符 n (标准输入) |
>&n- | exec >&1- | 重定向并关闭文件描述符 n (标准输出) |