燈火互聯
管理員
管理員
  • 注冊日期2011-07-27
  • 發帖數41641
  • QQ
  • 火幣40943枚
  • 粉絲1085
  • 關注100
  • 終身成就獎
  • 最愛沙發
  • 忠實會員
  • 灌水天才獎
  • 貼圖大師獎
  • 原創先鋒獎
  • 特殊貢獻獎
  • 宣傳大使獎
  • 優秀斑竹獎
  • 社區明星
閱讀:2208回復: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
游客

返回頂部
广东体彩26选5