A. Web2.0 安全工具與參考資料

1. Proxy分析 : Paros

INTRO

Paros是一個網站應用程式資訊安全掃瞄工具,換句話說是個網站應用程式的安全評估工具,是個免費開放且以 Java 開發而成的,透過Paros's proxy,sever 與 client之間的所有 HTTP 和 HTTPS 的資料包括 cookies ,都能被竊聽跟更改。

Paros除了可竊聽網頁傳送的資料外,也具備網頁弱點掃瞄與偵測能力,包括了常見的安全性漏洞檢測,例如上課所說過的XSS 、SQL Injection 等等一些重要的項目。


操作說明

首先先將 proxy 的網址設定成 「localhost」 ,連接埠為 「8080」 ,然啟動Paros,接著瀏覽網頁,這樣Paros就會抓到網頁位置,變可以開始下面的動作。

點選 Analyse 的 Spider ,他將為你抓取整個網站所有的超連結
 

 

執行後會抓出類似下圖的許多網址(不過由於抓取全部資料龐大且時間久,此圖僅執行小部份就中斷切掉)

 

接下來即可點選所需的網址去作 Scan ,下方 Alerts頁面即會出現軟體掃瞄後認為可能有漏洞的網址

 

另外在掃瞄的部份,使用者可點選掃瞄的項目。點選 Analyse 的 Scan Policy

 

下載與安裝

在安裝前,請先確定已安裝 JRE 1.4

官方網站︰http://www.parosproxy.org/index.shtml

目前版本︰Paros v3.2.13 was released on 8 Aug 2006.

 

小結

Paros是個簡易不複雜且操作方便的工具。

當然軟體掃瞄出來顯示有漏洞的網頁也只是參考,並不表示真的有漏洞,自己需要判斷。


 


 

 

2. HTTP流量監控的 Plug-in : LiveHTTPHeader 

INTRO

LiveHTTPHeader 是 FireFox 下的附加元件,主要功能是瀏覽器與網路間通訊的監控與分析。

LiveHTTPHeader 除了對 HTTP 的監控外,還可以 replay 一個請求,對該請求進行修改。

 

操作說明

在開啟 LiveHTTPHeader 後,點選 Capture 及開啟或關閉抓取功能,接著瀏覽網頁即可抓到 HTTP Header 的資料。


LiveHTTPHeader 提供了過濾功能,可以過濾或排除特定類型的URL。
如圖所示,以.gif .jpg .ico .css .js 結尾的 URL 將會被排出在清單外。
 


除了監控之外,LiveHTTPHeader  可以 replay 一個請求。

在點選 Replay 後,會跳出如圖的視窗,在此我們可以對該請求進行各種修改,進而測試程序的弱點和缺陷

 

 

下載

官方網站:http://livehttpheaders.mozdev.org

目前版本︰version 0.15


小結

LiveHTTPHeader 是個操作簡易的工具,且輕鬆就能查看請求的內容並修改重發,對XSS方面的缺陷,LiveHTTPHeader是個常用的工具之一。

 

 

 


 

 

3. Greasemonkey

INTRO

GreaseMonkey 是firefox的一個附加元件,原創者是Aaron Boodman。

從2006年甚至更早,就打算設計出一套可以供使用者利用腳本來控制html為主的網頁,主要是為了使用者便利存取網頁,抑或者,省掉多餘的時間由其在網路的存取上面。

下載GreaseMonkey後,再套入方便的腳本,之後腳本會常駐於瀏覽器當中,當瀏覽到該網頁時就會套用瀏覽器內的腳本來更改目前的頁面,講白點,改成你所要的功能,在軟體的呈現上面顯得更客製與彈性化且編輯門檻較低,使用者也可以成為開發者。

目前IE沒有支援這套軟體,屬firefox plug-in 的一部分。

 

架構(Structure)


下載頁面與需求

Download GreaseMonkey software:
https://addons.mozilla.org/zh-TW/firefox/tag/greasemonkey

Download Prerequisite:  firefox

 

優點

1. 腳本數目的多寡不會影響瀏覽過程中的delay time
(除腳本本身有bug或帶有大量運算的函數外)

2. 藉由這套軟體,可以使網頁呈現更具有彈性

3. 補足了原本網頁上的不足


缺點

有些腳本並不是寫的非常完善,所以需安裝另外一個腳本
要使得全部腳本不定期連回http://userscripts.org/去做updated

 

Application

1. Wikipedia - Nicer search box 讓wikipedia上的搜尋欄位更好看

2. Remove All Facebook Ads  除去facebook上所有的廣告

3. Download YOUTUBE Videos as MP4 在youtube上顯示下載mp4影音檔

4. Splash album viewer 在相簿中的小圖示可以直接顯示大圖,瀏覽相簿的好工具

5. Facebook Fixer facebook小圖示放大及頁面修正等等

 

其他的userScript可至 http://userscripts.org/scripts 查詢


 


 

 

4. Browser automation : Sahi

INTRO

Sahi 可以在廣大的網路服務中當作是一個testing tool。

從1995年起,這家公司嘗試以Java 和 JavaScript來撰寫此應用程式,並放在SourceForge供人下載。

公司宣稱軟體是跟網頁瀏覽器與作業系統完全無任何的相依性。

 

結構(Structure)

 

下載與安裝

Download Sahi testing tool:http://sourceforge.net/projects/sahi/

Download Prerequisite:Java 1.5+ , browser

Installing Sahiunzip the file to the desired location

 

使用說明

1. Windows: – Go to ..\sahi\userdata\bin and run sahi.bat

2. 打開瀏覽器,到連線選單下設定proxy位址,localhost,port:9999(default)

3. 欲開啟Sahi Controller, 按住Ctrl + Alt 並在瀏覽器內double clicked

下圖是Sahi Controller的介面:

 

Application

1. System Analysis

2. System Security

 

Cost

下圖是Automation testing's project outsourcing的價碼:


特色

1. 可以透過這個軟體進行browser actions的recording;
另一方面有actions playback的功能

2. 支援AJAX and動態的應用程式

3. 支援外部的proxy server和https

4. 軟體佔記憶體空間小

5. 使用者可以同時編輯擷取來的javascript

6. 有提供簡單的API,供撰寫Sahi script

7. 此軟體可以用於偵測網頁的bug並記錄下來

8. 程式碼可以發佈到web server

9. 可以背景偵測

10. 支援multiple threads,可以執行的更有效率

 


 

5. XSS Exploitation : BeEF

INTRO

BeEF 是一個攻擊瀏覽器用的框架(browser exploitation framework),一個PHP的框架。它提供了一個指揮和控制介面,實現了提供一個框架以攻擊瀏覽器或 Cross-site Scripting 的方法。建立了一個模組化的框架,這使得發展能夠更快。一旦用戶到達的惡意網頁,攻擊者可以發送命令來執行端口掃瞄,利用瀏覽器,竊取信息。

功能介面

首先先下載BeEF的檔案,解壓縮後放到伺服器中

登入畫面

 

進入畫面

攻擊的範例

日誌訊息

 

模組


下載

官方網站:http://bindshell.net/tools/beef/

 


 

6. XSS-Proxy Metasploit 3.0 及 Web2.0 Layer

INTRO

Metasploit Framework 是2003年以開放源代碼方式發佈、可自由獲取的開發框架,這個環境為滲透測試、shellcode編寫和漏洞研究提供了一個可靠的平台。 它集成了各平台上常見的overflow漏洞和流行的shellcode,並且不斷更新,Metasploit Framework 包含了180多種以上流行的操作系統和應用軟體的exploit,以及100多個shellcode。  作為安全工具,它在安全檢測中起到不容忽視的作用,並為漏洞自動化探測和及時檢測系統漏洞提供有力的保障。

 

操作說明

首先如要得知基本操作指令,可輸入"help"即會顯示許多指令

輸入"show exploits"可顯示有哪些可用的Exploits程序

(左邊為程序名稱,右邊為對應的簡介)


輸入"show payload"可顯示有哪些加載的ShellCode

 

輸入"info 程序名稱",可查看程序裡面的內容資料

而輸入"use 程序名稱" 將會切入到該目錄下

"show options" 查看內容

設置攻擊目標主機的IP位址輸入︰set RHOST  "IP位址"

設置加載的ShellCode程序輸入︰set payload  "ShellCode"

執行利用程序輸入︰exploits

(下圖只是隨意舉例示範,並無成功)


如此執行,可攻擊目標主機系統

 

除了此介面,Metasploits 也有圖形介面可以操作

在安裝目錄資料夾下,找到 Msfweb.bat 執行,將會出現如下圖所示


開瀏覽器輸入http的網址即會出現圖形介面的Metasploits

由於只是操作些許不同,使用方法沒太大區別,在此就沒多作介紹

Metasploits 會不定期更新可利用的漏洞程序,可以透過Online Update還進行升級


下載

官方網站︰ http://www.metasploit.com/

 

參考網頁

 葉子 http://trustsec.blog.51cto.com/305338/64555

 


 

 

 

7. DOM 及發展者工具 : Firebug

 INTRO

firebug 是 firefox 的 plug-in,是一個方便的debug及網頁開發工具。可以幫助你編輯、修改網頁的 DOM 物件,對 JavaScript 除錯,查看任何一個元素的 CSS, HTML 設定,還可以分析網頁下載的效能,甚至於還可以自己寫程式擴充 Firebug 的功能。好處是可以顯示動態產生的 DOM,且可以直接修改,而修改會立刻反應在顯示上。 

功能介面

開始使用
按下F12或是按右下角的圖示就可以開始使用

  

 

Inspect 觀察
觀察網頁,按下按鈕後,滑鼠移到想觀察的部分,就會顯示出想觀察部分的對應原始碼


主控台
輸出程式碼中的錯誤,且可查看詳細資料

 

HTML
HTML檢視器。用此檢視頁面的原始程式碼,包括頁面中引用的所有JavaScript 和 CSS 程式碼


CSS
CSS檢視器,可以在這個檢視器中直接加入、修改、刪除 CSS 的屬性,且會直接在頁面中看到修改的結果

 


Script
JavaScript 測試器,可以設定中斷點和逐步測試

 


DOM
DOM檢視器,查看所有 DOM 節點


網路
網路狀況監控,將載入的程式碼及引用圖片所消耗的時間以柱狀圖呈現出來,且可查看 HTTP 的 Request 和 Response 的 header(順便比較google和yahoo網頁)

 

下載

官方網站:http://getfirebug.com/

 

 


 

 

8. XSS and CSRF defense reference

Cross-site scripting (XSS)在Python中的一些防禦參考

from htmllib import HTMLParser
from cgi import escape
from urlparse import urlparse
from formatter import AbstractFormatter
from htmlentitydefs import entitydefs
from xml.sax.saxutils import quoteattr

def xssescape(text):
    """Gets rid of < and > and & and, for good measure, :"""
    return escape(text, quote=True).replace(':','&#58;')

class XssCleaner(HTMLParser):
    def __init__(self, fmt = AbstractFormatter):
        HTMLParser.__init__(self, fmt)
        self.result = ""
        self.open_tags = []
        # A list of the only tags allowed.  Be careful adding to this.  Adding
        # "script," for example, would not be smart.  'img' is out by default
        # because of the danger of IMG embedded commands, and/or web bugs.
        self.permitted_tags = ['a', 'b', 'blockquote', 'br', 'i',
                          'li', 'ol', 'ul', 'p', 'cite']

        # A list of tags that require no closing tag.
        self.requires_no_close = ['img', 'br']

        # A dictionary showing the only attributes allowed for particular tags.
        # If a tag is not listed here, it is allowed no attributes.  Adding
        # "on" tags, like "onhover," would not be smart.  Also be very careful
        # of "background" and "style."
        self.allowed_attributes = \
            {'a':['href','title'],
             'img':['src','alt'],
             'blockquote':['type']}

        # The only schemes allowed in URLs (for href and src attributes).
        # Adding "javascript" or "vbscript" to this list would not be smart.
        self.allowed_schemes = ['http','https','ftp']
    def handle_data(self, data):
        if data:
            self.result += xssescape(data)
    def handle_charref(self, ref):
        if len(ref) < 7 and ref.isdigit():
            self.result += '&#%s;' % ref
        else:
            self.result += xssescape('&#%s' % ref)
    def handle_entityref(self, ref):
        if ref in entitydefs:
            self.result += '&%s;' % ref
        else:
            self.result += xssescape('&%s' % ref)
    def handle_comment(self, comment):
        if comment:
            self.result += xssescape("<! %s >" % comment)

    def handle_starttag(self, tag, method, attrs):
        if tag not in self.permitted_tags:
            self.result += xssescape("<%s>" %  tag)
        else:
            bt = "<" + tag
            if tag in self.allowed_attributes:
                attrs = dict(attrs)
                self.allowed_attributes_here = \
                  [x for x in self.allowed_attributes[tag] if x in attrs \
                   and len(attrs[x]) > 0]
                for attribute in self.allowed_attributes_here:
                    if attribute in ['href', 'src', 'background']:
                        if self.url_is_acceptable(attrs[attribute]):
                            bt += ' %s="%s"' % (attribute, attrs[attribute])
                    else:
                        bt += ' %s=%s' % \
                           (xssescape(attribute), quoteattr(attrs[attribute]))
            if bt == "<a" or bt == "<img":
                return
            if tag in self.requires_no_close:
                bt += "/"
            bt += ">"                    
            self.result += bt
            self.open_tags.insert(0, tag)
           
    def handle_endtag(self, tag, attrs):
        bracketed = "</%s>" % tag
        if tag not in self.permitted_tags:
            self.result += xssescape(bracketed)
        elif tag in self.open_tags:
            self.result += bracketed
            self.open_tags.remove(tag)
           
    def unknown_starttag(self, tag, attributes):
        self.handle_starttag(tag, None, attributes)
    def unknown_endtag(self, tag):
        self.handle_endtag(tag, None)
    def url_is_acceptable(self,url):
        ### Requires all URLs to be "absolute."
        parsed = urlparse(url)
        return parsed[0] in self.allowed_schemes and '.' in parsed[1]
    def strip(self, rawstring):
        """Returns the argument stripped of potentially harmful HTML or Javascript code"""
        self.result = ""
        self.feed(rawstring)
        for endtag in self.open_tags:
            if endtag not in self.requires_no_close:
                self.result += "</%s>" % endtag
        return self.result
    def xtags(self):
        """Returns a printable string informing the user which tags are allowed"""
        self.permitted_tags.sort()
        tg = ""
        for x in self.permitted_tags:
            tg += "<" + x
            if x in self.allowed_attributes:
                for y in self.allowed_attributes[x]:
                    tg += ' %s=""' % y
            tg += "> "
        return xssescape(tg.strip())

 

CSRF的防禦參考

CSRF的防禦可以從伺服器端與客戶端兩方面著手,防禦效果是由伺服器端著手的效果較好

目前一般的CSRF防禦多在伺服器端進行。

 

在伺服器端進行防禦的方式有很多種,但概念大致相同,就是要在客戶端頁面增加偽隨機數。

 

1. Cookie Hashing(所有表單都含有同一個偽隨機值):

大概是最簡單的解決方案了,因為攻擊者不能獲得第三方的Cookie(理論上),所以表單中的數據也就構造失敗了。

/*Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/*/

<?php

        //加密的Cookie訊息
        $value = 「DefenseSCRF」;
        setcookie(」cookie」, $value, time()+3600);
?>

//在表單裡增加Hash值,以認證這確實是用戶發送的請求。

<?php

        $hash = md5($_COOKIE['cookie']);
?>
<form method=」POST」 action=」transfer.php」>
<input type=」text」 name=」toBankId」>
<input type=」text」 name=」money」>
<input type=」hidden」 name=」hash」 value=」<?=$hash;?>」>
<input type=」submit」 name=」submit」 value=」Submit」>
</form>

//然後在伺服器端進行Hash值驗證

<?php
        if(isset($_POST['check'])) {
             $hash = md5($_COOKIE['cookie']);
           if($_POST['check'] == $hash) {
                  doJob();
           } else {
//...
             }
      } else {
//...
      }
?>

這個方法可杜絕大多數的CSRF攻擊,但由於用戶的Cookie很容易因網站的XSS漏洞而被盜取,所以還是有危險。

一般的攻擊者看到須要計算Hash值,基本上就會放棄了,但若是遇上不願放棄的呢?


2. 驗證碼

每次的要提交表單時都得填寫一個圖片上的隨機字符串,這個方法可以完全解決CSRF,但不太方便使用者。

還有傳聞說驗證碼圖片的使用涉及了一個被稱為MHTML的Bug,可能在某些版本的微軟IE中受影響。

 

3. One-Time Tokens(不同的表單包含不同的偽隨機值)

實作One-Time Tokens時,需要注意一點:就是「並行存取的兼容」。如果用戶同時打開了兩個不同的表單,CSRF保護措施不應該影響到他對任何表單的提交。

例如:如果每次表單被載入時都生成一個偽隨機值,並會覆蓋以前的偽隨機值,會變成用戶只能成功提交他最後打開的表單!


參考網站

[1] ActiveStateCode - Recipe 496942: Cross-site scripting (XSS) defense
http://code.activestate.com/recipes/496942/

[2] 淺談CSRF攻擊方式
http://blog.chinaunix.net/u2/82392/showart_1994397.html by hyddd(http://www.cnblogs.com/hyddd/)

[3] CSRF——攻擊與防禦
http://mycck.blogspot.com/2008/04/csrf.html

[4] OWASP_CSRFTester_Project
http://www.owasp.org/index.php/Category:OWASP_CSRFTester_Project

 

 

 

 


9 sql injection 偵測

Microsoft Source Code Analyzer for SQL Injection 

 

http://blog.miniasp.com/post/2008/06/26/Useful-SQL-Injection-Defense-Tools.aspx

http://www.ecom.idv.tw/index.php?load=read&id=106

 

他會直接分析你的 ASP 原始碼並明確點出你的程式中潛在的 SQL Injection 漏洞在哪裡、潛在的風險、第幾行有問題等  

所以是屬white box的工具 但只能在asp裡


UrlScan 3.1

UrlScan 3.1 is a security tool that restricts the types of HTTP requests that IIS will process. By blocking specific HTTP requests, the UrlScan 3.1 security tool helps to prevent potentially harmful requests from reaching applications on the server. UrlScan 3.1 is an update to UrlScan 2.5 supports IIS 5.1, IIS 6.0 and IIS 7.0 on Windows Vista and Windows Server 2008.

所以它是完全 support IIS 的

 

SQLInject-Finder

http://www.darknet.org.uk/2010/12/sqlinject-finder-intelligent-sql-injection-detection-script/

 

http://www.pulog.org/tools/1811/sqlinject-finder/

 

Python寫成的test script

 

 


10 HTTP 封包工具

 

 

Charles

http://abgne.tw/computer-tips/charles-farmgame_fire_seed.html

可以很簡單的看到每一個http 封包 再運用來做簡單重複的事

 

burpsuite

也是一個很不錯的封包修改工具, 而且比較偏網站攻擊, 也有spider