zoukankan      html  css  js  c++  java
  • 利用sql报错帮助进行sql注入

    我们可以利用sql报错帮助进行sql注入,这里以sql server 为例:

    sql查询时,若用group by子句时,该子句中的字段必须跟select 条件中的字段(非聚合函数)完全匹配,如果是select * ,那就必须将该表中所有列名都包含在group by 中;若少了哪个,就会报错,报错中会提示如下;

    选择列表中的列 '列名'无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。

    这个提示的列名是按该表中的顺序来的,这时我们可以利用这点进行sql注入中枚举所有列的工作;

    先使用 select * from 表名, having 1=1 

    这时报错中提示的便是第一个列名,

    然后 select * from 表名, group by 第一个列名 

    这时报错中提示的便是第二个列名,

    以此类推,便枚举出所有列

    类似的,同过报错提示,还可以知道许多信息,比如,查询条件中与列名实际类型不符合时,会有类型转换失败提示,如:

    select * from Class
    where name=3

    会提示:在将 nvarchar 值 '高数' 转换成数据类型 int 时失败。

    这样我们就能知道 name 列的第一行内容;(在我尝试时发现报错都是尝试将字符转int,所以列名本来为int的,就无法使用,不知对不对?)

    或where name=11/USER

    提示:在将 nvarchar 值 'dbo' 转换成数据类型 int 时失败。

    这样得到user变量的值(这个可用在全局变量和内置函数上,如@@version等等,据说还可以知道任意列名的值,但我没成功)

    等等。

    当然,数据库的报错一般情况下不会直接显示在应用界面,出现在应用界面的提示完全由程序决定;(ps:想必这也是会有错误页面的原因)!

  • 相关阅读:
    Photoshop教程,视频MP4格式转换为GIF格式
    pyqgis环境配置
    R 输出函数 格式化输出 打印函数
    linux ubuntu 更改终端的默认设置,终端大小,字体
    wps 显示所有的字符,将参考文献排序,插入目录
    在 word 中 怎么让表格旋转方向
    linux argc argv
    linux 命令行的快捷键 vim
    linux 操作系统,以及一般的操作系统 所看书籍
    win 10 快速启动 某些程序
  • 原文地址:https://www.cnblogs.com/zjdyl/p/4248950.html
Copyright © 2011-2022 走看看