隨著網際網路的不斷發展,人們對網路的使用越來越頻繁,通過網路進行購物、支付等其他業務操作。而一個潛在的問題是網路的安全性如何保證,一些黑客利用站點安全性的漏洞來竊取用戶的信息,使用戶的個人信息泄漏,所以站點的安全性變得很重要。

Web 系統的安全性測試包括以下內容:

(1)Web 漏洞掃描

(2)伺服器端信息測試

(3)文件和目錄測試

(4)認證測試

(5)會話管理測試

(6)許可權管理測試

(7)文件上傳下載測試

(8)信息泄漏測試

(9)輸入數據測試

(10)跨站腳本攻擊測試

(11)邏輯測試

(12)搜索引擎信息測試

(13)Web Service 測試

(14)其他測試

本章節主要給大家介紹第(10)點——跨站腳本攻擊測試

XSS 又叫CSS(Cross Site Script,跨站腳本攻擊),是指惡意攻擊者在Web 頁面里插入惡意HTML 代碼。當用戶瀏覽該頁時,嵌入其中的HTML 代碼會被執行,從而達到惡意攻擊的目的。

XSS 屬於被動式攻擊,因為其被動且不好利用,所以容易被忽略其危害性。

XSS 攻擊分成兩類:一類是來自內部的攻擊,另一類是來自外部的攻擊。內部攻擊是指利用程序自身的漏洞,構造跨站語句;外部攻擊是指自己構造XSS 跨站漏洞網頁或者尋找非目標機以外的有跨站漏洞的網頁。

測試包括兩方面的內容:GET 方式跨站腳本測試和POST 方式跨站腳本測試

(1)GET 方式跨站腳本測試

GET 方式跨站腳本測試主要是測試以GET 方式提交的請求頁面是否存在漏洞。如下面的頁面,

假設訪問的UTL 為127.0.0.1:81/testget.ph

該頁面輸出的內容為「歡迎您,[name]」,name 為輸入的參數,如輸入URL 為127.0.0.1:81/testget.ph,頁面顯示的內容為「歡迎您,test」。

瀏覽器對網頁的展現通過解析HTML 代碼來實現,那麼如果name 的參數為HTML 代碼,結果會怎麼樣呢?具體的測試步驟如下:

步驟1:將URL 修改為127.0.0.1:81/testget.ph<script>alert(hello)</script>,如果alert 函數彈出一個hello 對話框,則說明系統存在漏洞。

步驟2:如果沒有彈出hello 對話框,則需要在頁面上單擊右鍵,在彈出菜單中選擇「查看源文件」命令,如果源文件的內容為「歡迎您,<script>alert(hello)</script> 」,不管會不會彈出hello對話框,都說明系統存在跨站腳本漏洞。

步驟3:由於HTML 元素(比如<textarea>或")會影響腳本的執行,所以不一定能夠正確地彈出hello 對話框,在測試過程中可以根據實際需要來構造name 的value 值,如多行文本輸入框:

(2)POST 方式跨站腳本測試

POST 方式跨站腳本測試主要是測試以POST 方式提交的請求頁面是否存在漏洞。如下面的頁面,假設訪問的UTL 為127.0.0.1:81/testpost.p

POST 方式跨站腳本攻擊測試相對複雜一點,測試步驟如下:

步驟1:新建一個HTML 文件,假設為test.html,文件中的源代碼如下:

<form action=" 127.0.0.1:81/testpost.p " method="post">

<input name="name" value="<script>alert(hello)</script>" type="hidden" />

<input name="ss" type="submit" value="XSS 測試" />

</form>

步驟2:運行test.html 文件,如果alert 函數會彈出一個hello 對話框,則說明系統存在漏洞。

步驟3:如果沒有彈出hello 對話框,則需要在頁面上單擊右鍵,在彈出菜單中選擇「查看源

文件」命令。如果源文件的內容為「歡迎您,<script>alert(hello)</script> 」,那麼不管會不會彈出hello 對話框,都說明系統存在跨站腳本漏洞。

步驟4:由於HTML 元素(比如<textarea>或")會影響腳本的執行,所以不一定能夠正確地彈出hello 對話框,在測試過程中可以根據實際需要來構造name 的value 值,如多行文本輸入框:

</textarea><script>alert(123456)</script>

文本輸入框:

</td><script>alert(123456)</script>

><script>alert(123456)</script>

"><script>alert(123456)</script>

</title><script>alert(123456)</script>

--><script>alert(123456)</script>

[img]javascript:alert(123456)[/img]

<scrip<script>t>alert(123456)</scrip</script>t>

</div><script>alert(123456)</script>

說明:以上兩種方式都是手工方式,在測試過程中由於網頁太多,使用手工測試很難測試全面,可以藉助測試工具(如AppScan 工具)進行掃描測試。但是掃描工具只能提高效率,並不能完全代替手工測試,因為掃描工具受到規則和技術的限制,可能誤報甚至漏報,所以手工測試還是必不可少的。


推薦閱讀:
相关文章