SQL注入漏洞
SQL注入
判断注入方式
1%' and 1=2# 1%' and 1=1# id = 1 and 1=1 id = 1 and 1=2 id = 1 or 1=1 id = '1' or '1'='1' id=" 1 "or "1"="1"
万能密码
admin’or’1’=’1
判断列数
1%'order by 5#
sql注释符
# 单行注释 注意与 url 中的#区分,常编码为%23 --空格 单行注释 注意为短线短线空格 /*()*/ 多行注释 至少存在俩处的注入 /**/常用来作为空
注入流程
是否存在注入并且判断注入类型 判断字段数 order by 确定回显点 union select 1,2 查询数据库信息 @@version @@datadir 查询用户名,数据库名 user() database() 文件读取 union select 1,load_file('C:\\wondows\\win.ini')# 写入 webshell select..into outfile... 补充一点,使用 sql 注入遇到转义字符串的单引号或者双引号,可使用 HEX 编码绕过
Mysql相关介绍
在 mysql5 版本以后,mysql 默认在会把所有的数据库存放在一个叫 infomation_schema 里面,这个库里面有很多表,重点是这三个表 columns 、tables、SCHEMATA
SCHEMATA 表字段 SCHEMA_NAME 记录着库的信息
tables 表字段 TABLE_SCHEMA 、TABLE_NAME 分别记录着库名和表名
columns 存储该用户创建的所有数据库的库名、标名和字段名。
通过 infomation_schema 查询 www_dvwa_com 库里所有的表和字段
select * from information_schema.`COLUMNS` where TABLE_SCHEMA='www_dvwa_com
查询某个库某个表的字段可以这样查询
select * from information_schema.COLUMNS where TABLE_SCHEMA='www_dvwa_com' and TABLE_NAME='users'
SQL注入分类
按照SQLMap区分
UNION query SQL injection(联合查询注入) Stacked queries SQL injection(多语句查询注入)(堆叠查询) Boolean-based blind SQL injection(布尔型注入) Error-based SQL injection(报错型注入) Time-based blind SQL injection(基于时间延迟注入)
按照接受请求类型区分
GET 注入 GET 请求的参数是放在 URL 里的,GET 请求的 URL 传参有长度限制 中文需要 URL 编码 POST 注入 POST 请求参数是放在请求 body 里的,长度没有限制 COOKIE 注入 COOKIE 参数放在请求头信息,提交的时候 服务器会从请求头获取
按照注入数据类型分类
int 整型 select * from users where id=1 sting 字符型 select * from users where username='admin' like 搜索型 select * from news where title like '%标题%'
利用方式
1.判断是否存在注入,注入数据类型是字符型还是数字型 2.猜解 SQL 查询语句中的字段数 order by N 3.确定显示的字段顺序 4.获取当前数据库 5.获取数据库中的表 6.获取表中的字段名 7.查询到账户的数据
SQL注入常用测试语句
常见注入方式
union 联合查询注入
堆叠查询注入
布尔型注入
盲注
报错型注入
基于时间延迟注入
进阶注入
时间注入
堆叠注入
二次注入
宽字节注入
Cookie注入
XFF注入
Base64编码注入
防御方式
代码层最佳防御 sql 漏洞方案:采用 sql 语句预编译和绑定变量,是防御 sql 注入的最佳方法。
( 1 )所有的查询语句都使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到 SQL 语句中。当前几乎所有的数据库系统都提供了参数化 SQL 语句执行接口,使用此接口可以非常有效的防止 SQL 注入攻击。
( 2 )对进入数据库的特殊字符( ' <>&* 等)进行转义处理,或编码转换。
( 3 )确认每种数据的类型,比如数字型的数据就必须是数字,数据库中的存储字段必须对应为 int 型。
( 4 )数据长度应该严格规定,能在一定程度上防止比较长的 SQL 注入语句无法正确执行。
( 5 )网站每个数据层的编码统一,建议全部使用 UTF-8 编码,上下层编码不一致有可能导致一些过滤模型被绕过。
( 6 )严格限制网站用户的数据库的操作权限,给此用户提供仅仅能够满足其工作的权限,从而最大限度的减少注入攻击对数据库的危害。
( 7 )避免网站显示 SQL 错误信息,比如类型错误、字段不匹配等,防止攻击者利用这些错误信息进行一些判断
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!