【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

  1. 启动靶机的Apache和MySQL服务(比如在靶机终端输service apache2 startservice mysql start);
  2. 打开Kali的浏览器,访问DVWA地址(比如192.168.75.100/dvwa),登录账号密码(默认admin/admin);
  3. 左侧菜单选"SQL Injection"(SQL注入模块),随意输一个数字(比如1),点"Submit"提交;
  4. 复制浏览器地址栏的URL(比如http://192.168.75.100/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#),这就是漏洞URL(GET提交方式,参数id是注入点)。

步骤2:获取登录Cookie(关键!不然SQLmap会被拦截)

SQLmap需要带着登录凭证才能访问DVWA的漏洞页面,Cookie就是凭证:

  1. 在当前浏览器页面按F12打开开发者工具;
  2. 选"Storage"(存储)→"Cookies",找到"PHPSESSID"和"security"的值(比如PHPSESSID=ni3gsltihh60r1q50tiu4518p3security=low);
  3. 把两个值拼起来,格式是security=low;PHPSESSID=xxx,复制备用。

步骤3:用SQLmap探测漏洞,确认数据库类型

  1. 打开Kali的终端,输入命令(替换成你的URL和Cookie):

    bash 复制代码
    sqlmap -u "http://192.168.75.100/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low;PHPSESSID=ni3gsltihh60r1q50tiu4518p3" --batch
  2. 命令解读:

    • -u:指定漏洞URL;
    • --cookie:带上登录Cookie,避免被DVWA拦截;
    • --batch:自动选择默认选项,不用手动按Y/N;
  3. 运行后,SQLmap会自动探测,最后提示"back-end DBMS is MySQL"(后端数据库是MySQL),说明探测成功。

步骤4:枚举所有数据库

想知道靶机有哪些数据库,输入命令(复用URL和Cookie):

bash 复制代码
sqlmap -u "漏洞URL" --cookie="你的Cookie" --batch --dbs
  • --dbs:列出所有数据库;
  • 运行结果会显示5个数据库(dvwa、information_schema、mysql等),我们重点关注dvwa(DVWA的专用数据库)。

步骤5:枚举dvwa库的所有表

知道了数据库,下一步看里面有哪些表,命令:

bash 复制代码
sqlmap -u "漏洞URL" --cookie="你的Cookie" --batch -D dvwa --tables
  • -D dvwa:指定要查询的数据库是dvwa;
  • --tables:列出该数据库的所有表;
  • 结果会显示2个表:guestbook(留言板)和users(用户表),我们要扒的是users表。

步骤6:枚举users表的所有列

知道了表,再看里面有哪些字段(比如用户名、密码),命令:

bash 复制代码
sqlmap -u "漏洞URL" --cookie="你的Cookie" --batch -D dvwa -T users --columns
  • -T users:指定要查询的表是users;
  • --columns:列出该表的所有列;
  • 结果会显示8个列,重点关注user(用户名)和password(密码,MD5加密)。

步骤7:提取user和password列的数据(最终目标)

最后一步,把用户名和密码扒出来,命令:

bash 复制代码
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个坑(我踩过的错,你别犯!)

  1. Kali和靶机连不通 :确保两者在同一网段(比如都设为NAT模式),用ping 靶机IP测试,不通就检查防火墙(关闭靶机的ufw防火墙:ufw disable);
  2. Cookie输错或过期:Cookie里的PHPSESSID会过期,要是SQLmap提示"302跳转",就重新登录DVWA,再获取一次Cookie;
  3. DVWA安全等级不是Low:高安全等级会拦截SQL注入,一定要在DVWA的"DVWA Security"里设为"Low"。

五、总结:SQL注入的核心逻辑与防护思路

  1. 核心逻辑:网站没有过滤用户输入,导致恶意SQL语句被执行,进而泄露数据库数据;
  2. 防护建议
    • 输入过滤:对用户输入的特殊字符(比如'orand)进行转义;
    • 预编译SQL:用参数化查询,不直接拼接用户输入和SQL语句;
    • 最小权限:数据库账号只给必要权限(比如查询权限,不给删除、修改权限);
    • 定期审计:用工具扫描网站漏洞,及时修复。
相关推荐
x***13392 小时前
【MyBatisPlus】MyBatisPlus介绍与使用
android·前端·后端
Arva .3 小时前
如何监控并优化慢 SQL?
数据库·sql
AI_CPU_GPU_Cloud4 小时前
找工作变容易了
经验分享
海边夕阳20064 小时前
【每天一个AI小知识】:什么是卷积神经网络?
人工智能·经验分享·深度学习·神经网络·机器学习·cnn
z***75154 小时前
【Springboot3+vue3】从零到一搭建Springboot3+vue3前后端分离项目之后端环境搭建
android·前端·后端
必胜的思想钢印4 小时前
修改主频&睡眠模式&停机模式&待机模式
笔记·stm32·单片机·嵌入式硬件·学习
fruge5 小时前
仿写优秀组件:还原 Element Plus 的 Dialog 弹窗核心逻辑
前端
an86950015 小时前
vue新建项目
前端·javascript·vue.js
w***95496 小时前
SQL美化器:sql-beautify安装与配置完全指南
android·前端·后端
半个西瓜.7 小时前
车联网NFC测试:NFC信号嗅探测试.
网络·安全·网络安全·车载系统