一、安全測(cè)試6項(xiàng)基本原則:
認(rèn)證:對(duì)認(rèn)證的用戶的請(qǐng)求返回
訪問(wèn)控制:對(duì)未認(rèn)證的用戶的權(quán)限控制和數(shù)據(jù)保護(hù)
完整性:用戶必須準(zhǔn)確的收到服務(wù)器發(fā)送的信息
機(jī)密性:信息必須準(zhǔn)確的傳遞給預(yù)期的用戶
可靠性:失敗的頻率是多少?網(wǎng)絡(luò)從失敗中恢復(fù)需要多長(zhǎng)時(shí)間?采取什么措施來(lái)應(yīng)對(duì)災(zāi)難性的失敗?(個(gè)人理解這個(gè)地方應(yīng)該更偏向于容錯(cuò)容災(zāi)測(cè)試的范疇)
不可抵賴:用戶應(yīng)該能證明接收到的數(shù)據(jù)來(lái)自特定的服務(wù)器
二、常見的安全測(cè)試內(nèi)容
權(quán)限控制
SQL注入
URL安全測(cè)試
XSS(跨站腳本攻擊)
CSRF(跨站請(qǐng)求偽造)
URL跳轉(zhuǎn)漏洞
其他安全方面的考量
三、Web應(yīng)用程序中是什么導(dǎo)致安全性問(wèn)題呢?一般有以下幾個(gè)原因:
1、復(fù)雜應(yīng)用系統(tǒng)代碼量大、開發(fā)人員多、難免出現(xiàn)疏忽。
2、系統(tǒng)屢次升級(jí)、人員頻繁變更,導(dǎo)致代碼不一致。
3、歷史遺留系統(tǒng)、試運(yùn)行系統(tǒng)等多個(gè)Web系統(tǒng)共同運(yùn)行于同一臺(tái)服務(wù)器上。
4、開發(fā)人員未經(jīng)過(guò)安全編碼培訓(xùn)或者公司根本就沒有統(tǒng)一的安全編碼規(guī)范。
5、測(cè)試人員經(jīng)驗(yàn)不足或者沒經(jīng)過(guò)專業(yè)的安全評(píng)估測(cè)試就發(fā)布上線。
6、沒有對(duì)用戶的輸入進(jìn)行驗(yàn)證,舉幾個(gè)例子:
1)永遠(yuǎn)不要信任用戶的輸入,要對(duì)用戶的輸入進(jìn)行校驗(yàn)
2)數(shù)字型的輸入必須是合法的數(shù)字
3)字符型的輸入中對(duì) 編碼符號(hào)要進(jìn)行特殊處理
4)驗(yàn)證所有的輸入點(diǎn),包括Get,Post,Cookie以及其他HTTP頭
四、安全性測(cè)試的常見漏洞及解決辦法:
1、XSS跨站腳本攻擊
SS與SQL注入相似,XSS是通過(guò)網(wǎng)頁(yè)插入惡意腳本,主要用到的技術(shù)也是前端的HTML和JavaScript腳本。當(dāng)用戶瀏覽網(wǎng)頁(yè)時(shí),實(shí)現(xiàn)控制用戶瀏覽器行為的攻擊方式。
一次成功的XSS,可以獲取到用戶的cookie,利用該cookie盜取用戶對(duì)該網(wǎng)站的操作權(quán)限;也可以獲取到用戶聯(lián)系人列表,利用被攻擊者的身份向特定的目標(biāo)群發(fā)送大量的垃圾信息,等等。
XSS分為三類:存儲(chǔ)型(持久性XSS)、反射型(非持久性XSS)、DOM型。
測(cè)試方法:
在數(shù)據(jù)輸入界面,輸入:<script>alert(/123/)</script>,保存成功后如果彈出對(duì)話框,表明此處存在一個(gè)XSS 漏洞。
或把url請(qǐng)求中參數(shù)改為<script>alert(/123/)</script>,如果頁(yè)面彈出對(duì)話框,表明此處存在一個(gè)XSS 漏洞。
2、SQL注入
SQL注入是通過(guò)把SQL命令插入到Web表單遞交或輸入域名或頁(yè)面請(qǐng)求的查詢字符
串,最終達(dá)到欺騙服務(wù)器執(zhí)行惡意的SQL命令。
SQL注入可能造成的危害有:網(wǎng)頁(yè)、數(shù)據(jù)被篡改,核心數(shù)據(jù)被竊取,數(shù)據(jù)庫(kù)所在的服務(wù)器被攻擊,變成傀儡主機(jī)。
例如有些網(wǎng)站沒有使用預(yù)編譯sql,用戶在界面上輸入的一些字段被添加到sql中,很有可能這些字段包含一些惡意的sql命令。如:password = “1′ OR ‘1’=’1″;即使不知道用戶密碼,也能正常登錄。
測(cè)試方法:
在需要進(jìn)行查詢的頁(yè)面,輸入正確查詢條件 and 1=1等簡(jiǎn)單sql語(yǔ)句,查看應(yīng)答結(jié)果,如與輸入正確查詢條件返回結(jié)果一致,表明應(yīng)用程序?qū)τ脩糨斎胛催M(jìn)行過(guò)濾,可以初步判斷此處存在SQL注入漏洞
修改建議:
對(duì)用戶的輸入進(jìn)行校驗(yàn),可以通過(guò)正則表達(dá)式,或限制長(zhǎng)度;對(duì)以下關(guān)鍵字進(jìn)行轉(zhuǎn)換等;
||alert|and|exec|execute|insert|select|delete|update|count|drop|chr|mid|master|truncate|declare|sitename|netuser|xp_cmdshell|or|+|,|like’|and|exec|execute|insert|create|drop|table|from|grant|group_concat|column_name|information_schema.columns|table_schema|union|where|select|delete|update|order|by|count|chr|mid|master|truncate|declare|or|–|+|,|like|//
不要使用動(dòng)態(tài)拼裝sql,可以使用參數(shù)化的sql或者直接使用存儲(chǔ)過(guò)程進(jìn)行數(shù)據(jù)查詢存取;
不要使用管理員權(quán)限的數(shù)據(jù)庫(kù)連接,為每個(gè)應(yīng)用使用單獨(dú)的權(quán)限有限的數(shù)據(jù)庫(kù)連接;
應(yīng)用的異常信息應(yīng)該給出盡可能少的提示,最好使用自定義的錯(cuò)誤信息對(duì)原始錯(cuò)誤信息進(jìn)行包裝。
3、URL跳轉(zhuǎn)漏洞
URL跳轉(zhuǎn)漏洞,即未經(jīng)驗(yàn)證的重定向漏洞,是指Web程序直接跳轉(zhuǎn)到參數(shù)中的URL,或者在頁(yè)面中引入了任意開發(fā)者的URL,將程序引導(dǎo)到不安全的第三方區(qū)域,從而導(dǎo)致安全問(wèn)題。
測(cè)試方法:
1.使用抓包工具抓取請(qǐng)求。
2.抓取302的url,修改目標(biāo)地址,查看是否能跳轉(zhuǎn)。
ps:不過(guò)現(xiàn)在很多跳轉(zhuǎn)都加了referer的校驗(yàn)導(dǎo)致攻擊者跳轉(zhuǎn)失敗。
4、文件上傳漏洞
文件上傳攻擊是指攻擊者上傳了一個(gè)可執(zhí)行文件到服務(wù)器上,并執(zhí)行。
這種攻擊方式是最直接有效的。上傳的文件可以是病毒、木馬、惡意腳本或者是webshell等等。
Webshell是以asp、php、jsp或者cgi等網(wǎng)頁(yè)文件形式存在的一種命令執(zhí)行環(huán)境,也可以說(shuō)是一種網(wǎng)頁(yè)后門。攻擊者在受影響系統(tǒng)防止或插入webshell后,可以通過(guò)webshell方便進(jìn)入系統(tǒng),達(dá)到控制網(wǎng)站服務(wù)器的目的。
測(cè)試方法:
對(duì)上傳的文件類型、大小等進(jìn)行嚴(yán)格校驗(yàn),禁止上傳惡意代碼的文件。
對(duì)相關(guān)目錄的執(zhí)行權(quán)限進(jìn)行校驗(yàn),可以通過(guò)瀏覽器訪問(wèn)Web 服務(wù)器上的所有目錄,檢查是否返回目錄結(jié)構(gòu),如果顯示的是目錄結(jié)構(gòu),則可能存在安全問(wèn)題。
5、CSRF跨站偽造請(qǐng)求攻擊
CSRF,利用已登錄的用戶身份,以用戶的名義發(fā)送惡意請(qǐng)求,完成非法操作。
例如:用戶如果瀏覽并信任了存在CSRF漏洞的網(wǎng)站A,瀏覽器產(chǎn)生了相應(yīng)的cookie,用戶在沒有退出該網(wǎng)站的情況下,訪問(wèn)了危險(xiǎn)網(wǎng)站B 。
危險(xiǎn)網(wǎng)站B要求訪問(wèn)網(wǎng)站A,發(fā)出一個(gè)請(qǐng)求。瀏覽器帶著用戶的cookie信息訪問(wèn)了網(wǎng)站A,因?yàn)榫W(wǎng)站A不知道是用戶自身發(fā)出的請(qǐng)求還是危險(xiǎn)網(wǎng)站B發(fā)出的請(qǐng)求,所以就會(huì)處理危險(xiǎn)網(wǎng)站B的請(qǐng)求,這樣就完成了模擬用戶操作的目的。這就是CSRF攻擊的基本思想。
測(cè)試方法:
1. 同個(gè)瀏覽器打開兩個(gè)頁(yè)面,一個(gè)頁(yè)面權(quán)限失效后,另一個(gè)頁(yè)面是否可操作成功,如果仍然能操作成功即存在風(fēng)險(xiǎn)。
2.使用工具發(fā)送請(qǐng)求,在http請(qǐng)求頭中不加入referer字段,檢驗(yàn)返回消息的應(yīng)答,應(yīng)該重新定位到錯(cuò)誤界面或者登錄界面。