程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL注入漏洞全接觸--進階篇(一)

SQL注入漏洞全接觸--進階篇(一)

編輯:關於SqlServer

  接下來,我們就繼續學習如何從數據庫中獲取想要獲得的內容,首先,我們先看看SQL注入的一般步驟:  

  第一節、SQL注入的一般步驟  

  首先,判斷環境,尋找注入點,判斷數據庫類型,這在入門篇已經講過了。  

  其次,根據注入參數類型,在腦海中重構SQL語句的原貌,按參數類型主要分為下面三種:  

  (A) ID=49 這類注入的參數是數字型,SQL語句原貌大致如下:

  Select * from 表名 where 字段=49

  注入的參數為ID=49 And [查詢條件],即是生成語句:

  Select * from 表名 where 字段=49 And [查詢條件]  

  (B) Class=連續劇 這類注入的參數是字符型,SQL語句原貌大致概如下:

  Select * from 表名 where 字段=’連續劇’

  注入的參數為Class=連續劇’ and [查詢條件] and ‘’=’ ,即是生成語句:

  Select * from 表名 where 字段=’連續劇’ and [查詢條件] and ‘’=’’  

  (C) 搜索時沒過濾參數的,如keyWord=關鍵字,SQL語句原貌大致如下:

  Select * from 表名 where 字段like ’%關鍵字%’

  注入的參數為keyWord=’ and [查詢條件] and ‘%25’=’, 即是生成語句:

  Select * from 表名 where字段like ’%’ and [查詢條件] and ‘%’=’%’  

  接著,將查詢條件替換成SQL語句,猜解表名,例如:  

  ID=49 And (Select Count(*) from Admin)>=0  

  如果頁面就與ID=49的相同,說明附加條件成立,即表Admin存在,反之,即不存在(請牢記這種方法)。如此循環,直至猜到表名為止。  

  表名猜出來後,將Count(*)替換成Count(字段名),用同樣的原理猜解字段名。  

  有人會說:這裡有一些偶然的成分,如果表名起得很復雜沒規律的,那根本就沒得玩下去了。說得很對,這世界根本就不存在100%成功的黑客技術,蒼蠅不叮無縫的蛋,無論多技術多高深的黑客,都是因為別人的程序寫得不嚴密或使用者保密意識不夠,才有得下手。  

  有點跑題了,話說回來,對於SQLServer的庫,還是有辦法讓程序告訴我們表名及字段名的,我們在高級篇中會做介紹。  

  最後,在表名和列名猜解成功後,再使用SQL語句,得出字段的值,下面介紹一種最常用的方法-Ascii逐字解碼法,雖然這種方法速度很慢,但肯定是可行的方法。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved