安全測試整理
一、安全測試的目的:
為了盡可能的發現安全漏洞
二、安全測試的基本步驟:
收集信息—>熟悉環境—>梳理功能—>評估風險—>制定計劃—>執行測試—>輸出結果
1、如何熟悉環境:a. 測試在哪兒執行:瀏覽器還是APP
b. 測試有沒有前置條件:內部系統還是外部系統?是否需要特定賬號才能使用
c. 系統特殊屬性:是否是行業專門系統,是否需要其他預先只是儲備
2、功能是否已就緒:一般在功能測試基本完成之後進行安全測試
3、制定計劃(設置場景,設計用例)
4、執行測試
三、通常容易出現的安全漏洞
1、CSRF攻擊
(跨站請求偽造,通過偽裝來自受信任用戶的請求來利用受信任的網站
如:某用戶轉賬操作:http://www.mybank.com/Transfer.php?toBankId=11&money=1000。轉賬操作成功後訪問某個網站(或鏈接圖片),該網站有如下代碼:<img src=http://www.mybank.com/Transfer.php?toBankId=11&money=10000>。訪問成功後該用戶賬戶就少了10000人民幣了~
其原理是因為該用戶訪問銀行操作網站後,該網站沒有唯一標識認證用戶,因此在短時間再次訪問該鏈接不能辨認是否是用戶自己在進行轉賬操作,進而操作成功,這樣用戶在不知情的情況下就損失了10000元,就算再次去銀行查賬也只會認為是用戶自己轉出
那麽如何檢測某個地方是否存在CSRF攻擊:通過fiddler或Charles抓包查看接口是否有唯一標識(如:在增刪改的表單提交接口上,若沒有csrftoken或者refer校驗,則存在csrf漏洞)
- 如果增刪改的表單有referer,需把referer參數改為www.baidu.com 看是否頁面返回正常;
- 如果沒有refer,看是否有csrftoken,更改token,看是否正常;
- 若沒有refer或csrftoken,則說明存在問題
2、XSS
(跨站腳本攻擊,目的是在頁面中輸入可被控制的HTML代碼。所以有輸出的地方就有可能又XSS)
如:設計上出現失誤:允許用戶在頁面中輸出
該頁面源代碼為:
試著在輸入框中輸入:abcd123,得到結果為
也就是說我們輸入的字符會被原封不動的輸出來,那麽如果在該輸入框中輸入如下JS代碼:
<script>alert(‘xss’)</script>會出現什麽情況呢?由此看來XSS的原理就是利用輸出的環境來構造代碼。XSS就是在頁面執行你想要的JS,(以上舉例摘抄某博客,寫的比較基礎,比較容易懂:http://netsecurity.51cto.com/art/201408/448305_all.htm)
以上例子輸入代碼點擊提交,成功彈出對話框,基本就可以確定存在XSS漏洞了。
那麽如何檢測某個地方是不是存在XSS,通過舉例也應該了解一些了。整理下來:
- 確定輸入點&確定輸出點
- 構造攻擊向量:--></textarea>/><img src=x onerror=alert(1)/><!--
- 刷新頁面,查看是否有彈框?
3、SQL註入
SQL註入詳解:
(一)https://baijiahao.baidu.com/s?id=1568598718373461&wfr=spider&for=pc
(二)
https://m9.baidu.com/feed/data/landingpage?s_type=news&dsp=wise&nid=3745639765741583179&p_from=4
(三)https://baijiahao.baidu.com/s?id=1568598718373461&wfr=spider&for=pc
原理:SQL語句中有允許用戶任意控制的通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。後果極其嚴重,可以導致數據庫被攻擊者完全控制,甚至導致服務器崩潰。所以,有參與到數據庫語句構造的地方就有可能有SQL註入。
如:一個簡單的登錄頁面,代碼方法中userName和 password 是沒有經過任何處理,直接拿前端傳入的數據。輸入正常數據,合並的SQL為:
SELECT COUNT(*) FROM Login WHERE UserName=‘admin‘ AND Password=‘123456‘
如果我輸入:admin’ --,密碼隨便輸,合並的SQL語句變為:
SELECT COUNT(*) FROM Login WHERE UserName=‘admin‘-- Password=‘123‘
其中--為註釋符,後面語句則被省略而登錄成功了。如圖:
這是最簡單的一種SQL註入。常見的SQL註入語句詳見(也可自行百度)
“http://blog.csdn.net/ywb201314/article/details/52401511”
那麽如何檢查是否存在SQL註入呢?一個簡單的方法:隨手在參數後面加一個英文半角單引號(‘)
原因:單引號在SQL語句中通常是閉合字符串,一般程序無需閉合字符串,而是在代碼中替用戶完成這整個過程,用戶新增的單引號會使得程序的閉合亂序,往往頁面就會報錯。
4、鑒權失當
鑒權失當有多種,通常只有在有權限控制的功能中出現。
- 低權限用戶可以控制高權限用戶才能使用的功能稱為【垂直越權】
- 同等級用戶間可以互相訪問原本只有對方才能訪問的功能稱為【水平越權】
- 某個功能在特定情況下才能訪問,但可以被繞過稱為【上下文越權】
鑒權失當其實是一個邏輯漏洞,常見的:管理後臺容易出現越權
測試方法:
- 準備兩個或者更多個不同權限的賬號
- 拷貝相關的URL,交給拎一個權限的賬號訪問
- 如果能看到前一個賬號的信息,就證明問題存在
5、上傳漏洞
允許文件上傳的地方就可能出現上傳漏洞(用於利用上傳漏洞來控制服務器的工具:WebShell)
測試方法:用同種語言寫一個“hello Word”,上傳這個文件至這個程序,如果在頁面中程序被執行了,(輸出源代碼不算數),則說明存在上傳漏洞
6、敏感信息泄露
安全測試整理