报错型sql注入原理分析
0x00:前言
关于sql注入,经久不衰,现在的网站一般对sql注入的防护也相对加强了,2016年的***测试报告中,出现最多的是xss(跨站脚本***)和明文传输等,但是对sql注入的利用方式,也相对成熟,详细了解sql注入,可以参考之前的文章。http://wt7315.blog.51cto.com/10319657/1828167
今天主要分享下sql注入中的报错型,在大多网上的文章会列出类似于公式的句子,却没解释为什么要使用这样的函数,为什么使用这个函数会出现报错而导致sql注入。
0x01:报错过程
我们先来了解几个函数。
1. rand
()用于产生一个0~1的随机数。
2.floor
()向下取整
3. rand()函数生成0~1的函数,使用floor函数向下取整,值是固定的“0”,我们将rand*2,得到的值就是不固定的,“0”或者“1”。
4.我们再来查询下当前的数据库,我使用的是“dvwa”数据库
5.concat()将符合条件的同一列中的不同行数据拼接,为了待会便于观察,在此插入0x3a,0x3a是十六进制的“:”。
7.查询名字太长,我们来起个别名。
8.我们再一次进行查询,information_schema.tables有多少个表哥,会显示多少列。
9.group by 依据我们想要的规矩对结果进行分组。
10. count() 统计元祖的个数(相当于求和)。
11.接着,我们多重复几次。
0x02:
rand()和rand(0)
1.加上随机因子后,执行多次每次都会报错。为了更彻底的说明报错原因,直接把随机因子去掉,再来一遍看看。
2.先看一条记录的时候,一条记录的话 无论执行多少次也不报错
3.然后增加一条记录,两条记录的话 结果就变成不确定性了
随机出现报错,然后再插入一条,三条记录之后,也和2条记录一样进行随机报错。由此可见报错和随机因子是有关联的
0x03:不确定性与确定性
floor(rand(0)*2)报错的原理是恰恰是由于它的确定性,因为floor(rand()*2)不加随机因子的时候是随机出错的,而在3条记录以上用floor(rand(0)*2)就一定报错,由此可猜想floor(rand()*2)是比较随机的,不具备确定性因素,而floor(rand(0)*2)具备某方面的确定性。
我们分别对floor(rand()*2)和floor(rand(0)*2)在多记录表中执行多次。
可以看到,floor(rand()*2)毫无规律可言,而floor(rand(0)*2)是有规律的。
那么mysql在遇到select count(*) from tables group by x;这语句的时候会建立一个虚拟表(实际上就是会建立虚拟表),整个工作流程就会如下图所示:
1.先建立虚拟表,如下图(其中key是主键,不可重复)
2.开始查询数据,取数据库数据,然后查看虚拟表存在不,不存在则插入新记录,存在则count(*)字段直接加
由此看到 如果key存在的话就+1, 不存在的话就新建一个key。
整个查询过程floor(rand(0)*2)被计算了5次,查询原数据表3次,所以这就是为什么数据表中需要3条数据,使用该语句才会报错的原因。
由于没加入随机因子,所以floor(rand()*2)是不可测的,因此在两条数据的时候,只要出现下面情况,即可报错
MySQL 5.1.5版本中添加了对XML文档进行查询和修改的函数,分别是ExtractValue()和UpdateXML()
我们要学习的便是mysql里的修改函数即updatexml函数
and updatexml(1,concat(null,(select @@version),null),1);
updatexml的爆错原因很简单,updatexml第二个参数需要的是Xpath格式的字符串。我们输入的显然不符合。故报错由此报错。
updatexml的最大长度是32位的,所以有所局限(PS:但是应对大多的已经足够。)如果密码长度超过了32位就不会被显示出来。
extractvalue() id = 1 and (extractvalue(1, concat(0x5c,(selectuser()))))
exp() id =1 and EXP(~(SELECT * from(select user())a))
GeometryCollection()
id = 1 AND GeometryCollection((select * from (select * from(select user())a)b))
polygon()
id =1 AND polygon((select * from(select * from(select user())a)b))
multipoint()
id = 1 AND multipoint((select * from(select * from(select user())a)b))
multilinestring()
id = 1 AND multilinestring((select * from(select * from(select user())a)b))
linestring()
id = 1 AND LINESTRING((select * from(select * from(select user())a)b))
multipolygon()
id =1 AND multipolygon((select * from(select * from(select user())a)b))
转载于:https://blog.51cto.com/wt7315/1891458
报错型sql注入原理分析相关推荐
- 基于GET报错的sql注入,sqli-lab 1~4
根据注入类型可将sql注入分为两类:数字型和字符型 例如: 数字型: sleect * from table where if =用户输入id 字符型:select * from table wher ...
- 帆软报表,报错:sql注入攻击问题
帆软报表,报错:sql注入攻击问题: 解决办法:去数据决策系统-安全管理-SQL注入-关掉禁用特殊关键字选项,如下图所示
- mysql报错型手工注入_mysql手工注入教程
大家早上好!,H.U.C-枫 又和大家见面啦// 本来早想做这个教程的,因为前段时间做过一套mssql的手工注入教程.今天给大家带来的是php+mysql 手工注入.临时找了个点,所以有些东西不能全给 ...
- JavaScript立即执行函数报错--立即执行函数原理分析
JavaScript立即执行函数报错 1.'()'在JavaScript环境中有提升运算符优先级和执行函数的作用如果直接在JavaScript环境中执行'()',环境会报出语法错误提示. 2.'()' ...
- SQL注入教程——(一)SQL注入原理
本系列文章将从SQL注入基础讲解,面向初学者,循序渐进. 如有不足,敬请指正. 前置技能 了解SQL语言.语法.操作.常用函数 (基本的SQL数据库操作是进行SQL注入攻击的基础) 了解PHP语言,以 ...
- mysql注入原理_Mysql报错注入原理分析
报错类型Duplicate entry报错:多次查询插入重复键值导致count报错从而在报错信息中带入了敏感信息. Xpath报错:从mysql5.1.5开始提供两个XML查询和修改的函数,语法错误导 ...
- mysql 绕过select报错_Web安全之SQL注入(原理,绕过,防御)
首先了解下Mysql表结构 mysql内置的information_schema数据库中有三个表非常重要 1 schemata:表里包含所有数据库的名字 2 tables:表里包含所有数据库的所有的表 ...
- python脚本自动化盲注_三、基于报错型注入和sql盲注的自动化实现
通过前面payload的构造,不难发现,对于报错型注入和布尔注入(sql盲注)纯手工注入的效率是非常慢的.这些payload语句虽然复杂,但大部分内容都是相同的,因此,一言不合就写了个脚本自动化注入, ...
- Web网络安全漏洞分析,SQL注入原理详解
本文主要为大家介绍了Web网络安全漏洞分析SQL注入的原理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪 一.SQL注入的基础 1.1 介绍SQL注入 SQL注入就是 ...
最新文章
- web项目数据存入mysql数据库中文乱码问题
- 山果(转载《人民日报》)
- 【最佳实践】如何通过OSS的Bucket Policy设置访问授权?
- 数据库范式1NF 2NF 3NF BCNF
- 安卓4.4.4安装哪个微信版本_??微信又更新!暗黑模式可独立设置,新增群接龙固定入口...
- Layer2匿名交易协议ZKCHAOS与跨链资产桥ChainSwap合作促进跨链隐私保护
- linux查看系统后台,求助,如何查看后台服务
- SQL Server 2008空间数据应用系列十:使用存储过程生成GeoRSS聚合空间信息
- Dev C++使用简明教程
- js一键批量打印_轻松用Lodop实现批量打印功能
- 观影计划:漫威电影宇宙「无限战争」系列
- 完全免费最好的在线pdf转换成word免费版
- zjs-my-diary-0220118
- 二、了解shiro架构 (10 Minute Tutorial on Apache Shiro)
- 台式计算机不休眠,台式机不休眠的解决方法
- LSTM的loss和accuracy近乎不变问题
- 黑群晖升级后无法找到的方法
- DLL文件应该放在哪里?
- 联发科有没有高端处理器_联发科处理器怎么样?真的很差吗?
- 如何远程访问公司的内部办公系统?
热门文章
- python脚本编程实例_C程序调用Python脚本的例子
- 2013_nanjing_onsite
- java == hashcode,java中==和equals和hashCode的区别
- 唯有自己变得强大_物竞天择,适者生存,唯有强大自己,方能百毒不侵
- Linux的SOCKET编程 简单演示
- 计算机系统 学习笔记(0)南京大学(一)第一周
- ptmalloc堆内存管理机制(主要讨论Linux x86下32位系统)
- 动态库(共享库)的制作和使用
- 隐藏马尔科夫模型HMM
- bzoj 4300 绝世好题 —— 思路