命令行盲注学习
字数 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 # 提取每行第一个字符
三、盲注技术实现
基本思路
- 使用
awk获取特定行 - 使用
cut提取特定字符 - 与测试字符比对
- 匹配则触发
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秒
自动化脚本思路
- 定义字符集(如a-z, 0-9等)
- 遍历字符集逐个测试
- 根据响应时间判断是否命中
- 逐步构建完整信息
四、实战案例解析
案例1:CTFshow Web139
场景特点:
- 使用
exec执行命令,无回显 - 外带和弹shell被限制
cut、sleep等盲注命令未被过滤
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:模式匹配
六、防御措施
-
输入严格过滤
- 过滤特殊字符(
|、&、;等) - 限制命令执行函数
- 过滤特殊字符(
-
限制延迟函数
- 禁用
sleep等时间函数 - 设置执行超时
- 禁用
-
使用安全机制
- 启用
addaudithook等监控机制 - 最小权限原则运行服务
- 启用
-
日志监控
- 记录异常长时间请求
- 监控高频时间盲注特征
七、总结
命令行盲注是一种强大的无回显攻击技术,核心在于:
- 利用时间差作为信息载体
- 组合文本处理命令提取数据
- 通过条件判断触发延迟
防御关键在于限制命令执行和时间函数,同时加强输入验证和监控。在CTF和渗透测试中,掌握盲注技术可以突破许多限制场景,但实际攻击中应谨慎使用以避免被发现。