陳剛 逯柳
摘? ?要:文章分析了SQL注入、XSS,CSRF、文件上傳漏洞等常見Web系統安全問題的攻擊方式和原理,并給出了防護機制和解決方法,能有效提高Web系統運作時的安全性和魯棒性。
關鍵詞:Web系統安全;結構化查詢語言注入;跨站腳本攻擊;跨站請求偽造攻擊;文件上傳漏洞
隨著互聯網的發展,Web系統目前已經成為主要的互聯網應用平臺,而Web系統的安全性問題越來越突出,造成的損失和影響也越來越大。開放式Web應用程序安全項目(Open Web Application Security Project,OWASP)在2017年公布了十大Web安全漏洞列表[1]。本文對常見Web系統安全漏洞中的攻擊原理和方法進行了分析和研究,并給出了相應的防護措施。
1? ? Web系統安全問題
1.1? SQL注入
結構化查詢語言(Structured Query Language,SQL)注入,就是把惡意SQL命令插入到統一資源定位符(Uniform Resource Locator,URL)中或Web表單的輸入域中,欺騙服務器執行惡意SQL命令以達到攻擊目的。
1.1.1? SQL注入攻擊原理
SQL注入攻擊是利用Web程序設計上的漏洞或數據庫漏洞來進行攻擊。Web程序在動態生成SQL語句時沒有對用戶輸入的數據進行驗證,攻擊者通過構建特殊輸入值作為參數傳給Web程序,這些輸入值一般是合法SQL語句的組合,通過執行這些SQL語句進而執行攻擊操作。
1.1.2? SQL注入攻擊基本方法
首先,判斷Web系統是否具有SQL注入漏洞及漏洞類型。一般在URL后使用單引號、and,or或xor等構建注入語句,如在正常的鏈接http://xxx/yyy.php&id=num后加單引號:http://xxx/yyy.php&id=num,就能構成基本的SQL注入漏洞存在判斷語句。其次,在鏈接后構建數字型或字符型表達式判斷注入點的數據類型,如http://xxx/yyy.php&id=numand‘1=1返回true,而http://xxx/yyy.php&id=num and‘2=1返回false,則能斷定注入點的類型為字符型。
在判斷Web系統有注入點后,就可以進行數據庫、表及字段等信息的獲取。如使用注入語句and (Select count(*) from 猜測的表名)<>0或and exists (select * from 猜測的表名),進行表名猜測;猜測出表名后使用語句and (Select count(列名) from 表名)<>0或and exists (select 列名 from 表名)進行字段名猜測。也可以使用數據庫內置函數來獲得數據庫信息,比如使用union select 1, database()獲得數據庫名,使用union select 1, table_name from information_schema.tables where table_schema=database()獲得表名。
在獲得數據庫基本信息后,就可以使用查詢語句得到Web系統的一些關鍵數據和信息,比如管理員的賬號和密碼,利用這些信息完成進一步的注入和攻擊。
1.2? XSS攻擊
跨站腳本(Cross Site Scripting,XSS)攻擊,XSS攻擊通常指的是利用網頁開發時留下的漏洞,通過巧妙的方法注入惡意指令代碼到網頁,使用戶加載并執行攻擊者惡意制造的網頁程序[2]。
1.2.1? XSS攻擊原理
XSS惡意攻擊者在Web頁面里插入惡意Script(PHP,js等)腳本代碼,當用戶瀏覽該頁時,如果服務器端沒有對這些數據進行過濾、驗證或者編碼,惡意腳本代碼就會在客戶端的瀏覽器上執行,盜取客戶端Cookies等敏感信息,從而達到惡意攻擊目的。
1.2.2? XSS攻擊基本方法
XSS攻擊分為反射型、持久型和DOM型3種基本方式。
反射型XSS攻擊一般以頁面表單或URL為途徑,使用get或者post方法向服務器端傳遞包含惡意腳本的數據,或是在URL的查詢字符串中包含腳本。
持久型XSS攻擊一般以留言板、評論或博客等交互平臺為途徑,在留言中嵌入惡意代碼,并上傳存儲至服務器中,只要受害者瀏覽包含此惡意代碼的頁面,就會執行惡意代碼。
DOM型XSS攻擊類似于反射型XSS,只是DOM型攻擊是通過在網頁的DOM樹中嵌入惡意腳本來實現的。
1.3? CSRF攻擊
跨站請求偽造(Cross-Site Request Forgery,CSRF)攻擊通過偽裝來自受信任用戶的請求而達成攻擊。CSRF按照請求方式可分為GET類型和POST類型。按照攻擊方式可分為HTML CSRF,JSOM HiJacking和Flash CSRF等類型。
1.3.1? CSRF攻擊原理
CSRF攻擊者通過技術手段欺騙用戶的瀏覽器去訪問已認證過的網站并執行一些惡意操作,因為瀏覽器之前被認證過,所以服務器會認為這是合法的用戶操作而去執行,最終達到攻擊目的。
1.3.2? CSRF攻擊基本方法
首先,正常用戶使用瀏覽器登錄并訪問授信網站A,在用戶信息通過驗證后,網站A生成用戶的Cookie信息并返回給瀏覽器,此時用戶成功登錄網站A,可給網站A發送正常請求。其次,在用戶未退出網站(或者用戶Cookie信息沒過期)之前,用戶在同一瀏覽器中打開一個惡意網站B,網站B接收到用戶請求后,返回一些攻擊性代碼,并發出訪問站點A的請求。再次,瀏覽器在接收到這些攻擊性代碼后,根據網站B的請求,在用戶不知情的情況下攜帶Cookie信息,向網站A發出請求。最后,網站A并不知道該請求是由網站B發起的,所以會根據用戶的Cookie信息以及權限處理該請求,導致來自網站B的惡意代碼被執行。
1.4? 文件上傳漏洞攻擊
1.4.1? 文件上傳漏洞攻擊原理
Web應用系統通常具有文件上傳功能,如圖片發布和文檔文件上傳等,如果Web系統沒有對上傳文件的格式和內容進行嚴格過濾和檢查,攻擊者就可把包含惡意代碼的文件上傳到Web服務器上,再通過服務器對文件的解析而達成攻擊,上傳的文件可以是木馬、病毒、惡意腳本或者WebShell等。
1.4.2? 文件上傳漏洞攻擊基本方法
現以漏洞庫exploit-db中編號為60560的LibrettoCMS文件上傳漏洞為例說明該攻擊方法。LibrettoCMS是一款使用PHP和MySQL開發的Web系統,允許用戶上傳未經驗證的文件,并可對已上傳的文件名進行修改。首先,攻擊者將惡意文件(比如采用PHP語言編寫的WebShell后門程序)后綴名改為.doc或.pdf進行上傳,上傳成功后再將后綴名修改為.php,此時已經將惡意文件上傳到Web服務器中,通過瀏覽器直接訪問該文件便可啟動該WebShell。其次,通過該WebShell后門程序,攻擊者就可以在服務器上執行系統命令,執行任意PHP代碼,進行文件的任意操作,包括對數據庫的操作。最后,借助該WebShell,攻擊者還可擦除攻擊過程中留下的痕跡,可將該WebShell隱藏在管理員不易發現的位置,或者上傳更多的木馬和病毒程序。
2? ? Web系統安全防護
2.1? SQL注入攻擊的防護
使用正則表達式對用戶的輸入進行校驗和過濾;對單引號等特殊字符進行轉換等操作;減少動態SQL語句的使用,使用參數化的SQL語句;對數據庫中的敏感信息進行加密;使用自定義的錯誤提示信息。
2.2? XSS攻擊的防護
對輸入和URL參數進行過濾,檢查輸入的內容中是否有非法內容,如<>,”,,%,;,()、&和+等特殊字符;對動態輸出到頁面的內容進行HTML編碼,使腳本無法在瀏覽器中執行;對Session標記、HTTP引用頭進行檢查;設置Cookie的HttpOnly屬性為true。
2.3? CSRF攻擊的防護
將持久化的授權方法(例如Cookie或者HTTP授權)切換為瞬時的授權方法,如在每個表單中提供隱藏字段,作為Cookie之外的驗證;驗證HTTP Referer字段,HTTP頭中有一個Referer字段,這個字段用以標明請求來源于哪個地址,在處理敏感數據請求時,Referer字段應和請求的地址位于同一域名下;在請求地址中添加token并驗證,由于CSRF的本質在于攻擊者欺騙用戶去訪問自己設置的地址,所以如果要求在訪問敏感數據請求時,要求用戶瀏覽器提供不保存在Cookie中,并且攻擊者無法偽造的數據作為校驗,那么攻擊者就無法再進行CSRF攻擊。
2.4? 文件上傳漏洞攻擊的防護
Web系統對上傳的文件進行重命名,比如上傳的文件名和目錄名由系統根據一定規則(如上傳時間或隨機字符串)構成,并將其存放在數據庫中,系統使用文件時,通過查詢數據庫動態獲取。禁止用戶自定義或修改文件名,將文件上傳的目錄設置為不可執行,并記錄上傳文件日志;限制并檢查上傳文件的類型和大小,比如采用白名單策略,文件擴展名不在白名單中的文件均為不合法,對于白名單中的特定文件,還可采用分析文件頭內容的方法來驗證文件,如PNG文件頭標識為8字節:89 50 4E 47 0D 0A 1A 0A,GIF文件頭標識為6字節:47 49 46 38 39(37) 61。
3? ? 結語
Web系統安全問題種類眾多,本文僅對常見的安全問題進行了分析。由于Web系統在現實中面臨的攻擊往往是由多種攻擊方式聯合構成。因此,在對系統的防護上也要采取綜合防護手段,才能有效提高系統的安全性。對于要上線的Web系統,在正式上線前,需要聘請專業的安全團隊對系統進行完整的滲透測試,根據測試報告對系統進行整改,經過試運行后才可上線。
[參考文獻]
[1]OWASP.2017 OWASP TOP 10[EB/OL].(2017-12-04)[2019-08-10].http://www.owasp.org.cn/owasp-project/2017-owasp-top-10.
[2]蘇鵬.跨站點腳本攻擊XSS的攻擊原理與防護[J].電子科學技術,2014(1):83-87.
Abstract:This paper analyzes the attack mode and principle of common Web system security problems, such as SQL injection and XSS, CSRF, file upload vulnerability, and gives the protection mechanism and solution, which can effectively improve the security and robustness of Web system.
Key words:Web system security; structured query language injection; cross-site request forgery; file upload vulnerability