Skip to content

DD 加速器

本题考查命令拼接注入的 RCE 利用。

打开题目,我们得到这样一个页面。

dd-accelerator_1dd-accelerator_2

点击开始,可以看到系统 ping 命令产生的输出。我们可以猜测,这个功能就是将用户输入拼接,执行了类似下面的系统命令实现的。

bash
ping -c 1 127.0.0.1

那么,我们想要攻入这台服务器,获取 flag,就得找办法一行执行多个命令。

介绍一下 |&:

| — 管道(pipe)

作用:把左边命令的标准输出(stdout)连接到右边命令的标准输入(stdin)

& — 后台运行符(ampersand)

作用:把命令放到后台执行,shell 立即返回提示符,继续执行后面的命令或接受输入。

还有两个逻辑处理

bash
cmd1 && cmd2 # cmd1 成功 (exit 0) 时才执行 cmd2
cmd1 || cmd2 # cmd1 失败时执行 cmd2

这些都可以让一行执行多个命令。

回到这题来: 我们的输入填在了 IP 的位置,也就是说可以往后添加一个管道符 |,就能注入命令了。

bash
ping -c 1 127.0.0.1 | ls

这题的非预期是用 env,出题人失误忘记清环境变量了

这题的 flag 存在于一个隐藏文件夹。所以我们要用 ls -la <路径> 的方式查看。

dd-accelerator_3

尝试 cat:限制了长度。那该怎么办呢?这个时候就该用通配符 * 了。

通配符是 shell 用来匹配文件名的特殊符号

当你输入一个命令(如 ls *.txt )时,shell 在执行命令之前会先展开通配符,把它替换成所有匹配的文件名,再把结果传给命令。

例如:

sh
ls *.txt

→ Shell 会自动展开成:(假设存在 a.txt b.txt notes.txt)

sh
ls a.txt b.txt notes.txt

然后执行这个命令。

所以我们只需要 cat .<首字母>*/flag 就能读取到 flag 了。