云计算百科
云计算领域专业知识百科平台

【CTF】一键查找Linux中的flag脚本 find_flag.sh

一、一键查找flag脚本 find_flag.sh

功能:递归扫描指定目录/单个文件,精准匹配 flag{任意字符} 格式,高亮输出、显示文件路径+行数,兼容普通文件、压缩包不解析、过滤二进制垃圾文件。

#!/bin/bash

# 颜色定义
RED='\\033[0;31m'
GREEN='\\033[0;32m'
NC='\\033[0m'

# 帮助说明
usage(){
echo -e "${GREEN}使用方式:${NC}"
echo " ./find_flag.sh 文件名 # 查找单个文件"
echo " ./find_flag.sh 目录路径 # 递归查找整个目录"
echo " ./find_flag.sh # 默认递归查找当前目录"
echo -e "匹配规则:精准查找 flag{xxxx} 格式字符串\\n"
}

# 判断入参
if [ $# -eq 0 ];then
target="."
elif [ "$1" = "-h" ] || [ "$1" = "–help" ];then
usage
exit 0
else
target="$1"
fi

echo -e "${GREEN}==========开始扫描路径:${target} ==========${NC}"
echo ""

# grep参数解释:
# -r 递归遍历 -n 显示行号 -I 忽略二进制文件 -o 只输出匹配内容
# -E 正则扩展,正则:flag\\{[^{}]*\\}
grep -rnIoE 'flag\\{[^{}]*\\}' "$target" –color=auto 2>/dev/null

echo ""
echo -e "${GREEN}==========扫描结束 ==========${NC}"

二、使用步骤

  • 创建脚本
  • vim find_flag.sh

    粘贴上面全部代码,保存退出。

  • 赋予执行权限
  • chmod +x find_flag.sh

  • 三种用法
  • # 1. 扫描当前全部目录
    ./find_flag.sh

    # 2. 扫描指定单个文件
    ./find_flag.sh /tmp/test.txt

    # 3. 递归扫描指定文件夹
    ./find_flag.sh /home/user/ctf

    # 4. 查看帮助
    ./find_flag.sh -h

    三、精简单行命令(无需脚本,临时快速查找)

    grep -rnIoE 'flag\\{[^{}]*\\}' . –color=auto 2>/dev/null

    四、补充拓展脚本(进阶:保存结果到日志)

    #!/bin/bash
    RED='\\033[0;31m'
    GREEN='\\033[0;32m'
    NC='\\033[0m'
    logfile="flag_search.log"
    > $logfile
    target=${1:-.}

    echo -e "${GREEN}开始扫描,结果同时输出屏幕与 $logfile${NC}"
    grep -rnIoE 'flag\\{[^{}]*\\}' "$target" 2>/dev/null | tee $logfile
    echo -e "${GREEN}查找完成,日志已保存至 $logfile${NC}"

    关键正则说明

    flag\\{[^{}]*\\}

    • flag\\{:固定开头flag{
    • [^{}]*:匹配{}内部所有非大括号字符,防止跨括号误匹配
    • \\}:闭合右大括号

    特性说明

  • 自动忽略二进制文件、设备文件、报错信息;
  • 高亮标红匹配到的flag;
  • 输出格式:文件路径:行数:flag{xxx};
  • 适配CTF常见flag格式,通用性极强。
  • 赞(0)
    未经允许不得转载:网硕互联帮助中心 » 【CTF】一键查找Linux中的flag脚本 find_flag.sh
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!