首页 > 数据库 >想做黑客?先来学习 SQL 注入,一文带你学会!黑客技术零基础入门到精通教程建议收藏!

想做黑客?先来学习 SQL 注入,一文带你学会!黑客技术零基础入门到精通教程建议收藏!

时间:2024-11-28 20:32:46浏览次数:7  
标签:username users 查询 黑客技术 黑客 SQL password SELECT

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 的机会,从而避免注入。

// 使用 Sequelize
const 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注入漏洞。

网络安全学习资源分享:

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

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

因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,请看下方扫描即可前往获取

标签:username,users,查询,黑客技术,黑客,SQL,password,SELECT
From: https://blog.csdn.net/cxyxx12/article/details/144088063

相关文章

  • 网络安全中什么是CC攻击?CC攻击怎么防御?黑客技术零基础入门到精通,收藏这一篇就够了!
    前言这是晓晓给粉丝盆友们整理的网络安全渗透测试入门阶段dos与ddos渗透与防御基础教程喜欢的朋友们,记得给晓晓点赞支持和收藏一下,关注我,学习黑客技术。随着互联网的发展和技术的进步,网络安全问题日益严峻,网络攻击手段层出不穷,其中CC攻击就是一种比较常见的网络攻击手段......
  • MYSQL库的操作(如果想知道MYSQL中有关库的操作的知识,那么只看这一篇就足够了!)
        前言:在日常数据库管理中,熟练掌握MySQL的基本操作尤为重要。本文将详细介绍MySQL数据库的创建、查看、修改和删除操作。✨✨✨这里是秋刀鱼不做梦的BLOG✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客在正式开始讲解之前,先让我们看一下本......
  • 二进制安装MySQL8
    二进制安装MySQL81.创建用户组[root@localhost~]#groupadd-g27mysql&&useradd-g27-u27-M-s/sbin/nologinmysql#创建了一个名为mysql的用户和组,分别赋予了它们特定的ID(UID和GID为27),并设置了用户不能直接登录系统,确保MySQL服务在一个具有特定权限和限制的......
  • 【网络安全】黑客工具之Nmap详细使用教程——扫描器主机、端口、版本、OS、漏洞扫描基
     (一)主机发现1、批量Ping扫描: 批量扫描一个网段的主机存活数。例:nmap-sP192.168.60.1/24  ##使用ping批量扫描192.168.60段的存活主机。扫描IP地址范围: 可以指定一个IP地址范围例:nmap-sP192.168.60.20-100扫描192.168.60段20-100之间的存活主机2、跳过Ping探......
  • MySQL执行计划explain
    ......
  • mysql表
    创建users表(用户信息表)假设我们要记录用户的基本信息,如用户ID、姓名、电子邮件、联系电话、注册日期等。sql--在数据库'weather'中创建一个名为'users'的表USEweather;CREATETABLEusers(idINTAUTO_INCREMENTPRIMARYKEY,--用户ID,主键,自增fir......
  • PostgreSql Docker 主从热备,异步流复制方案
    环境说明DockerWindows11PostgreSql16方案步骤0.宿主机准备:找个地方创建一个文件夹用来挂载容器中数据库Data文件夹,这里我用的是:C:\Users\Administrator\docker\Postgresql\replication1.主数据库准备:执行dockerrun命令,创建主数据库容器:pgsmasterdockerrun......
  • mysql函数
    #字符串函数#拼接两个字符串concat(字符串1,字符串2)selectconcat('123','456');#123456#字符串中所有字符转小写lower(字符串)selectlower('Hello');#hello#字符串中所有字符转大写upper(字符串)selectupper('Hello');#HELLO#字符串向左侧补充长......
  • DataGrip如何导入和导出sql文件
    导出右键选择需要导出的数据库名称,我这里选择的是company然后依次按图操作即可选择好后会弹出一个窗口第一个路径选择mysql根目录下的/bin/mysqldump.exe程序,根据自身情况选择第二个路径为保存路径,我D盘下的mysql_File\DataGrip,名称默认为company.sql导出是提示......
  • 成为一名厉害的黑客,必须知道的12个步骤,黑客入门
        黑客攻防是一个极具魅力的技术领域,但成为一名黑客毫无疑问也并不容易。你必须拥有对新技术的好奇心和积极的学习态度,具备很深的计算机系统、编程语言和操作系统知识,并乐意不断地去学习和进步。如果你想成为一名优秀的黑客,下面是10种最重要的基础条件,请认真阅读:1.了......