默认情况下,你在 shell 会话中设置的变量只属于当前 shell 进程。
也就是说,你运行的其他命令不会继承这些变量。
你可以直接在当前 shell 中启动另一个 shell 进程来验证这一点:
hacker@dojo:~$ VAR=1337
hacker@dojo:~$ echo "VAR is: $VAR"
VAR is: 1337
hacker@dojo:~$ sh
$ echo "VAR is: $VAR"
VAR is:
在上面的输出中,$ 是 sh 的提示符。它是一个精简的 shell 实现,作为主 shell 进程的子进程启动。
它没有接收到 VAR 变量!
这当然是合理的。
shell 变量里可能有敏感或特殊的数据,除非明确需要,否则你不会希望这些数据传给其他运行的程序。
那该怎样表明你希望传递某个变量呢?
你需要导出它。
导出变量后,它们就会被传入子进程的环境变量中。
你会在其他关卡中接触环境变量的概念,这里先看看它们的实际作用。
下面是一个例子:
hacker@dojo:~$ VAR=1337
hacker@dojo:~$ export VAR
hacker@dojo:~$ sh
$ echo "VAR is: $VAR"
VAR is: 1337
这里,子 shell 接收到了 VAR 的值,并成功打印了出来!
你也可以把前两行合并起来。
hacker@dojo:~$ export VAR=1337
hacker@dojo:~$ sh
$ echo "VAR is: $VAR"
VAR is: 1337
本关中,你必须运行 /challenge/run,将 PWN 变量设为 COLLEGE 并导出,同时将 COLLEGE 变量设为 PWN,但不要导出它(也就是不要让 /challenge/run 继承它)。
祝你好运!
通过 SSH 连接
在
个人设置 中绑定你的 SSH 公钥后,使用以下命令连接:
ssh hacker@dojo.pwn.college