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
热门就业方向
从目前市场情况来讲,网络安全的就业前景是非常不错的,2022年的统计数据,网络安全专业的缺口已经增长到140万人。
1、就业岗位多,发展方向广
①就业环境:网络安全可以在计算机科学与技术、信息通信、电子商务、互联网金融、电子政务等领域从事相关工作,还可以在政府机关事业单位、银行、保险、证券等金融机构,电信、传媒等行业从事相关工作。
②就业岗位:网络安全工程师、渗透测试工程师、代码审计工程师、等级保护工程师、安全运维工程师、安全运营工程师、安全服务工程师等。
2、薪资待遇可观,提升较快
作为一个新兴行业,网络安全人才的市场需求远远大于供给,企业想真正招到人才,就必须在薪酬福利上有足够的竞争优势。因此,网络安全领域的薪资近年来也呈现稳步增长的态势。
根据工信部发布的《网络安全产业人才发展报告》显示,网络安全人才平均年薪为21.28万元,整体薪资水平较高。数据显示,网络安全人才年薪主要集中在10-20万元,占比40.62%,与往年持平;其次是20-30万元,占比为38.43%,较2020年占比19.48%有显著提高;而年薪在10万以下人才占比由2020年的19.74%下降至2022年的9.08%。由此可见,网络安全行业作为新兴赛道,尚在快速发展阶段,从业人员薪资水平提升较快,也显示出网络安全行业相对更重视人才留存。
3、职业发展空间大
从网络安全专业学习的主要内容来看,包括linux运维、Python开发、渗透测试、代码审计、等级保护、应急响应、风险评估等。可见该网络安全专业的技术性很强,具有鲜明的专业特点,是一门能够学到真正技术的工科类专业之一。
因此,在职业发展上,网络安全专业除了就业岗位众多之外,由于专业技术性较强,在工作单位将处于技术核心骨干地位,职业发展空间很大。
盘点网络安全的岗位汇总
0****1
岗位一:渗透测试工程师
**岗位释义:**模拟黑客攻击,利用黑客技术,挖掘漏洞,提出修复建议。有些大厂,例如奇安信,甚至会将渗透岗位分为红蓝两方,对候选人的技术要求比较高,大部分刚入行的新人,也将渗透岗位作为后期的发展目标。
岗位职责:
-
负责对客户网络、系统、应用进行渗透测试、安全评估和安全加固
-
在出现网络攻击或安全事件时,提供应急响应服务,帮助用户恢复系统及调查取证
-
针对客户网络架构,建议合理的网络安全解决方案
**工作难度:**5颗星
薪资现状:
0****2
岗位二:安全运维工程师
**岗位释义:**维护网络系统的正常、安全运行,如果受到黑客攻击,则需要进行应急响应和入侵排查安全加固。很多刚毕业入行的新人,基本都从运维做起。
岗位职责:
-
日常终端维护,操作系统安装加固
-
完成网络安全设备故障排查、处置
-
完成相关管理制度文档的编写和提交
**工作难度:**3颗星
薪资现状:
0****3
岗位三:安全运营工程师
**岗位释义:**在运维的基础上,高效可持续地不断提升企业的安全防御能力。
岗位职责:
-
负责监控、扫描等各类安全策略的制定和优化
-
负责信息安全事件的应急响应
-
参与网络安全评估工作、安全加固工作和监控等等
**工作难度:**3颗星
薪资现状:
0****4
岗位四:安全开发工程师
**岗位释义:**顾名思义,对安全产品及平台、策略等进行开发工作。
岗位职责:
-
负责网络安全产品的系统技术设计、代码开发与实现、单元测试、静态检查、本地构建等工作;
-
参与公司其他产品的系统技术设计以及研发工作。
**工作难度:**5颗星
薪资现状:
0****5
岗位五:等保测评工程师
**岗位释义:**等保测评也叫等级保护测评,主要负责开展信息安全等级保护测评、信息安全风险评估、应急响应、信息安全咨询等工作 。
岗位职责:
-
网络安全等级保护测评项目实施;
-
Web渗透测试、操作系统安全加固等安全项目实施配合
**工作难度:**3颗星
薪资现状:
0****6
岗位六:安全研究工程师
**岗位释义:**网络安全领域的研究人才。
岗位职责:
-
跟踪和分析国内外安全事件、发展趋势和解决方案
-
承担或参与创新型课题研究
-
参与项目方案设计,组织推动项目落实,完成研究内容、
-
负责网络安全关键技术攻关和安全工具研发
**工作难度:**5颗星
薪资现状:
0****7
岗位七:漏洞挖掘工程师
**岗位释义:**主要从事逆向、软件分析、漏洞挖掘工作
岗位职责:
-
通过模拟实施特定方法所获得的结果,评估计算机网络系统安全状况;
-
通过特定技术的实施,寻找网络安全漏洞,发现但不利用漏洞。
**工作难度:**5颗星
薪资现状:
0****8
岗位八:安全管理工程师
**岗位释义:**负责信息安全相关流程、规范、标准的制定和评审,负责公司整体安全体系建设。
岗位职责:
-
全业务系统网络安全技术体系的规划和建设,优化网络安全架构;
-
负责网络安全相关流程、规范、标准的指定和评审,高效处置突发事件;
-
负责网络安全防护系统的建设,提升网络安全保障水平;
**工作难度:**4颗星
0****9
岗位九:应急响应工程师
**岗位释义:**主要负责信息安全事件应急响应、攻击溯源、取证分析工作,参与应急响应、攻击溯源、取证分析技术的研究,提升整体重大信息安全事件应急处置能力。
岗位职责:
-
负责信息安全事件应急响应、攻击溯源、取证分析工作;
-
对安全事件的应急处置进行经验总结,开展应急响应培训;
-
负责各业务系统的上线前安全测试(黑盒白盒)及渗透测试工作;
-
参与应急响应、攻击溯源、取证分析技术的研究,提升整体重大信息安全事件应急处置能力。
-
跟踪国内外安全热点事件、主流安全漏洞、威胁情报、黑灰产动态并进行分析研究,形成应对方案;
**工作难度:**4颗星
薪酬现状:
10
岗位十:数据安全工程师
**岗位释义:**主要对公司的数据安全的日常维护和管理工作,确保公司数据安全。
岗位职责:
-
负责数据安全日常维护和管理工作,包括数据安全审核、数据安全事件的监控与响应、安全合规的审计与调查等;
-
负责数据安全标准规范的制定和管理,包括数据安全需求识别、风险分析、数据分级分类、数据脱敏、数据流转、泄露防护、权限管控等;推进相关安全管控策略在平台落地、执行。
-
负责开展与数据全生命周期管理有关的各项数据安全工作;
-
负责跨平台、跨地域数据传输、交互等数据安全方案制定与落地
-
定期组织开展数据安全自评工作,发现潜在数据安全风险,制定相应的管控措施,并推进落实整改。
**工作难度:**4颗星
薪酬现状:
黑客/网络安全学习路线
今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。
网络安全学习资源分享:
最后给大家分享我自己学习的一份全套的网络安全学习资料,希望对想学习 网络安全的小伙伴们有帮助!
零基础入门
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
读者福利 |
CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享 (安全链接,放心点击)
1.网络安全学习路线图
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。
技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取技术文档】
(都打包成一块的了,不能一一展开,总共300多集)
3.技术文档和电子书
技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取书籍】
4.工具包、面试题和源码
“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。
最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。
这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。
参考解析:深信服官网、奇安信官网、Freebuf、csdn等
内容特点:条理清晰,含图像化表示更加易懂。
内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…
读者福利 |
CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享 (安全链接,放心点击)