點擊鏈接加入QQ群 522720170(免費(fèi)公開課刺彩、視頻應(yīng)有盡有):https://jq.qq.com/?_wv=1027&k=5C08ATe
安全測試視頻:http://edu.51cto.com/course/5733.html
常見問題:?
1.XSS(CrossSite Script)跨站腳本攻擊
XSS(CrossSite Script)跨站腳本攻擊横侦。它指的是惡意攻擊者往Web 頁面里插入惡意html代碼啰扛,當(dāng)用戶瀏覽該頁之時,嵌入其中Web 里面的html 代碼會被執(zhí)行定欧,從而達(dá)
到惡意用戶的特殊目的漾唉。
測試方法:?
在數(shù)據(jù)輸入界面伞广,添加記錄輸入:
,添加成功如果彈出對話框涡拘,表明此處存在一個XSS漏洞玲躯。
或把url請求中參數(shù)改為
,如果頁面彈出對話框鳄乏,表明此處存在一個XSS 漏洞
修改建議:
過濾掉用戶輸入中的危險字符跷车。對輸入數(shù)據(jù)進(jìn)行客戶端和程序級的校驗(如通過正則表達(dá)式等)。
Eg:對用戶輸入的地方和變量有沒有做長度和對”<”,”>”,”;”,”’”等字符是否做過濾
2.CSRF與跨站腳本(XSS)
CSRF與跨站腳本(XSS)橱野,是指請求迫使某個登錄的瀏覽器向易受攻擊的Web應(yīng)用發(fā)送一個請求朽缴,然后以受害者的名義,為入侵者的利益進(jìn)行所選擇的行動水援。
測試方法:
同個瀏覽器打開兩個頁面密强,一個頁面權(quán)限失效后,另一個頁面是否可操作成功
使用工具發(fā)送請求蜗元,在http請求頭中不加入referer字段或渤,檢驗返回消息的應(yīng)答,應(yīng)該重新定位到錯誤界面或者登陸界面许帐。
修改建議:
在不同的會話中兩次發(fā)送同一請求并且收到相同的響應(yīng)劳坑。這顯示沒有任何參數(shù)是動態(tài)的(會話標(biāo)識僅在cookie 中發(fā)送),因此應(yīng)用程序易受到此問題攻擊成畦。因此解決的方法為
1.Cookie Hashing(所有表單都包含同一個偽隨機(jī)值):
2. ?驗證碼
3.One‐Time Tokens(不同的表單包含一個不同的偽隨機(jī)值)客戶端保護(hù)措施:應(yīng)用防止
CSRF攻擊的工具或插件。
3.注入測試
SQL注入是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符
串涝开,最終達(dá)到欺騙服務(wù)器執(zhí)行惡意的SQL命令循帐。
測試方法:
在需要進(jìn)行查詢的頁面,輸入正確查詢條件 and 1=1等簡單sql語句舀武,查看應(yīng)答結(jié)果拄养,如與輸入正確查詢條件返回結(jié)果一致,表明應(yīng)用程序?qū)τ脩糨斎胛催M(jìn)行過濾银舱,可以初步判斷此處存在SQL注入漏洞
修改建議:
對用戶的輸入進(jìn)行校驗瘪匿,可以通過正則表達(dá)式,或限制長度寻馏;對以下關(guān)鍵字進(jìn)行轉(zhuǎn)換等;
||alert|and|exec|execute|insert|select|delete|update|count|drop|chr|mid|master|truncate|declare|sitename|netuser|xp_cmdshell|or|+|,|like'|and|exec|execute|insert|create|drop|table|from|grant|group_concat|column_name|information_schema.columns|table_schema|union|where|select|delete|update|order|by|count|chr|mid|master|truncate|declare|or|--|+|,|like|//
不要使用動態(tài)拼裝sql棋弥,可以使用參數(shù)化的sql或者直接使用存儲過程進(jìn)行數(shù)據(jù)查詢存取;
不要使用管理員權(quán)限的數(shù)據(jù)庫連接,為每個應(yīng)用使用單獨(dú)的權(quán)限有限的數(shù)據(jù)庫連接;
應(yīng)用的異常信息應(yīng)該給出盡可能少的提示诚欠,最好使用自定義的錯誤信息對原始錯誤信息進(jìn)行包裝顽染。
4.登錄認(rèn)證測試
4.1暴力破解
暴力破解是目前最直接有效的攻擊方式漾岳,特別對于金融業(yè)務(wù)來說,很多情況下口令都為6位純數(shù)字粉寞,很容易被攻擊尼荆。本測試項在于檢查認(rèn)證系統(tǒng)對暴力破解的防護(hù)性。
測試方法:
啟動抓包工具唧垦,同時打開瀏覽器輸入用戶登錄頁面捅儒,輸入用戶名、密碼以及驗證碼振亮,進(jìn)行登錄野芒,如果在抓包中存在明文的用戶名和密碼,說明存在弱點双炕。
修改建議:
將請求方式從HTTP方式修改為HTTPS方式或者對輸入的用戶名和密碼進(jìn)行加密狞悲,在服務(wù)端對密碼進(jìn)行驗證
4.2代碼注釋
開發(fā)版本的Web程序所帶有的注釋在發(fā)布版本中沒有被去掉,而導(dǎo)致一些敏感信息的泄漏妇斤。我們要查看客戶端能看到的頁面源代碼并發(fā)現(xiàn)此類安全隱患摇锋。
測試方法:
打開登陸頁面(或者待測試頁面),點擊瀏覽器郵件站超,查看源代碼荸恕,檢查源代碼注釋部分是否有敏感信息泄露,敏感信息包括以下內(nèi)容:字段文字描述死相、內(nèi)網(wǎng) IP 地址融求、SQL 語句以及物理路徑等等。
修改建議:
請勿在HTML ?注釋中遺留任何重要信息(如文件名或文件路徑)算撮。
從生產(chǎn)站點注釋中除去以前(或未來)站點鏈接的跟蹤信息生宛。
避免在HTML ?注釋中放置敏感信息。
確保HTML ?注釋不包括源代碼片段肮柜。
4.3 用戶名破解
為了進(jìn)行暴力破解陷舅,攻擊者需要知道已存在的用戶名,再對該用戶名進(jìn)行攻擊审洞。
測試方法:
在登錄界面輸入不存在的用戶名和任意的口令莱睁,如果提示用戶名不存在,則說明存在漏洞芒澜;使用正確的用戶名和錯誤的口令進(jìn)行登錄仰剿,如果提示口令或密碼錯誤,則說明存在漏洞痴晦。
修改建議:
服務(wù)器對所有的登陸錯誤原因進(jìn)行統(tǒng)一的應(yīng)答南吮,不會提示準(zhǔn)確的錯誤提示信息。
4.4
在缺少鎖定策略和驗證碼設(shè)計有問題的情況下阅酪,攻擊者可以通過枚舉的方式來進(jìn)行暴力猜解旨袒。
測試方法:
在登錄頁面汁针,輸入正確的用戶名、錯誤的口令以及正確的驗證碼砚尽,提交表單施无,重復(fù)10
次,如果系統(tǒng)沒有返回類似賬號鎖定的信息必孤,則說明存在漏洞猾骡。
修改建議:
在用戶進(jìn)行錯誤登錄次數(shù)達(dá)到系統(tǒng)配置后,需要對該賬號或者該IP進(jìn)行臨時鎖定敷搪,到達(dá)解鎖條件后再進(jìn)行解鎖兴想。
4.5
查看是否有驗證碼機(jī)制,以及驗證碼機(jī)制是否完善赡勘,避免使用自動化工具重復(fù)登錄和進(jìn)行業(yè)務(wù)操作嫂便。
測試方法:
打開登陸頁面查看是否存在驗證碼,如果不存在說明存在漏洞闸与。
輸入正確的用戶名和口令以及錯誤的驗證碼毙替,如果只是提示驗證碼錯誤,則說明存在漏洞践樱。
選擇驗證碼厂画,點擊右鍵,驗證碼是圖片形式且在一張圖片中拷邢,如果不是袱院,則說明存在漏洞。
觀察驗證碼圖片中背景是否存在無規(guī)律的點或線條瞭稼,如果背景為純色(例如只有白色)說明存在漏洞忽洛。
修改建議:
將驗證碼生成放在在一張進(jìn)行了混淆處理的圖片上。
4.6
測試方法:
進(jìn)入系統(tǒng)的口令修改界面弛姜,查看是否必須輸入舊口令脐瑰,如果不需要則存在漏洞。
修改建議:
用戶修改密碼時必須提供舊密碼廷臼,且新密碼不能與舊密碼相同,密碼要有一定復(fù)雜度绝页,參見口令規(guī)則建議荠商。
4.7 默認(rèn)賬戶名稱設(shè)置
一般系統(tǒng)均設(shè)有默認(rèn)登錄用戶,以及超級管理員賬號续誉,如登錄賬號過于簡單將易被破解莱没,造成超級權(quán)限泄露。
修改建議:
上線系統(tǒng)清除超級管理員權(quán)限用戶酷鸦,或增加超級管理員登錄名復(fù)雜度饰躲,不要設(shè)置成易猜測的admin牙咏、superadmin等名稱。
4.8 錯誤的頁面信息
404嘹裂、500等錯誤或警告消息妄壶,可能會泄露敏感信息。
修改建議:
捕獲異常跳轉(zhuǎn)至統(tǒng)一錯誤頁面寄狼,避免對外泄漏詳細(xì)錯誤信息丁寄。
5.會話管理測試未更新
5.1會話標(biāo)識測試
查看登錄成功后會話標(biāo)識是否變更。如果未變更泊愧,那么攻擊者就可以通過一些手段(如構(gòu)造URL)為受害著確定一個會話標(biāo)識伊磺,當(dāng)受害者登錄成功后,攻擊者也可以利用這個
會話標(biāo)識冒充受害者訪問系統(tǒng)删咱。
測試方法:
啟動抓包工具或瀏覽器自帶開發(fā)者模式打開登錄頁面屑埋,輸入正確的用戶名、口令以及驗證碼痰滋,進(jìn)行登錄摘能,登錄后,進(jìn)行任意一項業(yè)務(wù)操作即寡。如果登錄的SessionId和進(jìn)行業(yè)務(wù)的SessionId沒有變化徊哑,則說明存在漏洞。
修改建議:
對每次請求都從上次請求獲得令牌聪富,服務(wù)端對每次交互都進(jìn)行驗證
查看是否存在瀏覽器窗口閑置超時后需重新登錄的機(jī)制
5.2會話超時測試
測試方法:
打開登錄界面莺丑,輸入正確的用戶名和口令,進(jìn)行登錄墩蔓,進(jìn)行一項業(yè)務(wù)操作梢莽,將瀏覽器空閑超過30分鐘,在進(jìn)行其他業(yè)務(wù)操作奸披,如果能夠進(jìn)行其他業(yè)務(wù)操作昏名,則說明存在漏洞。
修改建議:
需要在后臺進(jìn)行配置Session的超時時間阵面。
5.3會話清除測試
用戶注銷后會話信息需要清除轻局,否則會導(dǎo)致用戶在點擊注銷按鈕之后還能繼續(xù)訪問注銷之前才能訪問的頁面。
測試方法:
進(jìn)入登錄頁面样刷,輸入正確的用戶名和密碼仑扑,登錄成功后,進(jìn)行一些業(yè)務(wù)操作置鼻,點擊注銷按鈕镇饮,在瀏覽器輸入地址,輸入上面進(jìn)行業(yè)務(wù)操作的地址箕母,如果能夠正常返回業(yè)務(wù)頁面储藐,則說明存在漏洞俱济。
修改建議:
在用戶注銷后,必須將用戶的Session信息以及緩存信息全部清空钙勃。
? ? 6其他
6.1文件目錄測試
目錄列表能夠造成信息泄漏蛛碌,而且對于攻擊者而言是非常容易進(jìn)行的。所以在測試過程中肺缕,要注意目錄列表漏洞左医。
測試方法:
通過瀏覽器訪問web 服務(wù)器上的所有目錄,檢查是否返回目錄結(jié)構(gòu)同木,如果顯示的是目錄結(jié)構(gòu)浮梢,則可能存在安全問題;
或使用DirBuster軟件進(jìn)行測試彤路;
修改建議:
1.針對每個Directory 域都使用Allow 秕硝、Deny 等指令設(shè)置,嚴(yán)格設(shè)定WEB服務(wù)器的目錄訪問權(quán)限洲尊;
2.刪除Options 指令下的Indexes 設(shè)置項远豺;
6.2文件上傳漏洞
文件上傳漏洞通常由于網(wǎng)頁代碼中的文件上傳路徑變量過濾不嚴(yán)造成的,如果文件上傳功能實現(xiàn)代碼沒有嚴(yán)格限制用戶上傳的文件后綴以及文件類型坞嘀,攻擊者可通過 Web 訪問的目錄上傳任意文件躯护,包括網(wǎng)站后門文件(webshell),進(jìn)而遠(yuǎn)程控制網(wǎng)站服務(wù)器丽涩。
修改建議:
嚴(yán)格限制和校驗上傳的文件類型棺滞、大小等,禁止上傳惡意代碼的文件矢渊。同時限制相關(guān)目錄的執(zhí)行權(quán)限继准,防范webshell攻擊。
6.3http請求方法測試
有些Web服務(wù)器默認(rèn)情況下開放了一些不必要的HTTP方法(如DELETE矮男、PUT移必、TRACE、MOVE毡鉴、COPY)崔泵,這樣就增加了受攻擊面。
測試方法:
使用SoapUI等工具猪瞬,發(fā)送除get管削、post以外的方法請求,如接收應(yīng)答為200ok撑螺,代表啟用了不必要的方法。
修改建議:
在tomcat ?web.xml中增加如下內(nèi)容:
? ? ?/*
? ? ?PUT
? ? ?DELETE
? ? ?HEAD
? ? ?OPTIONS
? ? ?TRACE
?BASIC
6.4 服務(wù)器安全策略
1.服務(wù)器用戶權(quán)限
運(yùn)行Web服務(wù)器的操作系統(tǒng)賬號權(quán)限越高崎弃,那么Web遭到攻擊產(chǎn)生的危害就越大甘晤。部署到生產(chǎn)環(huán)境運(yùn)行時是不能用root等最高權(quán)限的含潘,一切都給予以最小權(quán)限。
2.關(guān)閉無關(guān)端口
網(wǎng)絡(luò)上被攻陷的大多數(shù)主機(jī)线婚,是黑客用掃描工具大范圍進(jìn)行掃描而被瞄準(zhǔn)上的遏弱。所以,為了避免被掃描到塞弊,除了必要的端口漱逸,例如 Web、FTP游沿、SSH 等饰抒,其他的都應(yīng)關(guān)閉。
如:關(guān)閉 icmp 端口诀黍,并設(shè)置規(guī)則袋坑,丟棄 icmp 包。這樣他人無法 Ping到服務(wù)器眯勾,服務(wù)器安全得到提升枣宫。
修改方法:丟棄 icmp 包可在 iptables 中, 加入一條語句:-A INPUT -p icmp -j DROP
3.更改默認(rèn)端口
如:默認(rèn)的 SSH 端口是 22吃环。建議改成 10000 以上也颤。這樣別人掃描到端口的機(jī)率也大大下降。
舉例修改方法:
# 編輯 /etc/ssh/ssh_configvi /etc/ssh/ssh_config# 在 Host * 下 郁轻,加入新的 Port 值翅娶。以 18439 為例(下同):Port 22 Port 18439
# 編輯 /etc/ssh/sshd_configvi /etc/ssh/sshd_config#加入新的 Port 值Port 22Port 18439# 保存后,重啟 SSH 服務(wù):service sshd restart
測試新端口連接正常后范咨,刪除 Port 22 的配置故觅。同時從 iptables 中, 刪除22端口渠啊,添加新配置的 18439输吏,并重啟 iptables。
4.限制IP登錄
如能以固定 IP 方式連接服務(wù)器替蛉,那么贯溅,可以設(shè)置只允許某個特定的 IP 登錄服務(wù)器。 設(shè)置如下:
# 編輯 /etc/hosts.allowvi /etc/hosts.allow# 例如只允許 123.45.67.89 登錄sshd:123.45.67.89
5.使用證書登錄 SSH
相對于使用密碼登錄來說躲查,使用證書更為安全它浅,具體方法可參見網(wǎng)絡(luò)資料。
6.5 口令規(guī)則建議
規(guī)則1:口令長度的取值范圍為:0‐ ?個字符镣煮;口令的最短長度和最長長度可配置姐霍;口令的最短長度建議默認(rèn)為6個字符。
規(guī)則2:口令中至少需要包括一個大寫字母(A‐Z)、一個小寫字母(a‐z)镊折、一個數(shù)字字符(0‐9)胯府;口令是否包含特殊字符要求可以配置。
規(guī)則3:口令中允許同一字符連續(xù)出現(xiàn)的最大次數(shù)可配置恨胚,取值范圍:0‐9骂因,當(dāng)取值為 ?0 ?時,表示無限制赃泡,建議默認(rèn)為 ?3寒波。
規(guī)則4:口令須設(shè)置有效期,最短有效期的取值范圍:0‐9999 ?分鐘升熊,當(dāng)取值為0時俄烁,表示不做限制,建議默認(rèn):5 ?分鐘僚碎;最長有效期的取值范圍:0‐999 天猴娩,當(dāng)取值為 ?0 ?時,表示口令永久有效勺阐,建議默認(rèn):90 ?天卷中。
規(guī)則5:在口令到期前,當(dāng)用戶登錄時系統(tǒng)須進(jìn)行提示渊抽,提前提示的天數(shù)可配置蟆豫,取值范圍:1‐99 天,建議默認(rèn):7 ?天懒闷。
規(guī)則6:口令到達(dá)最長有效期后十减,用戶再次登錄成功但在進(jìn)入系統(tǒng)前,系統(tǒng)強(qiáng)制更改口令愤估,直至更改成功帮辟。
規(guī)則7:口令歷史記錄數(shù)可配置,取值范圍為:0‐玩焰;建議默認(rèn):3個由驹。 —?
規(guī)則8:管理員/操作員/最終用戶修改自己的口令時,必須提供舊口令昔园。
規(guī)則9:初始口令為系統(tǒng)提供的默認(rèn)口令蔓榄、或者是由管理員設(shè)定時,則在用戶/操作員使用初始口令成功登錄后默刚,要強(qiáng)制用戶/操作員更改初始口令甥郑,直至更改成功。
規(guī)則10:口令不能以明文的形式在界面上顯示荤西。
規(guī)則11:口令不能以明文的形式保存澜搅,須加密保存伍俘;口令與用戶名關(guān)聯(lián)加密,即加密前的數(shù)據(jù)不僅包括口令店展,還包括用戶名养篓。
規(guī)則12:只有當(dāng)用戶通過認(rèn)證之后才可以修改口令。
規(guī)則13:修改口令的帳號只能從服務(wù)器端的會話信息中獲取赂蕴,而不能由客戶端指定。
6.6 ?頁面輸入項校驗建議
對輸入?yún)?shù)進(jìn)行處理舶胀,建議過濾出所有以下字符:
[1] |(豎線符號)
[2] & (& 符號)
[3];(分號)
[4] $(美元符號)
[5] %(百分比符號)
[6] @(at 符號)
[7] '(單引號)
[8] "(引號)
[9] '(反斜杠轉(zhuǎn)義單引號)
[10] "(反斜杠轉(zhuǎn)義引號)
[11] <>(尖括號)
[12] ()(括號)
[13] +(加號)
[14] CR(回車符概说,ASCII 0x0d)
[15] LF(換行,ASCII 0x0a)
[16] ,(逗號)
[17] (反斜杠)