1引言
1.1為什么要學習安全測試以及什么是安全測試
為什么要學習安全測試:
為了安全、有效的進行權限控制、不能隨意提交數據進行修改、避免跨站式腳本的攻擊。我們偶爾會聽到這么一些報道,說某個網站的首頁被篡改,敏感數據被泄露或者是重要信息被更改。其實這些問題就是因為黑客利用了系統安全漏洞,對系統進行攻擊導致而成,從而導致損失的代價也是不言而喻的。因此安全測試也成為了系統質量保證中必不可少的一部分,那么安全測試具體有什么好處呢?
-
- 提升產品的安全質量
- 盡量在發布前找到安全問題予以修補降低成本
- 度量安全等級(因為我們知道其實安全測試和找bug一樣,我們不可能把系統所有的安全問題都能找到並解決,通過安全測試,我們可以大體的估計系統的安全等級)
- 驗證安裝在系統內的保護機制能否在實際應用中對系統進行保護,使之不被非法入侵,不受各種因素的干擾。
什么是安全測試:
提供證據表明,在面對敵意和惡意的時候,應用仍能充分滿足它的需求。安全測試是在IT軟件產品的生命周期中,特別是產品開發基本完成到發布階段,對產品進行檢驗以驗證產品是否符合安全需求定義和產品質量標准的過程。也就是說安全測試是建立在功能測試的基礎上進行的測試。簡要的說安全測試主要發現包含如下的問題:
-
- 信息泄露、破壞信息的完整性
- 拒絕服務(合法用戶不能夠正常訪問網絡服務)
- 非法使用(非授權訪問)、竊聽
- 業務數據流分析
- 假冒、旁路控制
- 授權侵犯(內部攻擊即局域網攻擊)
- 計算機病毒、惡意軟件
- 信息安全法律法規不完善
1.2什么是web應用及web應用簡介
Web應用:一切使用HTTP進行通信的軟件。
Web應用程序是一種可以通過Web訪問的應用程序,最大好處是用戶很容易訪問應用程序,用戶只需要有瀏覽器即可,不需要再安裝其他軟件。
應用程序主要有兩種網絡結構模式C/S、B/S。C/S是客戶端/服務器端程序,也就是說這類程序一般獨立運行。而B/S就是瀏覽器端/服務器端應用程序,這類應用程序一般借助IE等瀏覽器來運行。WEB應用程序一般是B/S模式。
客戶端使用瀏覽器(IE、FireFox等),通過網絡(Network)連接到WEB服務器上,使用HTTP協議發起請求(Request),現在的所有請求都先經過一個WEB Server Plugin(服務器插件)來處理,此插件用於區分是請求的是靜態資源(.htm或者是.htm)還是動態資源。
如果WEB Server Plugin發現客戶端請求的是靜態資源(.htm或者是.html),則將請求直接轉交給WEB服務器,之后WEB服務器從文件系統中取出內容,發送回客戶端瀏覽器進行解析執行。
如果WEB Server Plugin發現客戶端請求的是動態資源(.jsp、.asp/.aspx、.php),則先將請求轉交給WEB Container(WEB容器),在WEB Container中連接數據庫,從數據庫中取出數據等一系列操作后動態拼湊頁面的展示內容,拼湊頁面的展示內容后,把所有的展示內容交給WEB服務器,之后通過WEB服務器將內容發送回客戶端瀏覽器進行解析執行。
1.3 安全測試與常規測試的區別
序號 |
對比項 |
常規測試 |
安全測試 |
1 |
目標差異 |
常規測試以發現Bug為目標 |
安全測試以發現安全隱患為目標 |
2 |
假設條件差異 |
常規測試假設導致問題的數據是用戶不小心造成的,接口一般只考慮用戶界面 |
安全測試假設導致問題的數據是攻擊者處心積慮構造的,需要考慮所有可能的攻擊途徑 |
3 |
思考域差異 |
常規測試以系統所具有的功能為思考域 |
安全測試的思考域不但包括系統的功能,還有系統的機制、外部環境、應用與數據自身安全風險與安全 |
4 |
問題發現模式差異 |
常規測試以違反功能定義為判斷依據 |
安全測試以違反權限與能力的約束為判斷依據 |
1.4 安全測試與滲透測試的區別
安全測試不同於滲透測試,滲透測試側重於幾個點的穿透攻擊,而安全測試是側重於對安全威脅的建模,系統的對來自各個方面,各個層面威脅的全面考量。安全測試可以告訴您,您的系統可能會來自哪個方面的威脅,正在遭受哪些威脅,以及您的系統已經可抵御什么樣的威脅。當然,安全測試涵蓋滲透測試的部分內容。具體可參考如下:
序號 |
對比項 |
滲透測試 |
安全測試 |
1 |
出發點差異 |
滲透測試是以成功入侵系統,證明系統存在安全問題為出發點 |
安全測試則是以發現系統所有可能的安全隱患為出發點 |
2 |
視角差異 |
滲透測試是以攻擊者的角度來看待和思考問題 |
安全測試則是站在防護者角度思考問題,盡量發現所有可能被攻擊者利用的安全隱患,並指導其進行修復 |
3 |
覆蓋性差異 |
滲透測試只選取幾個點作為測試的目標 |
安全測試是在分析系統架構並找出系統所有可能的攻擊界面后進行的具有完備性的測試 |
4 |
成本差異 |
滲透測試需要投入的時間和人力相對較少 |
安全測試需要對系統的功能、系統所采用的技術以及系統的架構等進行分析,需要投入更多的時間和人力 |
5 |
解決方案差異 |
滲透測試無法提供有針對性的解決方案,所以難以解決系統自身實質性的安全問題,所以提供滲透測試的廠商一般都是自己買什么防護設備,以自己防護設備針對的威脅為主要滲透點,找到你有類似的問題,解決方案就以賣對應的防護設備作為手段,針對具體的威脅,通過防護設備 采取被動的防護 |
安全測試會站在開發者的角度分析問題的成因,提供更有效的解決方案 |
在另外一篇博客中看到,滲透測試和安全測試的區別如果用圖片來形容,很容易理解,如下:
滲透測試-安全測試區別:
滲透測試着重點在攻擊,滲透測試的目的是攻破軟件系統,以證明軟件系統存在問題。
安全測試的着重點在防御,對整個系統的防御的功能進行一個系統的考慮。
滲透測試的目的是攻破系統,所以只要選擇一些薄弱的環節,選擇一些點來攻擊系統,達到攻破系統的目的就可以了。
安全測試必須從整個的防御面上來考慮系統的安全性。
1.5 安全測試的類型
類型 |
簡單描述 |
失效的身份驗證機制 |
只對首次傳遞的Cookie加以驗證,程序沒有持續對Cookie中內含信息驗證比對,攻擊者可以修改Cookie中的重要信息以提升權限進行網站數據存取或是冒用他人賬號取得個人私密資料(測試對象:可以進行傳參的URL,提交請求頁面,登錄后的Cookie) |
會話管理劫持 |
檢測Web應用程序會話機制是否存在安全隱患,能否被非法利用(會話劫持,偽裝成合法用戶)而影響Web應用程序的安全。 |
SQL注入 |
注入攻擊漏洞,這些攻擊發生在當不可信的SQL語句作為命令或者查詢語句的一部分,被發送給解釋器的時候。攻擊者發送的惡意數據可以欺騙解釋器,以執行計划外的命令或者在未被恰當授權時訪問數據。 |
XPath注入 |
XPath注入攻擊是指利用XPath 解析器的松散輸入和容錯特性,能夠在URL、表單或其它信息上附帶惡意的XPath 查詢代碼,以獲得權限信息的訪問權並更改這些信息。XPath注入攻擊是針對Web服務應用新的攻擊方法,它允許攻擊者在事先不知道XPath查詢相關知識的情況下,通過XPath查詢得到一個XML文檔的完整內容。 |
XSS跨站腳本攻擊 |
惡意攻擊者往Web頁面里插入惡意html代碼,當用戶瀏覽該頁之時,嵌入其中Web里面的html代碼會被執行,從而達到惡意用戶的特殊目的。 |
CSRF跨站請求偽造 |
攻擊者通過調用第三方網站的惡意腳本來偽造請求,在用戶不知情的情況下,攻擊者強行遞交構造的具有“操作行為”的數據包。(測試對象:網頁中可進行輸入的表單) |
不安全的直接對象引用 |
在具有導出/下載功能的頁面參數中修改內容,WEB服務器便會導出/下載程序源代碼或者指定文件(測試對象:URL中有用戶參數的地址,可以進行下載操作的地址)或者當開發人員暴露一個對內部實現對象的引用時,例如,一個文件、目錄或者數據庫密匙, 就會產生一個不安全的直接對象引用。在沒有訪問控制檢測或其他保護時,攻擊者會操控這些引用去訪問未授權數據 |
安全配置錯誤 |
Config中的鏈接字符串以及用戶信息,郵件,數據存儲信息等都需要加以保護,如果沒有進行保護,那么就是安全配置出現了問題。 |
不安全的加密存儲 |
未對需要保護的數據進行加密或者加密算法太弱都是不安全的加密存儲 |
沒有限制URL訪問 |
系統已經對URL的訪問做了限制,但這種限制卻實際並沒有生效。攻擊者能夠很容易的就偽造請求直接訪問未被授權的頁面(測試對象:需要身份驗證的頁面) |
傳輸層保護不足 |
在身份驗證過程中沒有使用SSL/TLS,因此暴露傳輸數據和會話ID,被攻擊者截聽。它們有時還會使用過期或者配置不正確的證書。(測試對象:登錄模塊) |
未驗證的重定向(redirectUrl)和轉發 |
攻擊者可以引導用戶訪問他們所要用戶訪問的站點。而最終造成的后果,重定向會使得用戶訪問釣魚網站或是惡意網站。 |
敏感信息泄露 |
許多Web應用程序沒有正確保護敏感數據,如信用卡、稅務ID和身份驗證憑據。攻擊者可能會竊取或篡改這些弱保護的數據以進行信用卡詐騙、身份竊取或其他犯罪。敏感數據值需額外的保護,比如在存放或在傳輸過程中的加密,以及在與瀏覽器交換時進行特殊的預防措施。 |
功能級訪問控制缺失 |
大多數Web應用程序的功能在UI頁面顯示之前,會驗證功能級別的訪問權限。但是,應用程序需要在每個功能被訪問時在服務器端執行相同的訪問控制檢查。如果請求沒有被驗證,攻擊者能夠偽造請求從而在未經適當授權時訪問功能。 |
使用含有已知漏洞的組件 |
組件,比如:庫文件、框架和其他軟件模塊,幾乎總是以全部的權限運行。如果使用含有已知漏洞的組件,這種攻擊可以造成更為嚴重的數據丟失或服務器接管。應用程序使用帶有已知漏洞的組件會破壞應用程序防御系統,並使一系列可能的攻擊和影響成為可能。危害比較嚴重 |
緩沖區溢出 |
當計算機向緩沖區內填充數據位數時超過了緩沖區本身的容量,溢出的數據覆蓋在合法數據上。 |
LDAP注入 |
利用LDAP注入技術的關鍵在於控制用於目錄搜索服務的過濾器。使用這些技術,攻擊者可能直接訪問LDAP目錄樹下的數據庫,及重要的公司信息。情況還可能比這更嚴重,因為許多應用的安全性依賴於基於LDAP目錄的單點登錄環境。 |
篡改輸入 |
利用一些命令或者工具等篡改一些字段的值,從而達到惡意的效果。例如,篡改商品的單價和數量等。 |
2滲透測試
2.1 內容簡介
滲透測試必要性:利用網絡安全掃描器、專用安全測試工具以及人工經驗對網絡中的核心服務器及重要的網絡設備,包括模擬黑客對服務器、網絡設備、防火牆等設備進行非破壞性質的滲透。
目的是侵入系統並獲取機密信息並將入侵的過程和細節產生報告給用戶。
2.2 環境安裝
2.2.1下載Kali Linux
Kali是由Offensive Security團隊設計的一款滲透測試操作系統。它是繼承BackTrack Linux發行版,預裝了Debian Linux的工具。
打開官網,選擇對應虛擬機下的鏡像文件進行下載,如圖:
下載地址如下:
https://www.offensive-security.com/kali-linux-vm-vmware-virtualbox-hyperv-image-download/
2.2.2 kali Linux與Backtrack區別
Kali Linux就是Backtrack的升級版。Kali默認賬號:root 密碼:toor(賬號反過來寫)
2.2.3 安裝kali Linux && 全屏顯示kali Linux
更多基本命令,如下鏈接:
http://blog.csdn.net/u010953692/article/details/54604325
在官網下載的kali linux OVA一鍵安裝包,放到指定路徑,然后打開VM VirtualBox,選擇管理->導入虛擬電腦,選擇指定路徑下的OVA安裝包,進行默認安裝,如圖:
安裝地址如下:
https://jingyan.baidu.com/article/454316ab70941bf7a7c03adb.html
PS:在安裝完全后,點擊開啟,系統會報錯,需要進行USB設備禁用掉,再次開啟就可以正常進入系統了
2.2.4 比較好用的軟件平台
烏雲網:http://www.anquan.us/
360網站安全檢測:http://webscan.360.cn/
其他:appsans、axws
2.3 滲透測試步驟
滲透測試步驟主要分4個:偵察->掃描->漏洞利用->維持訪問
2.4 滲透測試類型
2.4.1 白盒測試
白盒測試也稱為白帽測試,是指滲透測試者在擁有客戶組織所有知識的情況下進行測試。
2.4.2 黑盒測試
黑盒測試,是指模擬一個對客戶組織一無所知的攻擊者所進行的滲透測試。
2.5 滲透測試實戰流程圖
如下為xxx公司安全測試工程師做的流程圖如下:
信息的收集和分析伴隨着每一個滲透測試步驟,每一個步驟有三個組成部分:操作、響應、結果分析。
3偵察
3.1內容簡介
偵察即信息收集,典型的偵察策略包含主動偵察和被動偵察。
主動偵察:與目標系統的直接交互,但在這個過程中,目標系統可能會記錄下我們的IP地址及活動。
被動偵察:則利用從網上獲取的海量信息。
3.2偵察工具
3.2.1網址復制機:HTTrack
HTTrack是一款工具,將整個網站逐頁復制下來,能夠創建與目標網站完全相同的脫機副本。復制的內容包含原始網站所有的網頁、鏈接、圖片和代碼。
windows下安裝:http://www.httrack.com
Kali linux下安裝:apt-get install webhttrack(或sudo apt-get install webhttrack)
如圖:
http://kali:8080/server/index.html
3.2.2 The Harvester:挖掘並利用郵箱地址
The Harvester是一款用於偵察的優秀工具。
用於搜索對應網站的電子郵箱、子域名、主機。theharvester用於調用這個工具,-d用來指定目標的域名,-l用來限定返回的搜索結果的數目,-b用來指定將要搜索的公共知識庫,可以選擇Google、Bing、PGP、LinkedIn
命令如下:theharvester -d syngress.com -l 10 -b google
3.2.3 Whois
收集與目標相關的額外信息。Whois服務,用來查詢域名的IP以及所有者等信息的傳輸協議。可以獲取與目標相關的具體信息,包括IP地址或公司DNS主機名以及地址和電話號碼等聯系信息。
命令:whois syngress.com
網頁版:
https://shop.whois.com/domain-registration/index.php
3.2.4 Netcraft
輸入域名,進行輸入,它將能模糊查詢所有的相關網站。點擊查看site report,可以查看目標網站的IP地址、web服務器的操作系統及DNS服務器。
3.2.5 host工具
Host工具指將IP地址翻譯成主機名。Kali linux內置了該工具,通過命令去執行即可。
命令中使用:host baidu.com或host IP,如圖:
Man host:是host的幫助指令
3.2.6 從DNS中提取信息:NS Lookup、Dig
Nslookup 常用命令:http://www.t086.com/article/5138
使用host、nslookup確定目標公司(syngress.com)的電子郵件服務器
其次還有其他方法,比如google指令、從電子郵箱中提取信息、MetaGooFil、社會工程學、篩選信息以尋找可攻擊的目標。
偵察的結果就是:整理出一個簡易的列表,用來集中記錄收集到的IP地址。
4掃描
4.1內容簡介
掃描分階段進行:系統是否正在運行->掃描系統的端口->掃描系統中的漏洞
4.2 ping掃描
Ping掃描是一種特定類型的網絡數據包,稱為ICMP數據包。
Ping用於給計算機或網絡設備上的某些特殊接口發送特定類型的網絡流量,這種特定類型的網絡流量叫做ICMP回顯請求數據包(ICMP Echo Request packet).
比如字節=32表示發送的數據包的大小;
時間=38ms表示告訴我們數據包到目標往返一趟花費的時間;
TTL=55表示是個生存時間值,它用來限定數據包自動終止前可以經歷的最大跳數。
在Linux中,執行ping掃描最簡單的方法就是使用FPing。
命令:fping -a -g 172.16.45.1 172.16.45.254>host.txt
-a表示在輸出中只顯示活動主機;
-g表示用於指定我們想要掃描的IP范圍,開始IP和結束IP。
>重定向地址,且重定向到指定地址host.txt
4.3 端口掃描
端口掃描的目的是為了識別在我們的目標系統上哪些目標端口是開啟的,以及哪些端口是啟用的。使用Nmap進行端口掃描。
Nmap,也就是Network Mapper,最早是Linux下的網絡掃描和嗅探工具包。nmap是一個網絡連接端掃描軟件,用來掃描網上電腦開放的網絡連接端。
最簡單的端口掃描,命令:nmap 127.0.0.1(針對本機進行掃描),如圖:
4.3.1 使用Nmap進行TCP連接掃描
域名:scanme.nmap.org
命令:nmap -sT -p- -PN 14.104.82.184
-sT表示:nmap目前連接的是TCP連接掃描。
-s表示:nmap要運行哪種類型的掃描。
-T用來執行一個TCP連接類型掃描。
-p-表示nmap要掃描所有的端口,而不只是默認的1000個端口。
-PN表示跳過主機發現階段,對所有地址進行掃描。如圖:
對一個IP范圍進行掃描:nmap -sT -p- -PN 14.104.82.184-254
對不連續的IP進行文件創建:nmap -sT -p- -iL IpAdressPath
4.3.2 使用Nmap進行SYN掃描
命令:nmap -sS -p- -PN 172.16.45.135
-sS:表示nmap運行的是SYN掃描而不是TCP連接掃描。
4.3.3 使用Nmap進行UDP掃描
命令:nmap -sUV 172.16.45.135
-V表示:添加版本掃描信息
4.3.4 使用Nmap進行Xmas掃描
命令:nmap -sX -p- -PN 172.16.45.135
4.3.5 使用Nmap進行Null掃描
命令:nmap -sN -p- -PN 172.16.45.135
4.4 漏洞掃描
Nessus工具
5漏洞利用
5.1內容簡介
漏洞利用:獲得系統控制權限的過程。
5.2 密碼破解:John the Ripper
密碼破解分2個步驟:
- 定位並下載目標系統的密碼散列文件
- 利用工具將散列(加密過)的密碼轉化為明文密碼
基本概念:
在Linux上,用戶名/密鑰方面的詳細信息存儲在下面這兩個文件中:
/etc/passwd(密碼文件存放點)
/etc/shadow(散列存放點)
http://blog.csdn.net/yaofeino1/article/details/54616440
john、unshadow命令:
adduser happy :創建一個用戶happy,密碼為chess
Unshadow /etc/passwd /etc/shadow > ~/file_to_crack 輸出結果進行重定向到/etc/shadow
/usr/share/john/password.lst(John隨帶的密碼列表路徑)
john --wordlist=/usr/share/john/password.lst ~/file_to_crack (使用了密碼列表)
john ~/file_to_crack
5.3 密碼重置:破牆而入
./chntpw -i /mnt/sdal/WINDOWS/system32/config/SAM
-i:表示以交互模式運行該程序,並可以選擇你想要重置的用戶。
/mnt/sdal/WINDOWS/system32/config/SAM:目標計算機上所掛載的包含SAM文件的目錄。
Sdal不是必備的,有時候需要fdisk -l可以確定掛載的驅動器是否正確。
5.4 利用Medusa獲得遠程服務的訪問權限
命令:
medusa -h target_ip -u username -P path_to_password_dictionary -M authentication_server_to_attck
Medusa:目的是啟動暴力破解程序
-h:指定目標IP
-u:置頂用戶名,如果是用戶名列表,修改為-U
-p:用來指定一個密碼,-P:指多個密碼的完整列表
-M:用來指定我們想要攻擊的服務
https://www.cnblogs.com/Te7m/p/5938441.html
5.5 泛洪攻擊交換機:macof
Macof -i eth0 -s 172.16.45.123 -d 172.16.45.2
-i:用來指定計算機的網卡,即網卡
-s:用來指定來源地址
-d:用來指定目的地或目標攻擊對象
5.6 自動化漏洞攻擊:Fast-Track Autopwn
Fast-track是一個工具,原理:先對端口進行掃描,然后根據掃描到的信息,向目標系統發送所有已知或可能匹配的漏洞攻擊程序。
5.7 Metasploit
對目標計算機發起攻擊的備忘單:
- 啟動Metasploit:/pentest/exploits/framework3/msfconsole
- 輸入“search”命令,搜索漏洞攻擊程序: search missing_patch_number
- 輸入“use”命令,選擇所需要的漏洞攻擊程序:
use exploid_name_and_path_as_shown_in_2a
- 輸入“show payloads”命令,顯示可用的攻擊載荷:show payload
- 輸入“set”命令,選擇攻擊載荷:set payload path_to_payload_as_shown_in_4a
- 輸入“show options”,查看對目標進行漏洞攻擊之前需要設置的所有選項:show options
- 輸入“set”,對F)進行設置
- 輸入“exploit”命令,對目標發起漏洞攻擊:exploit
6 基於web的漏洞利用
6.1 內容簡介
6.2 Nikto:掃描web服務器
Nikto是一個web服務器漏洞掃描工具。Nikto與perl配套使用。
Kali linux內置Nikto
kali linux路徑:/pentest/scanners/nikto
輸出所有可用的參數:Perl nikto.pl
Perl nikto.pl -h 172.16.45.129 -p 1-1000
參數-h:指定IP地址;參數-p:指定端口號
Kali linux自帶nikto工具,直接使用即可:nikto -h ipaddress -p port
6.3 Websecurify:自動化的web掃描
一個工具,輸入IP地址,然后就可以進行掃描了。Websecurify提供了一個易操作的界面,包括SQL注入、跨站腳本、文件包含、跨站請求偽造等。
6.4 網絡爬蟲:抓取目標網站
與目標WEB服務器進行交互的工具是webscarab,可從OWASP網站進行下載。它是一個強大的框架,模塊化的,允許用戶加載大量的插件。當nikto和websecurify完成漏洞掃描后,下一步邏輯步驟:在目標網站上運行網絡爬蟲程序。
6.5 使用WebScarab攔截請求
Webscarb是一個非常強大的工具,充當代理服務器只是它的功能之一。
如下代理配置:
6.6 代碼注入攻擊
注入攻擊可以用於任何目的,包括繞過認證、操縱數據、查看敏感數據,甚至在遠程主機上執行命令。注入攻擊主要是:提交、發送、操縱用戶驅動的輸入的數據。最經典的例子是SQL注入。
如:select * from users where uname=’admin’and pwd=’’ or 1=1--
--:是一個程序注釋符
6.7 跨站腳本:輕信網站的瀏覽器
跨站腳本:XSS,是一個將腳本程序注入web應用程序中的過程。
比如:<script>alert(“XSS Test”)</script>
基於DOM的跨站腳本攻擊,客戶端攻擊、會話管理、源代碼審計等。
存在2種類型:非持久化的跨站腳本攻擊和持久化的跨站腳本攻擊。
反射型:非持久,一般為一個url,需要用戶單擊,在url中參數傳入
持久型:常存在於評論等交互中,常見於<textarea>這種標簽,可用於掛馬釣魚滲透等
實踐平台:OWASP的webGoat項目
7后門和劫持
7.1 內容簡介
7.2 netcat:瑞士軍刀
Netcat是一個允許通信和網絡流量從一台計算機流向另一台計算機的工具。
7.3 netcat神秘的家庭成員:cryptcat
Cryptcat使用twofish對客戶端和服務器端的機密流量進行加密。
7.4 netbus:一款經典的工具
Netbus:客戶端和服務器端。服務器端需要安裝在目標計算機上,客戶端用來連接、控制目標計算機。
7.5 rootkit
運行rootkit可以隱藏文件、進程、甚至是程序。
7.6 rookit的檢測和防御
8 滲透測試報告
滲透測試報告:綜合報告、詳細報告、原始數據