安全漏洞隨筆
1、XSS漏洞
-
原理:XSS(Cross-Site Scripting,跨站腳本攻擊)是由于服務器對輸入數據的過濾和驗證不嚴格,攻擊者可以在網頁中插入惡意的 JavaScript 代碼,這些惡意的 JavaScript 代碼會被當作響應的一部分返回給客戶端。當瀏覽器解析來自服務器的響應時,它會執行這些惡意的 JavaScript 代碼,從而導致攻擊者能夠執行惡意操作,如竊取用戶信息、劫持會話等。
XSS攻擊的核心在于攻擊者通過HTML的script標簽或元素屬性來執行JavaScript腳本。 -
分類:XSS攻擊可以分為反射型、存儲型和DOM-XSS三種類型。
反射型XSS:攻擊者輸入可控數據到HTML頁面中(通常是URL),輸入的數據沒有被存儲,只能在單次請求中生效。
存儲型XSS:攻擊者輸入可控數據到HTML頁面(通常是POST表單:評論、留言板、登錄框等),輸入的數據會被存儲到數據庫中,攻擊的次數比反射型XSS多。
DOM-XSS:攻擊者可控數據通過JavaScript和DOM技術輸出到HTML中,其實是一種特殊類型的反射型XSS,基于DOM文檔對象模型的一種漏洞。 -
觸發場景:
反射型:舉個例子,比如我們在訪問一個鏈接的時候(http://102.3.203.111/Web/reflectedXSS.jsp?param=value...),這個URL中就帶了參數(param=value...),如果服務端沒有對參數進行必要的校驗,直接根據這個請求的參數值構造不同的HTML返回,讓value出現在返回的html中(JS,HTML某元素的內容或者屬性)并被瀏覽器解釋執行,就可能存在反射型XSS漏洞。(參考地址:https://cloud.tencent.com/developer/article/1375824)
存儲型:用戶留言、商品評論區、圖片上傳、用戶個人資料頁面等。
DOM型:這種類型的XSS攻擊不依賴于服務器端的數據存儲,而是發生在客戶端,當攻擊者利用瀏覽器解析和動態修改DOM樹的過程中,如果未正確過濾或轉義來自不可信源的數據,就可能觸發DOM-Based XSS。主要有查詢、有道翻譯場景。(例子參考地址:https://blog.csdn.net/qq_53577336/article/details/122441536) -
測試方法:
手工檢測:通過輸入特殊字符和腳本代碼,檢查應用程序是否執行了這些腳本。
自動化工具檢測:使用如BurpSuite的XSS Validator插件、XSSer等自動化工具進行掃描。 -
測試工具:
BurpSuite:通過安裝XSS Validator插件,結合Intruder模塊進行XSS測試;APSCAN;AWVS。 -
工具原理:使用內置的Payload處理器來定制攻擊載荷(類似口令暴力破解)。
-
修復方法:防御XSS攻擊的關鍵在于對用戶輸入進行過濾和轉義,確保任何用戶提交的數據在返回給客戶端之前都被正確地處理。例如,對于服務器端的安全措施,如使用htmlspecialchars()函數,可以將特殊字符轉換為HTML實體,從而防止XSS攻擊;cookie中設置http-only;響應頭設置使用CSP(Content Security Policy)。此外,使用現代Web開發框架和庫,這些通常已經內置了防止XSS攻擊的機制,也是一個很好的實踐。(Django就有防XSS的機制)
2、SQL注入漏洞
-
原理:
SQL 注入就是指 Web 應用程序對用戶輸入的數據合法性沒有過濾或者是判斷,攻擊者可以在Web應用程序中事先定義好的查詢語句的結尾上添加額外的SQL語句,在管理員不知情的情況下實現非法操作,以此來實現欺騙數據庫服務器執行非授權的任意查詢,從而進一步得到相應的數據信息。(https://blog.csdn.net/weixin_49349476/article/details/134193558) -
分類:
-----依據注入點類型分類:
數字類型的注入
字符串類型的注入
搜索型注入
-----依據獲取信息的方式分類
~一、盲注
基于布爾的盲注

基于時間的盲注
~二、基于報錯的注入
~三、聯合查詢注入(union聯合查詢適用于有顯示列的注入。我們可以通過order by來判斷當前表的列數。4時錯誤,3時正確,可得知,當前表有3列。)
~四、堆查詢注入 (可同時執行多條語句)
-
觸發場景:
SQL注入經常出現在登陸頁面、涉及獲取HTTP頭(user-agent / client-ip等)的功能點及訂單處理等地方。例如登陸頁面,除常見的萬能密碼,post 數據注入外也有可能發生在HTTP頭中的 client-ip 和 x-forward-for 等字段處。這些字段是用來記錄登陸的 i p的,有可能會被存儲進數據庫中從而與數據庫發生交互導致sql注入。 -
測試方法:
一:先加單引號'、雙引號"、單括號)、雙括號))等看看是否報錯,如果報錯就可能存在SQL注入漏洞了。
二:還有在URL后面加 and 1=1 、 and 1=2 看頁面是否顯示一樣,顯示不一樣的話,肯定存在SQL注入漏洞了。
三:還有就是Timing Attack測試,也就是時間盲注。有時候通過簡單的條件語句比如 and 1=2 是無法看出異常的。
在MySQL中,有一個Benchmark() 函數,它是用于測試性能的。Benchmark(count,expr) ,這個函數執行的結果,是將表達式 expr 執行 count 次 。
因此,利用benchmark函數,可以讓同一個函數執行若干次,使得結果返回的時間比平時要長,通過時間長短的變化,可以判斷注入語句是否執行成功。這是一種邊信道攻擊,這個技巧在盲注中被稱為Timing Attack,也就是時間盲注。
盲注案例參考地址:http://www.rzrgm.cn/qiushuo/p/17485659.html#判斷注入類型
問題:SQL注入攻擊 - SQL注入無回顯,盲注又被封怎么辦?
答:如果SQL注入被封鎖,開源使用DNSlog進行回顯。

-
測試工具:sqlite
-
工具原理:
![]()
-
修復方法:
-
使用安全框架與中間件
很多現代Web框架(如Ruby on Rails、Spring Boot)默認會對用戶輸入進行清理或參數化處理,大大降低了SQL注入的風險。此外,可配置的Web應用防火墻(WAF)也能實時監控并阻止可疑的SQL注入式請求。
···Springboot:mybaties框架
···java語言:PreparedStatemen預編譯
···python語言:sqlite3參數化查詢
···Django框架的orm -
輸入驗證與凈化
除了預編譯和參數化查詢,還可以對用戶輸入進行白名單或黑名單校驗。例如,對于日期字段,只接受符合日期格式的字符串;對于整數字段,確保輸入是數字類型。
總結:在設計和開發階段就引入安全性考量,借助于預編譯語句、參數化查詢、安全框架、輸入驗證等技術手段,可以有效抵御SQL注入攻擊。同時,強化日常運維的監控、審計與測試工作,能夠進一步提高系統的整體安全性。
3、文件上傳漏洞
原理:
文件上傳漏洞是指由于程序員在對用戶文件上傳部分的控制不足或者處理缺陷,而導致的用戶可以越過其本身權限向服務器上上傳可執行的動態腳本文件。這里上傳的文件可以是木馬,病毒,惡意腳本或者WebShell等。
(webshell是一種以asp、php、jsp或者cgi等網頁文件形式存在的一種命令執行環境,也可以將其稱之為一種網頁后門。攻擊者在入侵了一個網站后,通常會將這些asp或php后門文件與網站服務器web目錄下正常的網頁文件混在一起,然后使用瀏覽器來訪問這些后門,得到一個命令執行環境,以達到控制網站服務器的目的(可以上傳下載或者修改文件,操作數據庫,執行任意命令等)。 WebShell后門隱蔽較性高,可以輕松穿越防火墻,訪問WebShell時不會留下系統日志,只會在網站的web日志中留下一些數據提交記錄)
getshell案例:http://www.rzrgm.cn/roothide/p/13594616.html
分類:
參考https://blog.csdn.net/qq_42263820/article/details/109587682

修復方法:

目錄遍歷與文件包含的區別:
a)什么是文件包含:開發人員為了使代碼更靈活,會將被包含的文件設置為變量,用來進行動態調用,從而導致客戶端可以惡意調用一個惡意文件,造成文件包含漏洞。
b)區別與防御:https://blog.csdn.net/qq_36303446/article/details/119445345
4、后臺提權
什么場景下需要提權:
提權,顧名思義就是提升權限,當我們getshell一個網站之后,大部分情況下我們的權限是非常低的(一般只是一個apache權限)。這時候為了“擴大戰果”,就需要利用提權,來讓原本的低權限(如只允許列目錄)–>高權限(擁有修改文件的能力),提升一下權限,有助于我們繼續往下滲透。

提權思路:
a)linux基礎信息收集
uname -a 顯示全部系統信息
cat /etc/issue 內核信息。此命令也適用于所有的Linux發行版
cat /etc/passwd 所有人都可看
ps aux | grep root
b)提權場景匯總
passwd文件提權
shadow文件提權
SUID可執行文件提權
Cron Jobs定時任務提權
通配符注入提權
sudo濫用提權
敏感文件提權
跳板用戶提權
Linux內核漏洞提權
暴力破解提權
5、污點分析


浙公網安備 33010602011771號