日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > > 充電吧
[導(dǎo)讀]對(duì)于Web應(yīng)用來(lái)說(shuō),注射式攻擊由來(lái)已久,攻擊方式也五花八門(mén),常見(jiàn)的攻擊方式有SQL注射、命令注射以及新近才出現(xiàn)的XPath注射等等。本文將以SQL注射為例,在源碼級(jí)對(duì)其攻擊原理進(jìn)行深入的講解。一、注射

對(duì)于Web應(yīng)用來(lái)說(shuō),注射式攻擊由來(lái)已久,攻擊方式也五花八門(mén),常見(jiàn)的攻擊方式有SQL注射、命令注射以及新近才出現(xiàn)的XPath注射等等。本文將以SQL注射為例,在源碼級(jí)對(duì)其攻擊原理進(jìn)行深入的講解。

一、注射式攻擊的原理
注射式攻擊的根源在于,程序命令和用戶數(shù)據(jù)(即用戶輸入)之間沒(méi)有做到?jīng)芪挤置鳌_@使得攻擊者有機(jī)會(huì)將程序命令當(dāng)作用戶輸入的數(shù)據(jù)提交給Web程序,以發(fā)號(hào)施令,為所欲為。

為了發(fā)動(dòng)注射攻擊,攻擊者需要在常規(guī)輸入中混入將被解釋為命令的“數(shù)據(jù)”,要想成功,必須要做三件事情:
1.確定Web應(yīng)用程序所使用的技術(shù)
注射式攻擊對(duì)程序設(shè)計(jì)語(yǔ)言或者硬件關(guān)系密切,但是這些可以通過(guò)適當(dāng)?shù)牟赛c(diǎn)或者索性將所有常見(jiàn)的注射式攻擊都搬出來(lái)逐個(gè)試一下就知道了。為了確定所采用的技術(shù),攻擊者可以考察Web頁(yè)面的頁(yè)腳,查看錯(cuò)誤頁(yè)面,檢查頁(yè)面源代碼,或者使用諸如Nessus等工具來(lái)進(jìn)行刺探。

2.確定所有可能的輸入方式
Web應(yīng)用的用戶輸入方式比較多,其中一些用戶輸入方式是很明顯的,如HTML表單;另外,攻擊者可以通過(guò)隱藏的HTML表單輸入、HTTP頭部、cookies、甚至對(duì)用戶不可見(jiàn)的后端AJAX請(qǐng)求來(lái)跟Web應(yīng)用進(jìn)行交互。一般來(lái)說(shuō),所有HTTP的GET和POST都應(yīng)當(dāng)作用戶輸入。為了找出一個(gè)Web應(yīng)用所有可能的用戶輸入,我們可以求助于Web代理,如Burp等。

3.查找可以用于注射的用戶輸入
在找出所有用戶輸入方式后,就要對(duì)這些輸入方式進(jìn)行篩選,找出其中可以注入命令的那些輸入方式。這個(gè)任務(wù)好像有點(diǎn)難,但是這里有一個(gè)小竅門(mén),那就是多多留意Web應(yīng)用的錯(cuò)誤頁(yè)面,很多時(shí)候您能從這里得到意想不到的收獲。

二、SQL注射原理
上面對(duì)注射攻擊做了一般性的解釋?zhuān)旅嫖覀円許QL注射為例進(jìn)行講解,以使讀者對(duì)注射攻擊有一個(gè)感性的認(rèn)識(shí),至于其他攻擊,原理是一致的。

SQL注射能使攻擊者繞過(guò)認(rèn)證機(jī)制,完全控制遠(yuǎn)程服務(wù)器上的數(shù)據(jù)庫(kù)。SQL是結(jié)構(gòu)化查詢語(yǔ)言的簡(jiǎn)稱(chēng),它是訪問(wèn)數(shù)據(jù)庫(kù)的事實(shí)標(biāo)準(zhǔn)。目前,大多數(shù)Web應(yīng)用都使用SQL數(shù)據(jù)庫(kù)來(lái)存放應(yīng)用程序的數(shù)據(jù)。幾乎所有的Web應(yīng)用在后臺(tái)都使用某種SQL數(shù)據(jù)庫(kù)。跟大多數(shù)語(yǔ)言一樣,SQL語(yǔ)法允許數(shù)據(jù)庫(kù)命令和用戶數(shù)據(jù)混雜在一起的。如果開(kāi)發(fā)人員不細(xì)心的話,用戶數(shù)據(jù)就有可能被解釋成命令,這樣的話,遠(yuǎn)程用戶就不僅能向Web應(yīng)用輸入數(shù)據(jù),而且還可以在數(shù)據(jù)庫(kù)上執(zhí)行任意命令了。

三、繞過(guò)用戶認(rèn)證
我們這里以一個(gè)需要用戶身份認(rèn)證的簡(jiǎn)單的Web應(yīng)用程序?yàn)槔M(jìn)行講解。假定這個(gè)應(yīng)用程序提供一個(gè)登錄頁(yè)面,要求用戶輸入用戶名和口令。用戶通過(guò)HTTP請(qǐng)求發(fā)送他們的用戶名和口令,之后,Web應(yīng)用程序檢查用戶傳遞來(lái)用戶名和口令跟數(shù)據(jù)庫(kù)中的用戶名和口令是否匹配。這種情況下,會(huì)要求在SQL數(shù)據(jù)庫(kù)中使用一個(gè)數(shù)據(jù)庫(kù)表。開(kāi)發(fā)人員可以通過(guò)以下SQL語(yǔ)句來(lái)創(chuàng)建表:

CREATE?TABLE?user_table(
???id?INTEGER?PRIMARY?KEY,
???username?VARCHAR(32),
???password?VARCHAR(41)
);

上面的SQL代碼將建立一個(gè)表,該表由三欄組成。第一欄存放的是用戶ID,如果某人經(jīng)過(guò)認(rèn)證,則用此標(biāo)識(shí)該用戶。第二欄存放的是用戶名,該用戶名最多由32字符組成。第三欄存放的是口令,它由用戶的口令的hash值組成,因?yàn)橐悦魑牡男问絹?lái)存放用戶的口令實(shí)在太危險(xiǎn),所以通常取口令的散列值進(jìn)行存放。我們將使用SQL函數(shù)PASSWORD()來(lái)獲得口令的hash值,在MySQL中,函數(shù)PASSWORD()的輸出由41字符組成。

對(duì)一個(gè)用戶進(jìn)行認(rèn)證,實(shí)際上就是將用戶的輸入即用戶名和口令跟表中的各行進(jìn)行比較,如果跟某行中的用戶名和口令跟用戶的輸入完全匹配,那么該用戶就會(huì)通過(guò)認(rèn)證,并得到該行中的ID。假如用戶提供的用戶名和口令分別為lonelynerd15和mypassword,那么檢查用戶ID過(guò)程如下所示:

SELECT?id?
FROM?user_table?
WHERE?username='lonelynerd15'?
AND?password=PASSWORD('mypassword')

如果該用戶位于數(shù)據(jù)庫(kù)的表中,這個(gè)SQL命令將返回該用戶相應(yīng)的ID,這就意味著該用戶通過(guò)了認(rèn)證;否則,這個(gè)SQL命令的返回為空,這意味著該用戶沒(méi)有通過(guò)認(rèn)證。

下面是用來(lái)實(shí)現(xiàn)自動(dòng)登錄的Java代碼,它從用戶那里接收用戶名和口令,然后通過(guò)一個(gè)SQL查詢對(duì)用戶進(jìn)行認(rèn)證:

Stringusername=req.getParameter("username");
Stringpassword=req.getParameter("password");
Stringquery="SELECT?id?FROM?user_table?WHERE?username='"+username+"'?AND?password=PASSWORD('"+password+"')";

ResultSet?rs=stmt.executeQuery(query);
int?id=-1;?
???while(rs.next()){
???id=rs.getInt("id");
}

開(kāi)頭兩行代碼從HTTP請(qǐng)求中取得用戶輸入,然后在下一行開(kāi)始構(gòu)造一個(gè)SQL查詢。執(zhí)行查詢,然后在while()循環(huán)中得到結(jié)果,如果一個(gè)用戶名和口令對(duì)匹配,就會(huì)返回正確的ID。否則,id的值仍然為-1,這意味著用戶沒(méi)有通過(guò)認(rèn)證。表面上看,如果用戶名和口令對(duì)匹配,那么該用戶通過(guò)認(rèn)證;否則,該用戶不會(huì)通過(guò)認(rèn)證——但是,事實(shí)果真如此嗎?非也!讀者也許已經(jīng)注意到了,這里并沒(méi)有對(duì)SQL命令進(jìn)行設(shè)防,所以攻擊者完全能夠在用戶名或者口令字段中注入SQL語(yǔ)句,從而改變SQL查詢。為此,我們仔細(xì)研究一下上面的SQL查詢字符串:

Stringquery="SELECT?id?FROM?user_table?WHERE?username='"+username+"'?AND?password=PASSWORD('"+password+"')";

上述代碼認(rèn)為字符串username和password都是數(shù)據(jù),不過(guò),攻擊者卻可以隨心所欲地輸入任何字符。如果一位攻擊者輸入的用戶名為"' OR 1=1--",而口令為"x",那么查詢字符串將變成下面的樣子:

SELECT?id?FROM?user_table?WHERE?username=''?OR?1=1--'AND?password=PASSWORD('x')

該雙劃符號(hào)--告訴SQL解析器,右邊的東西全部是注釋?zhuān)圆槐乩頃?huì)。這樣,查詢字符串相當(dāng)于:

SELECT?id?FROM?user_table?WHERE?username=''?OR?1=1

如今的SELECT語(yǔ)句跟以前的已經(jīng)大相徑庭了,因?yàn)楝F(xiàn)在只要用戶名為長(zhǎng)度為零的字符串''或1=1這兩個(gè)條件中一個(gè)為真,就返回用戶標(biāo)識(shí)符ID——我們知道,1=1是恒為真的。所以這個(gè)語(yǔ)句將返回user_table中的所有ID。在此種情況下,攻擊者在username字段放入的是SQL指令'OR1=1--而非數(shù)據(jù)。

四、構(gòu)造SQL注射代碼
為了成功地注入SQL命令,攻擊者必須將開(kāi)發(fā)人員的現(xiàn)有SQL命令轉(zhuǎn)換成一個(gè)合法的SQL語(yǔ)句,當(dāng)然,要盲注是有些難度的,但一般都是這樣:
'OR1=1–
或者
')OR1=1--

此外,許多Web應(yīng)用提供了帶來(lái)錯(cuò)誤報(bào)告和調(diào)試信息,例如,利用'OR1=1--對(duì)Web應(yīng)用進(jìn)行盲注時(shí),經(jīng)常看到如下所示的錯(cuò)誤信息:

Error?executing?query:
You?have?an?error?in?your?SQL?syntax;
check?the?manual?that?corresponds?to?your?MySQL?server?version?for?the?right?syntax?to?use?near
'SELECT?(title,body)?FROM?blog_table?WHERE?cat='OR1=1'?at?line?1

該錯(cuò)誤信息詳細(xì)地為我們展示了完整的SQL語(yǔ)句,在此種情況下,SQL數(shù)據(jù)庫(kù)所期待的好象是一個(gè)整數(shù),而非字符串,所以可以注入字符串OR1=1--,把單引號(hào)去掉就應(yīng)該能成功注入了。對(duì)于大多數(shù)SQL數(shù)據(jù)庫(kù),攻擊者可以在一行中放入多個(gè)SQL語(yǔ)句,只要各個(gè)語(yǔ)句的語(yǔ)法沒(méi)有錯(cuò)誤就行。在下面的代碼中,我們展示了如何將username設(shè)為'OR1=1并把password設(shè)為x來(lái)返回最后的用戶ID:

Strin?gquery="SELECT?id?FROM?user_table?WHERE"+
"username='"+username+"'AND"+
"password=PASSWORD('"+password+"')";

當(dāng)然,攻擊者可以注入其它的查詢,例如,把username設(shè)為:

'OR1=1;DROP?TABLE?user_table;--

而這個(gè)查詢將變成:

SELECT?id?FROM?user_table?WHERE?username=''?OR1=1;DROPTABLEuser_table;--'ANDpassword=PASSWORD('x');

它相當(dāng)于:

SELECT?id?FROM?user_table?WHERE?username=''OR1=1;DROP?TABLE?user_table;

這個(gè)語(yǔ)句將執(zhí)行句法上完全正確的SELECT語(yǔ)句,并利用SQL DROP命令清空user_table。

注射式攻擊不必非要進(jìn)行盲式攻擊,因?yàn)樵S多Web應(yīng)用是利用開(kāi)放源代碼工具開(kāi)發(fā)的,為了提高注射式攻擊的成功率,我們可以下載免費(fèi)的或者產(chǎn)品的試用版,然后在自己的系統(tǒng)上搭建測(cè)試系統(tǒng)。如果在測(cè)試系統(tǒng)上發(fā)現(xiàn)了錯(cuò)誤,那么很可能同樣的問(wèn)題也會(huì)存在于所有使用該工具的Web應(yīng)用身上。

五、小結(jié)
我們?cè)诒疚闹邢蜃x者介紹了注射攻擊的根本原因,即沒(méi)有對(duì)數(shù)據(jù)和命令進(jìn)行嚴(yán)格區(qū)分。然后通過(guò)一些程序源碼對(duì)SQL的攻擊進(jìn)行了細(xì)致的分析,使我們對(duì)SQL注射機(jī)理有了一個(gè)深入的認(rèn)識(shí)。如果您是一名web應(yīng)用開(kāi)發(fā)人員,那么您就當(dāng)心了,一定不要盲目相信用戶端的輸入,而要對(duì)用戶輸入的數(shù)據(jù)進(jìn)行嚴(yán)格的“消毒”處理,否則的話,SQL注射將會(huì)不期而至。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見(jiàn),不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(chē)(EV)作為新能源汽車(chē)的重要代表,正逐漸成為全球汽車(chē)產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車(chē)的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車(chē)的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車(chē) 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車(chē)場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周?chē)娮釉O(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開(kāi)關(guān)電源具有效率高的特性,而且開(kāi)關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開(kāi)關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉