灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:7377回复:0

利用sql报错帮助进行sql注入

楼主#
更多 发布于:2015-01-28 13:38

我们可以利用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 Classwhere name=3

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

这样我们就能知道 name 列的第一行内容;

等等。

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


喜欢0 评分0
游客

返回顶部