ASP漏洞全接觸-進階篇

來源:互聯網
上載者:User
  在入門篇,我們學會了SQL注入的判斷方法,但真正要拿到網站的保密內容,是遠遠不夠的。接下來,我們就繼續學習如何從資料庫中擷取想要獲得的內容,首先,我們先看看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逐字解碼法,雖然這種方法速度很慢,但肯定是可行的方法。

  我們舉個例子,已知表Admin中存在username欄位,首先,我們取第一條記錄,測試長度:

  http://www.19cn.com/showdetail.asp?id=49 ;;and (select top 1 len(username) from Admin)>0

  先說明原理:如果top 1的username長度大於0,則條件成立;接著就是>1、>2、>3這樣測試下去,一直到條件不成立為止,比如>7成立,>8不成立,就是len(username)=8

  當然沒人會笨得從0,1,2,3一個個測試,怎麼樣才比較快就看各自發揮了。在得到username的長度後,用mid(username,N,1)截取第N位字元,再asc(mid(username,N,1))得到ASCII碼,比如:

  id=49 and (select top 1 asc(mid(username,1,1)) from Admin)>0

  同樣也是用逐步縮小範圍的方法得到第1位字元的ASCII碼,注意的是英文和數位ASCII碼在1-128之間,可以用折半法加速猜解,如果寫成程式測試,效率會有極大的提高。

   第二節、SQL注入常用函數

  有SQL語言基礎的人,在SQL注入的時候成功率比不熟悉的人高很多。我們有必要提高一下自己的SQL水平,特別是一些常用的函數及命令。

  Access:asc(字元) SQLServer:unicode(字元)

  作用:返回某字元的ASCII碼

  Access:chr(數字) SQLServer:nchar(數字)

  作用:與asc相反,根據ASCII碼返回字元

  Access:mid(字串,N,L) SQLServer:substring(字串,N,L)

  作用:返回字串從N個字元起長度為L的子字串,即N到N+L之間的字串

  Access:abc(數字) SQLServer:abc (數字)

  作用:返回數位絕對值(在猜解漢字的時候會用到)

  Access:A between B And C SQLServer:A between B And C

  作用:判斷A是否界於B與C之間

   第三節、中文處理方法

  在注入中碰到中文字元是常有的事,有些人一碰到中文字元就想打退堂鼓了。其實只要對中文的編碼有所瞭解,“中文恐懼症”很快可以克服。

  先說一點常識:

  Access中,中文的ASCII碼可能會出現負數,取出該負數後用abs()取絕對值,漢字字元不變。

  SQLServer中,中文的ASCII為正數,但由於是UNICODE的雙位編碼,不能用函數ascii()取得ASCII碼,必須用函數unicode ()返回unicode值,再用nchar函數取得對應的中文字元。

  瞭解了上面的兩點後,是不是覺得中文猜解其實也跟英文差不多呢?除了使用的函數要注意、猜解範圍大一點外,方法是沒什麼兩樣的。

相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。