SQL注入基本知识点总结
SQL注入基本知识
information_schema
MySQL 中存储所有数据库名、所有表名、所有字段名的系统数据库叫 information_schema ,这是在 MySQL 数据库初始化就存在的系统库。库里存储数据库名、表名、字段名的表分别为 schemata 、tables、columns(原始表名为大写,但小写也能取到数据)。
SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA='数据库名'; 解释:从总表中将所需的数据库名查出来
SELECT * FROM information_schema.xxxxx WHERE TABLE_NAME = 'sss' ; 解释:从xxxx数据库中把表名为sss里面的数据查出来
| 表名 | 关键字段 |
|---|---|
| schemata | schema_name [数据库名] |
| tables | table_schema [数据库名],table_name [表名] |
| columns | table_schema [数据库名],table_name [表名],column_name [列名] |
select schema_name from information_schema.schemata 查询所有的数据库名称 select table_name from information_schema.tables where table_schema = 'mysql ' 查询名为 mysql 数据库中的表名 select column_name from information_schema.columns where table_name = 'user' and table_schema = 'mysql' 查询名为mysql数据库下user表中的字段名称 select (user,password) from mysql.user 查询数据库为mysql下user表中user和password字段下的内容
concat()函数
功能:将多个字符串连接成一个字符串。
语法:concat(str1, str2,...)
返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。
1:select concat (id, name, score) as info from student;
返回的结果就是 1小明79
若是嫌格式数据显示不够清楚,可以加 ‘-’
select concat (id, '-',name, '-', score) as info from student;
返回的结果就是 1-小明-79
group_coucat函数()
group_concat ( [DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'] )
将group by产生的同一个分组中的值连接起来,返回一个字符串结果
例:select name, group_concat (id) from student group by name;
小明 | 1,5,6
小丽 | 2,4
小伟 | 3
小红 | 7
这样就使用group_concat()和group by显示相同名字的人的id号
order by
语句判断,判断该表中一共有几列数据
order by 3页面回显正常,order by 4页面回显不正常,说明此表一个有3列。
union 联合查询
根据SQL语言的特性,使用联合查询联合的结果集之间必须具有相同数量的列名(也就是列数)(也就是说,必须在已知列数的情况下才能使用联合查询,所以联合查询的使用必须在 order by 之后)
查询数据库信息 @@version @@datadir
查询用户名,数据库名 user() database()
文件读取 union select 1,load_file('C:\\wondows\\win.ini')#
写入 webshell select..into outfile...
回显点
联合注入是需要显示结果的,这里就会用到一个叫做回显点的东西。
回显点就是 SQL 查询结果显示在页面上位置,有回显点的 SQL 注入叫做回显点注入。
比如一篇文章的标题、作者、时间、内容等等,这些都可能成为回显点。
继续上面的,查询字段数可以通过 order by x 实现。这边我学到一个知识点,order by 不仅可以按照表中的某个字段名排序,还可以用数字代表查询结果的列(column)进行排序。
比如查询结果有两列,id、name,order by 1 就等于 order by id。
与 limit 不同,order by 从 1 开始计数,0 列不存在,大于查询结果列数会报错。
所以可以通过 order by x 测算出查询结果列数。
select id,name from user where id=1 order by 3 报错,则说明运行的 SQL 语句查询字段数为 2。
知道了查询结果列数,就可以通过联合查询返回需要回显的信息了。
想要显示我们需要的信息,可以将当前的查询结果置空,即判断条件改成 false。
就比如说一共有三列 ?id=1 返回正常 我们需要构造 ?id= -1 union select 1,2,3 from xxx where xxx
目的就是,数据库查询不到 id=-1 的数据,就不会有结果返回,也就没有显示,但是后面的语句会查询出来,会出现在原先的显示位置,这样就把我们想要的数据查询出来 了
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编码绕过
SQL注入----盲注
基于布尔 SQL 盲注
基于时间的 SQL 盲注
基于报错的 SQL 盲注
SQL注入基本知识点总结的更多相关文章
- sql注入知识点整理(基础版)
sql注入知识点整理(基础版) 基本步骤 判断是否报错 判断闭合符号 判断注入类型 构建payload 手工注入或者编写脚本 基本注入类型 报错型注入 floor公式(结果多出一个1):and (se ...
- sql注入原理+mysql相关知识点
什么是SQL注入 sql就是经常说的数据库,而sql注入就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.SQL注入是比较常见的网络攻击 ...
- 关于防止sql注入的几个知识点
1.PDO预处理是首选. 你可以把他看成是要运行的sql的已经编译过的模板,它可以用变量参数进行定制 它有两个显著优点: 1.1:查询仅需解析一次,但可以用相同或者不同参数执行多次.换句话说如果要以不 ...
- sql注入知识点
需找sql注入点1\无特定目标inurl:.php?id= 2\有特定目标:inurl:.php?id= site:target.com 3\工具爬取spider,对搜索引擎和目标网站的链接进行爬取 ...
- 有关SQL注入的一些小知识点
1.判断注入点: 本质原理是找一个需要后台处理后,提交给数据库的点,我理解为用户可以控制并输入后台数据库的变量,比如我们DVWA SQL injection 的ID ,我们可以通过闭合单引号,#注释 ...
- C# sql语句拼接时 like情况的防sql注入的用法
今天下午同事问我一个比较基础的问题,在拼接sql语句的时候,如果遇到Like的情况该怎么办. 我原来的写法就是简单的拼接字符串,后来同事问我如果遇到sql注入怎么办.我想了下,这确实是个问题. 刚在网 ...
- SQL注入原理及绕过安全狗
1.什么是SQL注入攻击 SQL注入攻击指的是通过构造特殊的输入作为参数插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令 http://www.xxx.com/list. ...
- SQL注入关联分析
在Web攻防中,SQL注入绝对是一个技能的频繁项,为了技术的成熟化.自动化.智能化,我们有必要建立SQL注入与之相关典型技术之间的关联规则.在分析过程中,整个规则均围绕核心词进行直线展开,我们简单称之 ...
- Sql注入测试--Sqlmap
慕课网sqlmap学习笔记: 一.SQL注入 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 例如 (1)在url上 ...
随机推荐
- Guitar Pro 7教程之如何导入吉他谱
在前面的章节小编为大家也讲解了不少关于Guitar Pro 的相关教程,譬如{cms_selflink page='index' text='Guitar Pro下载'},安装等等一系列的使用教程,前 ...
- MathType中的条件概率的输入
条件概率公式是高中数学的概率知识中比较常用的一个公式,今天我们来介绍一下在MathType中如何输入条件概率公式. 具体步骤如下: 步骤一 打开专业的公式编辑软件MathType 7,在输入框中输入& ...
- 在家看电影音效太差?Boom 3D帮你轻松升级
新片上映后,很多人都会选择去电影院观看,一是为了第一时间看到电影,还有一个原因就是电影院的音效往往可以让人身临其境,更好地感受电影的氛围.那如果在家刷片我们该怎么办呢? 我们可以使用Boom 3D这款 ...
- 下载器Folx如何实现排队下载功能
用户在下载多个文件时,当然会希望这些文件都能同时下载,以达到短时间内完成下载任务的目的.但另一方面来说,同时下载过多文件,会分散带宽资源,降低了每个文件的下载速度,从而导致下载时间的延长. 为了实现多 ...
- Nacos安装与启动教程
前言 Nacos是阿里巴巴集团开源的一个易于使用的平台,专为动态服务发现,配置和服务管理而设计,Nacos基本上支持现在所有类型的服务,例如,Dubbo / gRPC服务,Spring Cloud R ...
- 04.vue获取微博授权URL
1.在Vue页面加载时动态发送请求获取微博授 权url 1.1 在 components\common\lab_header.vue 中写oauth动态获取微 博授权**URL // 获取微博登录地址 ...
- Vue 3.0 升级指南
本文由葡萄城技术团队原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 2020年9月18日Vue 3.0正式发布,距离2016年10月1日Vue ...
- Java基础教程——模拟B/S结构的服务器
浏览器发送请求,用Java模拟写个简单的服务器,浏览器可以收到响应. 执行下列代码(设置static final int TEST = 1), 使用浏览器访问:http://127.0.0.1:888 ...
- Python是什么?
Python 是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python 由 Guido van Rossum 于 1989 年底发明,第一个公开发行版发行于 1991 年. 像 Perl ...
- .net core3.1开始页面实时编译
安装NuGet包 Install-Package Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation startup.cs 中的ConfigureSe ...