命令行盲注学习
字数 1526 2025-08-29 08:30:24

命令行盲注技术详解

一、盲注概述

盲注(Blind Injection)是一种在无回显情况下的攻击技术,主要用于无法直接获取执行结果的场景。与SQL盲注类似,命令行盲注通过响应时间差异来判断命令执行结果。

适用场景

  • 无回显的命令执行漏洞
  • 出网限制无法外带数据
  • 内存马所需函数被限制
  • 其他数据外带方式被过滤

优缺点

优点:几乎适用于所有无回显场景
缺点:耗时较长,需要多次请求

二、核心命令解析

1. sleep命令

用于引入时间延迟,是时间盲注的核心。

基本语法:

sleep NUMBER[SUFFIX]...
  • NUMBER:暂停的时间长度
  • SUFFIX:可选时间单位(默认为秒)
    • s:秒
    • m:分钟
    • h:小时
    • d:天

2. awk命令

强大的文本处理工具,用于提取特定行或字段。

基本语法:

awk 'pattern { action }' input_file
  • pattern:匹配模式(可选)
  • action:对匹配行执行的操作(可选)
  • input_file:输入文件(可选)

常用用法:

awk "NR==x" filename  # 获取文件的第x行
  • NR:awk内置变量,表示当前行号

3. cut命令

用于从文件或输入中提取特定部分。

基本语法:

cut OPTION... [FILE]...

常用选项:

选项 说明
-d 指定字段分隔符(默认制表符)
-f 指定要提取的字段(列)
-c 按字符位置提取
-b 按字节位置提取
--complement 反向选择,提取未指定部分

典型用法:

cut -c 1  # 提取每行第一个字符

三、盲注技术实现

基本思路

  1. 使用awk获取特定行
  2. 使用cut提取特定字符
  3. 与测试字符比对
  4. 匹配则触发sleep延迟

基础Payload模板

if [ `执行的命令 | awk "NR==行号" | cut -c 字符位置` == "测试字符" ];then sleep 延迟时间;fi

示例:

if [ `ls / -1 | awk "NR==1" | cut -c 1` == "b" ];then sleep 5;fi

解释:

  • ls / -1:列出根目录内容,每行一个条目
  • awk "NR==1":获取第一行
  • cut -c 1:提取第一个字符
  • 如果第一个字符是"b",则延迟5秒

自动化脚本思路

  1. 定义字符集(如a-z, 0-9等)
  2. 遍历字符集逐个测试
  3. 根据响应时间判断是否命中
  4. 逐步构建完整信息

四、实战案例解析

案例1:CTFshow Web139

场景特点

  • 使用exec执行命令,无回显
  • 外带和弹shell被限制
  • cutsleep等盲注命令未被过滤

Payload示例

if [ `ls / -1 | awk "NR==1" | cut -c 1` == "b" ];then sleep 5;fi

注意事项

  • 过滤了大括号时需调整字符集
  • 可添加~等特殊字符作为占位符
  • 文件名可能包含非常见字符,需调整字符集

案例2:AliyunCTF2025 ezoj

场景特点

  • 使用addaudithook限制执行
  • 允许time.sleep函数
  • 限制最大延迟不超过5秒

绕过技术
参考公开POC绕过addaudithook限制

Payload改进
使用sed替代awk进行行匹配:

if [ `执行的命令 | sed -n "行号p" | cut -c 字符位置` == "测试字符" ];then sleep 延迟时间;fi

五、高级技巧与变种

1. 多字符提取

# 提取多个字符
if [ `ls / -1 | awk "NR==1" | cut -c 1-3` == "bin" ];then sleep 5;fi

2. 多条件组合

if [ `命令` == "值1" ] || [ `命令` == "值2" ];then sleep 5;fi

3. 替代sleep的方法

# 在Python环境中
import time; time.sleep(5) if condition else None

4. 使用其他文本处理工具

  • sed:流编辑器,可替代awk进行行匹配
  • head/tail:获取首尾行
  • grep:模式匹配

六、防御措施

  1. 输入严格过滤

    • 过滤特殊字符(|&;等)
    • 限制命令执行函数
  2. 限制延迟函数

    • 禁用sleep等时间函数
    • 设置执行超时
  3. 使用安全机制

    • 启用addaudithook等监控机制
    • 最小权限原则运行服务
  4. 日志监控

    • 记录异常长时间请求
    • 监控高频时间盲注特征

七、总结

命令行盲注是一种强大的无回显攻击技术,核心在于:

  1. 利用时间差作为信息载体
  2. 组合文本处理命令提取数据
  3. 通过条件判断触发延迟

防御关键在于限制命令执行和时间函数,同时加强输入验证和监控。在CTF和渗透测试中,掌握盲注技术可以突破许多限制场景,但实际攻击中应谨慎使用以避免被发现。

命令行盲注技术详解 一、盲注概述 盲注(Blind Injection)是一种在无回显情况下的攻击技术,主要用于无法直接获取执行结果的场景。与SQL盲注类似,命令行盲注通过响应时间差异来判断命令执行结果。 适用场景 无回显的命令执行漏洞 出网限制无法外带数据 内存马所需函数被限制 其他数据外带方式被过滤 优缺点 优点 :几乎适用于所有无回显场景 缺点 :耗时较长,需要多次请求 二、核心命令解析 1. sleep命令 用于引入时间延迟,是时间盲注的核心。 基本语法: NUMBER :暂停的时间长度 SUFFIX :可选时间单位(默认为秒) s :秒 m :分钟 h :小时 d :天 2. awk命令 强大的文本处理工具,用于提取特定行或字段。 基本语法: pattern :匹配模式(可选) action :对匹配行执行的操作(可选) input_file :输入文件(可选) 常用用法: NR :awk内置变量,表示当前行号 3. cut命令 用于从文件或输入中提取特定部分。 基本语法: 常用选项: | 选项 | 说明 | |------|------| | -d | 指定字段分隔符(默认制表符) | | -f | 指定要提取的字段(列) | | -c | 按字符位置提取 | | -b | 按字节位置提取 | | --complement | 反向选择,提取未指定部分 | 典型用法: 三、盲注技术实现 基本思路 使用 awk 获取特定行 使用 cut 提取特定字符 与测试字符比对 匹配则触发 sleep 延迟 基础Payload模板 示例: 解释: ls / -1 :列出根目录内容,每行一个条目 awk "NR==1" :获取第一行 cut -c 1 :提取第一个字符 如果第一个字符是"b",则延迟5秒 自动化脚本思路 定义字符集(如a-z, 0-9等) 遍历字符集逐个测试 根据响应时间判断是否命中 逐步构建完整信息 四、实战案例解析 案例1:CTFshow Web139 场景特点 : 使用 exec 执行命令,无回显 外带和弹shell被限制 cut 、 sleep 等盲注命令未被过滤 Payload示例 : 注意事项 : 过滤了大括号时需调整字符集 可添加 ~ 等特殊字符作为占位符 文件名可能包含非常见字符,需调整字符集 案例2:AliyunCTF2025 ezoj 场景特点 : 使用 addaudithook 限制执行 允许 time.sleep 函数 限制最大延迟不超过5秒 绕过技术 : 参考公开POC绕过 addaudithook 限制 Payload改进 : 使用 sed 替代 awk 进行行匹配: 五、高级技巧与变种 1. 多字符提取 2. 多条件组合 3. 替代sleep的方法 4. 使用其他文本处理工具 sed :流编辑器,可替代 awk 进行行匹配 head / tail :获取首尾行 grep :模式匹配 六、防御措施 输入严格过滤 过滤特殊字符( | 、 & 、 ; 等) 限制命令执行函数 限制延迟函数 禁用 sleep 等时间函数 设置执行超时 使用安全机制 启用 addaudithook 等监控机制 最小权限原则运行服务 日志监控 记录异常长时间请求 监控高频时间盲注特征 七、总结 命令行盲注是一种强大的无回显攻击技术,核心在于: 利用时间差作为信息载体 组合文本处理命令提取数据 通过条件判断触发延迟 防御关键在于限制命令执行和时间函数,同时加强输入验证和监控。在CTF和渗透测试中,掌握盲注技术可以突破许多限制场景,但实际攻击中应谨慎使用以避免被发现。