MST

星途 面试题库

面试题:Bash脚本中的常见代码漏洞及检测方法

请列举至少3种Bash脚本中常见的代码漏洞,并简单描述如何使用基本工具对这些漏洞进行扫描。
23.8万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试

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权限运行,但实际上并不需要这么高权限,这增加了被攻击时的风险;或者脚本创建的文件权限设置为所有人可写,导致敏感数据可能被篡改。
  • 扫描工具及方法
    • 检查脚本内容:人工审查脚本中涉及权限设置的命令,如chmodchown等,确保权限设置合理。例如,检查chmod命令的参数,避免设置过于宽松的权限(如chmod 777)。
    • 使用stat命令:对于脚本创建的文件或目录,使用stat命令检查其权限是否符合预期。例如,stat your_file可以查看文件的所有者、所属组以及权限设置等信息,对比是否与脚本设计的权限一致。