重定向黑洞>/dev/null
# 重定向黑洞
分析>/dev/null 2>&1
:
- >:将标准输出重定向
- /dev/null:一个“黑洞”,用于丢弃数据。
- 2>&1:将标准错误(文件描述符2)重定向到标准输出(文件描述符1),即把错误输出和正常输出都导向/dev/null
因此,这个命令的整体效果是,运行命令时,不会在终端上看到任何输出或错误信息。这个技巧常用于需要静默运行的脚本或命令。
if(isset($_GET['c'])){
$c=$_GET['c'];
system($c." >/dev/null 2>&1");
}
1
2
3
4
2
3
4
system($c." >/dev/null 2>&1");
system执行$c的终端命令 ">/dev/null 2>&1" 加上这句后,执行命令但无回显
解决方案:
# 注释
emm,很简单的一个姿势
ctf@ubuntu:~$ ls
1.txt
ctf@ubuntu:~$ ls # >/dev/null 2>&1
1.txt
1
2
3
4
2
3
4
# 一次执行多条命令
在Linux命令行中,分号(;)、竖线(|)、双竖线(||)、和符号(&)以及双与符号(&&)有不同的作用:
在linux终端中,一次是可以执行多个命令的,例如pwd;ls;
,通过这些分隔符,可以分割多个命令
可以通过拼接,实现类似cat flag;ls
,拼接到php里后,就是cat flag;ls >/dev/null 2>&1
,这样第二条命令没有回显,第一条不受影响
分号(;):用于分隔多个命令,依次执行每个命令,不管前面的命令是否成功。 例如:?c=ls;pwd;
竖线(|):管道符号,用于将一个命令的输出传递给另一个命令作为输入。 # 测试失败
双竖线(||):逻辑或运算符,用于在第一个命令失败时执行第二个命令。 例如:?c=ls||
和符号(&):在命令末尾使用表示在后台执行该命令。 例如:?c=pwd%26
双与符号(&&):逻辑与运算符,用于只有在第一个命令成功执行后才执行第二个命令。 例如:?c=pwd%26%26
1
2
3
4
5
2
3
4
5
提示
请注意:其中在使用GET传值时,&和&&都需要进行url编码
因此,在这里使用GET给$c传值时,加入这些用于控制终端命令分隔符的符号,一次执行多条命令,在一条命令结果被吞掉时不至于影响到其他命令
编辑 (opens new window)
最后一次更新于: 2024/10/31, 18:07:08