本身幾年前研究安全測試時的學習筆記,翻筆記時,發現還存在,就發出來和你們共享吧~~php
許多Web服務器的Web根目錄下有一個名爲robots.txt的文件,其中列出了站點不但願Web爬蟲訪問或搜索引擎列入搜索的URL。有時,這個文件中還包含敏感功能的參考信息,滲透測試員確定會對抓取這些信息感興趣。一些攻擊Web應用程序的抓取工具會搜索robots.txt文件,並根據其中列出的URL開始抓取過程。html
滲透測試步驟:java
1.配置瀏覽器,使用Burp或WebScarab做爲本地代理服務器程序員
2.以常規方式瀏覽整個應用程序,訪問發現的每個鏈接/URL,提交每個表單並執行所有多階段功能。嘗試在JavaScript激活與禁用,cookie激活與禁用的狀況下進行瀏覽許多應用程序可以處理各類瀏覽器配置,能夠獲取應用程序內的不一樣內容和代碼路徑。數據庫
3.檢查由代理服務器/爬蟲工具生成的站點地圖,肯定手動瀏覽器時沒有發現全部應用程序內容或功能。肯定爬蟲如何枚舉每個內容,例如,在Burp Spider中,檢查「鏈接自」(Linked From)的詳細內容。經過瀏覽器訪問這些內容,以使代理服務器/爬蟲工具檢查服務器響應,從而肯定其餘全部內容。繼續上述步驟,直到沒法在肯定其餘內容或功能。編程
4.另外,還能夠要求工具使用已經枚舉的全部內容做爲基礎,主動抓取站點內容。首先請肯定任何危險的或可能會中斷應用程序會話的URL,並配置爬蟲,將他們排除在抓取範圍以外。運行爬蟲並檢查它發現的結果以查找其餘全部內容。後端
5.在代理服務器/爬蟲工具生成的站點地圖中包含大量關於目標應用程序的信息,稍後能夠利用他們肯定應用程序暴露的各類受攻擊面。瀏覽器
因爲各類可能的響應均可表示存在有某些重要內容,很難編寫出一段徹底自動化的腳原本輸出一組有效資源。最佳方法是在使用蠻力技巧時儘量多的收集與應用程序有關的信息,並對其進行手動檢查。Burp Intruder可用於循環訪問一組常見的目錄名稱並收集服務器的響應信息,可經過檢查這些信息來肯定有效的目錄。安全
滲透測試步驟:服務器
(1).手動提出一些訪問有效與無效資源的請求,並肯定服務器如何處理無效資源
(2).使用用戶指定的抓取生成的站點地圖做爲自動查找隱藏內容的基礎
(3).自動提出訪問應用程序內已知存在的每一個目錄或路徑中經常使用文件名和目錄的請求。使用Burp Intruder或一段定製腳本,結合經常使用文件名和目錄詞彙庫,迅速生成大量請求。若是已經肯定應用程序處理訪問無效資源請求的特定方式(如自定義的File Not Found頁)配置Intruder或腳本突出顯示這些結果,以便將其忽略
(4).收集從服務器收到的響應,並手動檢查這些響應以肯定有效的資源
(5).反覆執行這個過程,直到發現新內容
滲透測試步驟:
1.檢查用戶指定的瀏覽與基本蠻力測試得到的結果。編譯枚舉出得全部子目錄名稱、文件詞幹和文件擴展名列表
2.檢查這些列表,肯定應用程序使用的全部命名方案。例如,若是有些頁面的名稱爲AddDocument.jsp和ViewDocument.jsp,那麼可能還有叫EditDocument.jsp和RemoveDocument.jsp的頁面。一般,只須要檢查幾個事例,就能推測出開發者的命名習慣。
3.有時候,不一樣內容的命名方案使用數字和日期做爲標識符,經過他們可輕易推測出隱藏的內容。靜態內容(而非動態腳本)經常採用這種命名方式。
4.檢查全部客戶端代碼,如HTTP和JavaScript,肯定任何與隱藏服務器端內容有關的線索。這些代碼包括與受保護或沒有創建鏈接的功能有關的HTML註釋以及包含禁用SUBMIT元素的HTML表單等。
5.把已經枚舉出得內容添加到其餘根據這些列表推出出來的名稱中,並將文件擴展名列表添加到txt、bak、src、inc和old這些經常使用擴展名,如Java和cs:這些擴展名可能揭示已經被編譯到現有頁面的來源文件。當執行漏洞掃描時,Paros工具可進行這種測試。
6.搜索開發者工具和文件編輯器不經意創建的臨時文件。例如DS_Store文件,其中包含一個OSX目錄索引;或者file.pho~1,他是編輯file.php時臨時創建的文件
7.進一步執行自動操做,結合目錄、文件詞幹和文件擴展名列表請求大量潛在的資源。
8.若是肯定應用程序使用一種統一的命名方案,考慮在此基礎上執行更有針對性的蠻力測試。
9.以新枚舉的內容和模式做爲深刻用戶指定抓取操做的基礎,反覆執行上述每個步驟,繼續執行自動內容查找。所採起的操做只收到想象力、可用時間以及在所針對的應用程序中發現隱藏內容的重要性的限制。
滲透測試步驟
1.列出所發現的與目標應用程序及其開發有關的每個姓名和電子郵件地址,其中應包括已知的開發者、在HTML源代碼中發現的名字、在公司Web站點聯繫信息部分發現的姓名以及應用程序自己披露的全部姓名(如管理員)
2.使用上文描述的搜索技巧,搜索發現的每個姓名,查找他們在因特網論壇上發表的全部問題和答案。分析發現的全部信息,瞭解與目標應用程序功能或漏洞有關的線索。
滲透測試步驟:
1.運行Nikto時,能夠參考如下幾點
2.若是認爲服務器將Nikto檢查的內容保存在一個非標準位置(如/cgi/cgi~bin而非/cgi-bin),可使用-root/cgi/選項指定這個位置。在使用CGI目錄的特殊狀況下,還可經過-Cgidirs選項指定保存位置
3.若是站點使用不返回HTTP 404狀態碼的File Not Found定製頁面,能夠指定一個特殊字符串,使用-404選項標誌這個頁面。
4.Nikto並不對潛在的問題執行任何智能覈實,所以,它每每會作出錯誤診斷。請手動覈實由Nikto返回的任何結果。
滲透測試步驟:
1.肯定全部經過在參數中提交某一功能的名稱(如/admin.jsp?action=editUser)而非經過請求表明那個功能的一個特殊頁面(如/admin/editUser.jsp)訪問應用程序功能的狀況。
2.修改上述用於查找URL相關內容的自動化技巧,利用它處理應用程序使用的內容-訪問機制。
3.若是可能,根據功能路徑繪製一幅應用程序內容圖,說明全部被枚舉的功能和邏輯路徑以及他們之間的依賴關係。
滲透測試步驟:
1.使用經常使用調試參數名稱(調試、測試、隱藏、來源等)和經常使用值(真、是、開通和1等)列表,向一個已知的應用程序頁面和功能提出大量請求。重複這一操做,直到瀏覽完全部名稱/值組合,在POST請求的URL查詢字符串和消息主體中插入增長的參數。
2.可使用多組有效載荷和「集束炸彈」攻擊類型,可經過Burp Intruder執行這一測試
3.監控收到的所有響應,肯定任何代表增長的參數給應用程序處理過程形成的異常
4.根據可用時間,在許多不一樣的頁面或功能中查找隱藏的參數。選擇開發人員最有可能在其中執行調試邏輯的功能,如登錄、搜索、文件上傳和下載等。
值得研究的一些關鍵區域包括如下幾方面:
1.應用程序的核心功能:用於特定的目的時,可利用他執行的操做
2.其餘較爲外圍的應用程序行爲,包括站外鏈接、錯誤消息、管理功能、日誌功能、重定向使用等。
3.核心安全機制及其運做方式,特別是會話狀態、訪問控制以及驗證機制與支持邏輯(用戶註冊、密碼修改、帳戶恢復等)
4.應用程序處理用戶提交的輸入的全部不一樣位置:每一個URL、查詢字符串參數、POST數據、cookie以及相似內容。
5.客戶端使用的技術,包括表單、客戶端腳本、厚客戶端組件(java applet 、ActiveX控件和Flash)和cookie。
6.服務器端使用的技術,包括靜態與動態頁面、使用的請求參數類型、SSL使用、WEB服務器軟件、數據庫交互、電子郵件系統和其餘後端組件。
7.任何可收集到的、關於服務器端應用程序內部結構與功能的其餘信息(客戶端可見的功能和行爲的後臺傳出機制)
須要注意的關鍵位置包括:
1.每一個URL字符串,包括查詢字符串標記。
2.URL查詢字符串中提交的每一個參數
3.POST請求主體中提交的每一個參數
4.每一個cookie
5.極少狀況下可能包括由應用程序處理的其餘每一個HTTP消息頭,特別是User-Agent、Referer、Accept、Accept-Language和Host消息頭
從理論上說,服務器返回的任何信息均可加以定製或進行有意僞造,Server消息頭等內容也不例外。一些Web服務器軟件包含一個管理員工具,可以爲Server消息頭設定任意值。此外,許多安全產品使用各類方法阻止攻擊者探測Web服務器軟件,如Port80 Software開發的ServerMask。
儘管採起了這些防護措施,但意志堅決的攻擊者仍然能夠利用Web服務器的其餘行爲肯定其使用的軟件,或者至少縮小搜索範圍。HTTP規範中包含許多可選或者由執行者自行決定是否使用的內容。另外,許多Web服務器還能夠各類不一樣的方式違背或擴展該規範。所以,除經過Server消息頭外,咱們還可使用大量迂迴的方法來識別Web服務器。
Httprint是一個便利的工具,它可執行許多測試,能識別出Web服務器使用的軟件。以Port80 Software的服務器爲例,它以58%的可信度報告了服務器使用的軟件實際爲Microsoft IIS 5.1 。
屏幕截圖還說明了Httprint如何挫敗其餘各類試圖誤導Web服務器所使用軟件的企圖。Foundstone Web站點提供一段誤導型的信息,但Httprint仍然可以發現其實際使用的軟件。
URL中使用的文件名擴展名每每可以揭示應用程序執行相關功能所使用的平臺或編程語言。如;
asp -- Microsoft Active Server Pages
aspx -- Microsoft ASP.NET
jsp -- Java Server Pages
cfm -- Cold Fusion
php -- PHP語言
d2w -- WebShpere
pl -- Perl語言
py -- Python語言
dll -- 一般爲編譯型本地代碼(C或C++)
nsf 或 ntf -- Lotus Domino
在某些狀況下,發現一個特殊的映射可能表示存在一個Web服務器漏洞。例如,過去IIS中的.printer和.ida/.idq處理程序易於遭受緩衝區溢出的攻擊。
相似於下面的URL是另一種值得注意的經常使用識別方法:https://wahh-app/news/0,,2-421206,00.html
URL末尾用逗號分隔的數字一般由Vignette內容管理平臺生成。
一些子目錄名稱經常表示應用程序使用了相關技術。例如:
servlet -- Java servlet
pls -- Oracle Application Server PL/SQL 網關
cfdocs或cfide -- Cold Fusion
silverStream -- SilverStreamWeb服務器
WebObjects或{function}.woa -- Apple Webobjects
rails -- Ruby on Rails
許多Web服務器和Web應用程序平臺默認生成的會話令牌的名稱也揭示其所使用技術的信息,例如:
JSESSIONID -- java平臺
ASPSESSIONID -- Microsoft IIS 服務器
ASP.NET_SESSIONID -- Microsoft ASP.NET
cfm -- Cold Fusion
PHPSESSID -- PHP
滲透測試步驟:
1.肯定所有用戶輸入進入點,包括URL、查詢字符串參數、POST數據、Cookie和其餘由應用程序處理的HTTP消息頭
2.分析應用程序使用的查詢字符串格式。若是應用程序並未使用第三章描述的標準格式,設法瞭解它如何經過URL提交參數。幾乎全部定製方案仍然使用名稱/值模型的某種變化形式,所以要設法瞭解名稱/值對如何被封裝到已經肯定的非標準URL中。
3.肯定任何嚮應用程序處理過程引入用戶可控制或其餘第三方數據的帶外通道
4.查看應用程序返回的HTTPServer消息頭。注意,某些狀況下,應用程序的不一樣區域由不一樣的後端組件處理,所以可能會收到不一樣的Server消息頭。
5.檢查全部定製HTTP消息頭或HTML源代碼註釋中包含的任何其餘軟件標識符
6.運行Httprint工具識別Web服務器
7.若是得到關於Web服務器和其餘組件的詳細信息,搜索其使用的軟件版本,肯定再發動攻擊時可供利用的全部漏洞
8.分析應用程序的URL列表,肯定任何看似重要的文件擴展名,目錄或其餘提供服務器使用技術相關線索的內容。
9.分析應用程序發佈的所有會話令牌的名稱,肯定其使用的技術
10.使用常見技術列表或Google推測服務器所使用的技術,或者查找其餘明顯使用相同技術的Web站點和應用程序。
11.在Google上搜索可能屬於第三方軟件組件的任何不常見的Cookie、腳本、HTTP消息頭名稱。若是發現使用相同組件的應用程序,對其進行分析,肯定該組件支持的任何其餘功能和參數,並肯定目標應用程序是否具備這些功能,使用這些參數。注意,因爲品牌定製,相同第三方組件在每一個應用程序中的外觀可能大相徑庭,但其核心功能(包括腳本和參數名稱)每每並沒有變化。若是可能,下載並安裝組件,對其進行分析以充分了解他的功能,查找其中存在全部漏洞。同時,查詢已知漏洞庫,肯定相關組件中存在的全部已知漏洞。
滲透測試步驟:
1.檢查提交到應用程序的所有參數的名稱和參數值,瞭解他們支持的功能。
2.從程序員的角度考慮問題,想象應用程序可能使用了哪些服務器端機制和技術來執行可以觀察到的行爲。
滲透測試步驟:
1.肯定應用程序中任何可能包含與其餘區域內部結構和功能有關的線索的位置
2.即便暫時沒法得到任何確定的結論,可是,在後期試圖利用任何潛在的漏洞時,肯定的狀況可能會有用。
可能發現漏洞的地方:
1.客戶端確認 -- 服務器沒有采用確認檢查
2.數據庫交互 -- SQL注入
3.文件上傳與下載 -- 路徑遍歷漏洞
4.顯示用戶提交的數據 -- 跨站點腳本
5.動態重定向 -- 重定向與消息頭注入攻擊
6.登錄 -- 用戶名枚舉、脆弱密碼、能使用蠻力
7.多階段登錄 -- 登錄缺陷
8.會話狀態 -- 可推測出的令牌、令牌處理不安全
9.訪問控制 -- 水平權限和垂直權限提高
10.用戶假裝功能 -- 權限提高
11.使用明文通訊 -- 會話劫持、收集證書和其餘敏感數據
12.站外鏈接 -- Referer消息頭中查詢字符串參數泄露
13.外部系統接口 -- 處理會話與/或訪問控制的快捷方式
14.錯誤消息 -- 信息泄露
15.電子郵件交互 -- 電子郵件與命令注入
16.本地代碼組件或交互 -- 緩衝區溢出
17.使用第三方應用程序組件 -- 已知漏洞
18.已肯定的Web服務器軟件 -- 常見配置薄弱環節、已知軟件程序缺陷
滲透測試步驟:
1.瞭解應用程序執行的核心功能及其使用的主要安全機制
2.肯定與常見漏洞有關的所有應用程序功能和行爲特性
3.制定攻擊計劃,優先考慮看似最重要的功能和最嚴重的潛在漏洞
解析應用程序是向其發動攻擊的重要前提。雖然直接發動攻擊並開始探查實際漏洞的作法十分具備吸引力,但詳細瞭解應用程序的功能、技術與受供給面更有利於後面的攻擊。
在幾乎全部的Web應用程序攻擊中,在採用手動技巧的同時,適當採用受控的自動化技巧是最有效的攻擊手段。幾乎不存在任何徹底自動化工具,可以對應用程序進行安全、完全的解析。要解析應用程序,滲透測試員須要本身動手並利用相關經驗。本章討論的核心技術包括如下幾項:
1.手動瀏覽和用戶指定的抓取,枚舉應用程序的可見內容與主要功能
2.使用蠻力結合認爲干預和直覺發現儘量多得隱藏內容。
3.對應用程序進行智能分析,肯定其關鍵功能、行爲、安全機制與技術
4.評估應用程序的受攻擊面,肯定最易受到攻擊的功能和行爲,對其執行更有針對性的探查,以發現可供利用的漏洞。