The first day,fighting.
Web滲透測試:
滲透測試是對系統(tǒng)安全性的測試,通過模擬惡意黑客的攻擊方法,來評估系統(tǒng)安全的一種評估方法。
1、SQL注入攻擊
首先找到帶有參數(shù)傳遞的URL頁面,如搜索頁面、登錄頁面、提交評論頁面等。
對于未明顯標識在URL中傳遞參數(shù)的,可以通過查看HTML源代碼中的FORM標簽來辨別是否還有參數(shù)傳遞,在<FORM>和</FORM>的標簽中間的每一個參數(shù)傳遞都有可能被利用。
當找不到有輸入行為的頁面時候,可以嘗試找一些帶有某些參數(shù)的特殊的URL,如HTTP://DOMAIN/INDEX.ASP?ID=10
在URL參數(shù)或表單中加入某些特殊的SQL語句或SQL片段,如在登錄頁面的URL中輸入HTTP://DOMAIN/INDEX.ASP?USERNAME='HI' OR 1=1
根據(jù)實際情況,SQL注入請求可以使用以下語句:
' or 1=1-- ? ?
" or 1=1--
or 1=1--
' or 'a'='a
" or "a"="a
') or ('a'='a
OR是一個邏輯運算符,在判斷多個條件的時候,只要一個成立,則等式就成立,后面的AND就不再執(zhí)行判斷了,也就是說繞過了密碼驗證,只用用戶名就可以登錄。
--是忽略或注釋,通過連接符注釋掉后面的密碼驗證(對access數(shù)據(jù)庫無效)。
預(yù)防SQL注入:轉(zhuǎn)義敏感字符及字符串;屏蔽出錯信息;在服務(wù)端正式處理之前對提交數(shù)據(jù)的合法性進行檢查(合法性檢查主要包括三項:數(shù)據(jù)類型,數(shù)據(jù)長度,敏感字符的校驗)。最根本的解決手段是在確認客戶端的輸入合法之前,服務(wù)端拒絕進行關(guān)鍵性的處理操作。
SQL注入步驟:
首先,判斷環(huán)境,尋找注入點,判斷數(shù)據(jù)庫類型。
其次,根據(jù)注入?yún)?shù)類型,在南海中重構(gòu)SQL語句的原貌,按參數(shù)類型主要分為三種:
(A)ID=49
這類注入的參數(shù)是數(shù)字型,SQL語句原貌大致如下:
select * from 表名 where 字段=49
注入的參數(shù)為ID=49 and [查詢條件],即生成語句:
select * from 表名 where 字段=49 And [查詢條件]
(B)class=連續(xù)劇
這類注入的參數(shù)是字符型,SQL語句原貌大致如下:
select * from 表名 where 字段=‘連續(xù)劇’
注入的參數(shù)為class=連續(xù)劇’ and [查詢條件] and ' ' =' ?,即生成語句:
select * from 表名 where 字段=‘連續(xù)劇’ and [查詢條件] and ' '=' '?
搜索時沒過濾參數(shù)的,如keyword=關(guān)鍵字,SQL語句原貌大致如下:
Select * from 表名 where 字段like ’%關(guān)鍵字%’
注入的參數(shù)為keyword=’ and [查詢條件] and ‘%25’=’, 即是生成語句:
Select * from 表名 where字段like ’%’ and [查詢條件] and ‘%’=’%’
接著,將查詢條件替換成SQL語句,猜解表名,例如:
ID=49 And (Select Count(*) from Admin)>=0
如果頁面就與ID=49的相同,說明附加條件成立,即表Admin存在,反之,即不存在(請牢記這種方法)。如此循環(huán),直至猜到表名為止。
表名猜出來后,將Count(*)替換成Count(字段名),用同樣的原理猜解字段名。
最后,在表名和列名猜解成功后,再使用SQL語句,得出字段的值。
SQL注入常用函數(shù):
Access: asc(字符),SQL Server: unicode(字符)
作用:返回某字符的ASCII碼
Access: chr(數(shù)字),SQL Server: nchar(數(shù)字)
作用:根據(jù)ASCII碼返回字符
Access: mid(字符串,N,L),
SQL Server: substring(字符串,N,L)
作用:返回字符串從N個字符起長度為L的子字符串,即N到N+L之間的字符串
Access: ?abc(數(shù)字),SQL Server: abc(數(shù)字)
作用:返回數(shù)字的絕對值(在猜解漢字的時候會用到)
Access: A between B And C ,SQL Server: A between B And C?
作用:判斷A是否界于B和C之間
中文處理方法:
access:中文的ASCII碼可能會出現(xiàn)負數(shù),取出該負數(shù)后用abs()取絕對值,漢字字符不變。
SQL Server:中文的ASCII為正數(shù),但由于是UNICODE的雙位編碼,不能用函數(shù)ascii()取得ASCII碼。必須用函數(shù)Unicode()返回Unicode值,再用nchar函數(shù)取得對應(yīng)的中文字符。

注意,引用數(shù)字時不需要按添加開始和結(jié)尾的單引號定界符。數(shù)據(jù)庫處理數(shù)值類型的值時,數(shù)值不帶引號。


2、Cross-site scripting(XSS):跨站點腳本攻擊
首先找到帶有參數(shù)傳遞的URL,如登錄頁面,搜索頁面,提交評論,發(fā)表留言頁面等。
其次,在頁面參數(shù)中輸入如下語句:<script>alert(document.cookie)</script>
當用戶瀏覽時便會彈出一個警告框,內(nèi)容顯示的是瀏覽者當前的cookie串,這就說明該網(wǎng)站存在XSS漏洞。
預(yù)防XSS漏洞:對JavaScript,VB script,HTML,ActiveX,Flash等語句或腳本進行轉(zhuǎn)義;在服務(wù)端正式處理之前對提交數(shù)據(jù)的合法性進行檢查(合法性檢查主要包括三項:數(shù)據(jù)類型,數(shù)據(jù)長度,敏感字符的校驗)。
3、CSRF:跨站點偽造請求
與XSS不同,且攻擊方式幾乎相左,XSS是利用站點內(nèi)的信任用戶,而CSRF則通過偽裝來自受信任用戶的請求來利用受信任的網(wǎng)站。
XSS和CSRF目的在于竊取用戶的信息,如session和cookies.
4、Email Header Injection:郵件標頭注入
如果表單用于發(fā)送email,表單中可能包括subject輸入項(郵件標題),我們要驗證subje中應(yīng)能escape掉\n標識。
因為“\n”是換行,如果在subje中輸入“hello\ncc:spamvictim@example.com”,可能會形成:
subject:hello
cc:spamvictim@example.com
如果允許用戶使用這樣的subject,那他可能會利用這個缺陷通過我們的平臺給其他用戶發(fā)送垃圾郵件。
5、Directory Traversal:目錄遍歷
程序中沒有過濾用戶輸入的“../”和“./”之類的目錄跳轉(zhuǎn)符,導(dǎo)致惡意用戶可以通過提交目錄跳轉(zhuǎn)來遍歷服務(wù)器上的任意文件。
測試方法:在URL中輸入一定數(shù)量的“../”和“./”,驗證系統(tǒng)是否escape掉了這些目錄跳轉(zhuǎn)符。
預(yù)防目錄遍歷:限制Web應(yīng)用在服務(wù)器上的運行,進行嚴格的輸入驗證,控制用戶輸入非法路徑。
6、exposed err messages:錯誤信息
首先找到一些錯誤頁面,比如404或500頁面。
驗證在調(diào)試未開通過的情況下,是否給出了有好的錯誤提示信息,比如“你訪問的頁面不存在”等,而并非暴露一些程序代碼。
預(yù)防錯誤信息:測試人員在進行需求檢查時,應(yīng)該對出錯信息進行詳細檢查,比如是否給出了出錯信息,是否給出了正確的出錯信息。