Code-Breaking 2020 Bashinj

前天 P 神更新了 Code-Breaking 2020 的第一道题 bashinj ,小密圈里也有师傅放出 wp 了,趁热学习一下。 前置知识 #!/bin/bash source ./_dep/web.cgi echo_headers name=${_GET["name"]} [[ $name == "" ]] && name='Bob' curl -v http://httpbin.org/get?name=$name 题目起源于 4 月 16 日 P 神在小密圈分享的一篇帖子,主要内容是: 原文:https://t.zsxq.com/NfauNNv Bash 语言本身就是执行命令的媒介,但代码注入漏洞的核心原理是相同的,需要一个执行“代码”或“命令”的方法可控,而不是控制一个静态的语法结构中的参数。 上述 example 代码中的 curl,你可以理解为一个“函数”,这里的场景仅仅是函数的参数部分可控,所以不存在代码注入漏洞。 文中提到了对代码注入的一个误区,比如本题中的 curl -v http://httpbin.org/get?name=$name ,第一反应是用 &&id 的方式拼接执行自己想要的命令,其实是错误的。看完帖子似懂非懂,下面做一个实验来更好的理解。 $ export aaa="&&id" # 测试1 $ echo "test 1"$aaa # 测试2 $ eval echo "test 2"$aaa 结果如上图。在测试 1 中,$aaa 的值是作为 echo 函数的参数进行处理的,而不是与 echo 同等地位的 bash 命令。在测试 2 中,$aaa 的值与 echo "test 2" 拼接后作为 eval 的参数,也就是 eval "echo test 2 && id" ,这才是我们所设想的命令拼接的情况。...

2020-04-19 · 2 分钟 · rook1e