1. 命令注入漏洞
- 漏洞描述:攻击者通过操纵输入,将恶意命令嵌入到Bash脚本调用的命令中执行。例如,脚本中使用
eval "$input"
,若input
可控,攻击者可注入恶意命令。
- 扫描工具及方法:
- ShellCheck:它是一个静态分析工具,能检测脚本语法错误及潜在的安全问题。在命令行中运行
shellcheck your_script.sh
,若存在命令注入风险,它会给出相应提示。例如,若脚本中有未经过滤的用户输入直接拼接在命令中,ShellCheck会指出此问题。
- grep:可通过搜索特定模式来初步排查。例如,搜索
eval
关键字以及拼接命令且未对输入进行有效过滤的代码段,命令如grep -r "eval" your_script_dir/
。
2. 路径遍历漏洞
- 漏洞描述:当脚本处理用户输入的路径时,若未对输入进行严格验证,攻击者可利用
../
等字符构造恶意路径,访问或修改非预期的文件或目录。比如脚本根据用户输入的文件名读取文件,若输入../../../etc/passwd
,可能导致敏感文件泄露。
- 扫描工具及方法:
- ShellCheck:同样可检测出部分与路径处理相关的潜在问题。运行
shellcheck your_script.sh
,若发现脚本在处理路径输入时可能存在风险,会给出警告。
- 自定义脚本:可以编写简单的脚本,使用正则表达式搜索
../
等可能用于路径遍历的字符组合。示例脚本如下:
#!/bin/bash
for file in $(find your_script_dir -type f -name "*.sh"); do
if grep -q "\.\./" $file; then
echo "Possible path traversal risk in $file"
fi
done
3. 未初始化变量漏洞
- 漏洞描述:在脚本中使用未初始化的变量,可能导致不可预测的行为,甚至安全风险。例如,在进行文件操作时,未初始化的变量作为文件名,可能导致错误的文件被操作。
- 扫描工具及方法:
- ShellCheck:它能检测出未初始化变量的使用。运行
shellcheck your_script.sh
,对于未初始化变量的使用,ShellCheck会给出相应提示。
- set -u:在脚本开头添加
set -u
,当脚本使用未初始化变量时,脚本会立即停止执行并报错,可借此发现未初始化变量的问题。例如,在脚本开头添加set -u
后运行脚本,若存在未初始化变量,会显示类似“bash: var_name: unbound variable”的错误信息。
4. 权限不当漏洞
- 漏洞描述:脚本以过高权限运行,或者对文件、目录的权限设置不当。比如脚本以root权限运行,但实际上并不需要这么高权限,这增加了被攻击时的风险;或者脚本创建的文件权限设置为所有人可写,导致敏感数据可能被篡改。
- 扫描工具及方法:
- 检查脚本内容:人工审查脚本中涉及权限设置的命令,如
chmod
、chown
等,确保权限设置合理。例如,检查chmod
命令的参数,避免设置过于宽松的权限(如chmod 777
)。
- 使用
stat
命令:对于脚本创建的文件或目录,使用stat
命令检查其权限是否符合预期。例如,stat your_file
可以查看文件的所有者、所属组以及权限设置等信息,对比是否与脚本设计的权限一致。