今天在分析数据包搜索资料的时候,偶然看到了一篇 Freebuf 文章提到了 ${IFS}。
附下链接:
https://www.freebuf.com/articles/web/286513.html
知识盲区,所以特地搜了一圈,记录下自己的理解。
$IFS 是 shell 脚本中的一种 set 变量,当 shell 处理 "命令替换" 和 "参数替换" 时,shell 根据 IFS 的值,默认是 space, tab, newline 来拆解读入的变量,然后对特殊字符进行处理,最后重新组合赋值给该变量。
如果直接 echo "cd${IFS}/home" %{IFS} 内的值应该是 \n
但是 当用双引号包裹住 $IFS 时,$IFS 会失效。比如创建 shell 文件写入下方内容
输入
IFS='-'
string2="1--2--3--4"
echo $string2
echo "$string2"
输出:
1 2 3 4
1--2--3--4
根据链接中的黑客攻击操作,尝试在服务器上直接执行:
/bin/sh${IFS}-c${IFS}'cd${IFS}/home/target;ls${IFS}-l'
这种写法的命令是可以被执行的,并且能拿到命令的执行结果
如果这种命令出现在了 URL 中,且 WEB 中存在目录穿越漏洞,且 IPS 或者 WAF 在检测 URL 时没有包含对 ${IFS} 的判断 那么很有可能会被攻击者得手
那时候攻击者可能就是提取的 passwd 文件,nc 回连等操作了。
如果后续有新的学习心得,再补充吧~