SQL注入
概念:一種將惡意代碼插入到程序 SQL 語句中,從而誤導數據庫執行惡意邏輯的攻擊技術。通過 SQL 注入,攻擊者可以達到獲取敏感信息,竊取訪問權限等目的。
原理:
攻擊方式:
搜索注入
報錯注入
堆疊查詢注入
基于布爾的盲注
基于時間的盲注(延時注入)
HTTP頭部注入
寬字節注入
二階注入
DNSlog外帶注入
XSS
概念:目標未對用戶從前端功能點輸入的數據與輸出的內容進行處理或者處理不當,從而導致惡意的JS代碼被執行造成竊取用戶信息/劫持WEB行為危害的WEB漏洞!
原理:
攻擊者利用瀏覽器執行前端代碼(HTML、CSS、JavaScript)的特性,將惡意的JavaScript代碼插入到頁面中,當用戶瀏覽頁面時,導致惡意代碼被執行。
攻擊方式:
1.反射型 xss 攻擊的方法為:攻擊者通過發送郵件或誘導等方法,將包含有 xss 惡意鏈接發送給目標用戶,當目標用戶訪問該鏈接時,服務器將接收該用戶的請求并進行處理,然后服務器把帶有 xss 惡意腳本發送給目標用戶的瀏覽器,瀏覽器解析這段帶有 xss 代碼的惡意腳本后,就會觸發 xss 攻擊
2.存儲型 XSS為持久化攻擊,代碼是存儲在服務器中的數據庫里,如在個人信息或發表文章等地方,可以插入代碼,如果插入的數據沒有過濾或過濾不嚴,那么這些惡意代碼沒有經過過濾將儲存到數據庫中,用戶訪問該頁面的時候,沒有進行編碼過濾輸出到瀏覽器上,就會觸發代碼執行,造成 xss 攻擊
3.DOM型 xss,DOM 型 XSS 其實是一種特殊類型的反射型 XSS,它是基于 DOM 文檔對象模型的一種漏洞。在網站頁面中有許多頁面的元素,當頁面到達瀏覽器時瀏覽器會為頁面創建一個頂級的 Document object 文檔對象,接著生成各個子文檔對象,每個頁面元素對應一個文檔對象,每個文檔對象包含屬性、方法和事件??梢酝ㄟ^ JS 腳本對文檔對象進行編輯從而修改頁面的元素。也就是說,客戶端的腳本程序可以通過 DOM 來動態修改頁面內容,從客戶端獲取 DOM 中的數據并在本地執行?;谶@個特性,就可以利用 JS 腳本來實現 XSS 漏洞的利用!
三者區別:
CSRF
概念:由于網站對用戶網頁瀏覽器的信任導致用戶在當前已登錄的Web站點的狀態下,訪問攻擊者構造的攻擊連接從而執行非本意的操作的漏洞。
原理:
攻擊方式:
1. 以受害者名義發送郵件,發消息。
2. 盜取受害者的賬號,甚至購買商品,虛擬貨幣轉賬。
3. 修改受害者的網絡配置(比如修改路由器DNS、重置路由器密碼)。
4. 網站后臺創建管理員用戶,破壞網站,獲取服務器權限等。
SSRF
概念:由于服務端提供了從其他服務器應用獲取數據的功能,但又沒有對目標地址做嚴格過濾與限制,導致攻擊者可以傳入任意的地址來讓后端服務器對其發送請求,并返回對該目標地址請求的數據的Web安全漏洞!
原理:
攻擊方式:
1.訪問內部資源:攻擊者通過在目標應用程序中構造惡意請求,使其發起針對內部網絡的請求。
2.攻擊內部系統:攻擊者可以通過SSRF攻擊利用受害者服務器作為跳板攻擊其他系統。
3.繞過訪問控制:攻擊者可以利用SSRF漏洞繞過訪問控制,直接訪問目標系統。
4.DOS攻擊:攻擊者可以通過SSRF攻擊使目標服務器發起大量的請求,從而導致拒絕服務(DoS)狀態。
5.利用其他漏洞:攻擊者可以將SSRF與其他漏洞結合使用,以增強攻擊效果。
CORS
概念:跨域資源共享,其思想是使用自定義的HTTP頭部讓瀏覽器與服務器進行溝通,它允許瀏覽器向跨域服務器發出XMLHttpRequest請求,從而克服AX只能同源使用的限制。
原理:
第三方網站生成訪問控制策略,指定用戶瀏覽器放寬SOP的限制,實現與指定的目標網站共享數據。
CORS跨域漏洞
概念:因為同源策略的存在,不同源的客戶端腳本不能訪問目標站點的資源,如果目標站點CORS配置不當,沒有對請求源的域做嚴格限制,導致任意源都可以訪問時,就存在cors跨域漏洞問題。
原理:
攻擊者可以利用Web應用對用戶請求數據包的Origin頭校驗不嚴格,誘騙受害者訪問攻擊者制作好的惡意網站,從而跨域獲取受害者的敏感數據。
攻擊方式:
構造惡意的html頁面,利用鏈接誘導受害者進行點擊,從而獲取受害者的敏感信息
JSONP
概念:JSONP是JSON with padding(填充式JSON或參數式JSON)的簡寫,是基于JSON格式達的為解決跨域請求資源而產生的解決方案。
原理:
他實現的基本原理是利用的script標簽的src屬性不受同源策略影響的特性,來跨越獲取數據。
說人話就是:可以讓網頁從別的域名(網站)那獲取資料,即跨域讀取數據。
攻擊方式:
構造惡意的html頁面,利用鏈接誘導受害者進行點擊,從而獲取到受害者的敏感信息
文件包含漏洞
概念:在PHP程序中使用文件包含的對象可以被前端的用戶控制且沒有經過過濾或嚴格的定義,用戶可以將其他的文件作為參數帶入到PHP代碼中解釋執行,從而造成敏感信息泄露/程序文件讀取/GetShell等危害的漏洞。
原理:
在應用程序中未正確過濾用戶控制的文件路徑,并將用戶提供的輸入直接或間接地包含在動態文件包含語句中。
攻擊方式:
1. 本地文件包含(Local File Inclusion,LFI)攻擊:攻擊者通過構造惡意請求,直接或間接地包含服務器上的本地文件。如果攻擊成功,攻擊者可以讀取敏感文件的內容,如配置文件、用戶憑證、日志文件等。有時候攻擊者甚至可以通過修改包含的文件來達到任意代碼執行的目的。
2. 遠程文件包含(Remote File Inclusion,RFI)攻擊:攻擊者通過構造惡意請求,將遠程服務器上的文件包含到應用程序中。攻擊者通常會在遠程服務器上放置惡意腳本,然后通過文件包含漏洞來執行這些惡意腳本。這使得攻擊者能夠在目標服務器上執行任意的代碼,并可能導致服務器完全被控制。
文件上傳漏洞
概念:由于程序員未對上傳的文件進行嚴格的驗證和過濾,而導致的用戶可以越過其本身權限向服務器上傳可執行的動態腳本文件。
原理:
網站web應用都有一些文件上傳功能,比如文檔、圖片、頭像、視頻上傳,當上傳功能的實現代碼沒有嚴格校驗上傳文件的后綴和文件類型,此時攻擊者就可以上傳一個webshell到一個web可訪問的目錄上,并將惡意文件傳遞給PHP解釋器去執行,之后就可以在服務器上執行惡意代碼,進行數據庫執行、服務器文件管理,服務器命令執行等惡意操作。
攻擊方式:
尋找測試網站的文件上傳的模塊,常見:頭像上傳,修改上傳,文件編輯器中文件上傳,圖片上傳、媒體上傳等,通過抓包上傳惡意的文件進行測試,上傳后綴名 asp php aspx 等的動態語言腳本,查看上傳時的返回信息,判斷是否能直接上傳,如果不能直接上傳,再進行測試上傳突破,例如上傳文件的時候只允許圖片格式的后綴,但是修改文件時,卻沒有限制后綴名,圖片文件可以修改成動態語言格式如php,則可能訪問這個文件的 URL 直接 getshell,可以控制網站。
文件解析漏洞
概念:由于中間件錯誤的將任意格式的文件解析成網頁可執行文件,配合文件上傳漏洞進行GetShell的漏洞!
原理:
由于網站管理者操作不當或者web服務器自身的漏洞,導致一些特殊文件被IIS,apache,nginx或者其他web服務器在某種情況下解析成腳本文件去執行。
攻擊方式:
1. 目錄遍歷攻擊:攻擊者利用文件解析函數未正確過濾用戶輸入的路徑導致的漏洞,嘗試獲取系統中的敏感文件。攻擊者可能使用"../"等字符序列來跳出當前目錄,訪問系統中的其他目錄和文件。
2. 文件包含漏洞:攻擊者通過向應用程序提交惡意請求,利用應用程序在包含外部文件時未進行恰當驗證的漏洞。攻擊者可能通過在URL參數、請求頭部或配置文件中注入惡意文件路徑來實現對惡意代碼的執行。
3. 遠程文件包含(RFI)攻擊:攻擊者通過利用包含遠程文件的功能,向應用程序注入惡意代碼。攻擊者可以通過提供指向惡意腳本的遠程URL,使應用程序將該腳本下載并在服務器上執行。
4. 本地文件包含(LFI)攻擊:攻擊者通過注入文件路徑或惡意代碼,利用應用程序在包含本地文件時未進行適當驗證的漏洞。攻擊者可能訪問系統中的敏感文件、加密密碼、配置文件等。
5. Null字節注入攻擊:攻擊者通過在文件名中插入空字節(0x00),欺騙解析函數將文件截斷,從而繞過文件擴展名控制,執行惡意代碼。
反序列化漏洞
概念:當程序在進行反序列化時,會自動調用一些函數,例如__wakeup(),__destruct()等函數,但是如果傳入函數的參數可以被用戶控制的話,用戶可以輸入一些惡意代碼到函數中,從而導致反序列化漏洞。
原理:
1. 序列化和反序列化:在編程中,對象可以通過序列化轉換為字節流,以便在不同的系統之間傳輸或存儲。序列化是將對象轉換為字節流的過程,而反序列化是將字節流轉換回對象的過程。
2. 反序列化漏洞:反序列化漏洞通常出現在輸入信任的序列化數據上。攻擊者可以構造包含特定有效負載的惡意序列化數據,并將其提供給目標應用程序。
3. 不安全的反序列化:應用程序未正確驗證或過濾反序列化數據,導致攻擊者能夠執行惡意操作。這可能是由于應用程序信任反序列化數據,而沒有恰當地驗證其內容或結構。
4. 惡意負載執行:攻擊者可以在惡意序列化數據中嵌入可執行代碼。當應用程序反序列化此數據時,惡意代碼將被執行,從而使攻擊者能夠執行任意操作,包括遠程代碼執行、拒絕服務攻擊、數據泄露等。
5. 特定漏洞類型:具體的反序列化漏洞類型包括Java中的Java反序列化漏洞(例如Apache Commons Collections漏洞)、PHP中的PHP反序列化漏洞(例如PHP對象注入漏洞)。這些漏洞通常是由于設計缺陷或使用不當的反序列化庫、框架或功能引起的。
攻擊方式:
1. 參數污染攻擊:攻擊者可以通過修改應用程序或請求的參數,將惡意的序列化數據傳遞給應用程序。應用程序在反序列化時,會解析并執行這些惡意數據,導致安全漏洞。
2. 遠程代碼執行(RCE):攻擊者通過傳遞經過特殊構造的惡意序列化數據到應用程序,成功執行遠程代碼。這使得攻擊者可以獲取應用程序的控制權,并執行任意操作。
3. 敏感信息泄露:在某些情況下,應用程序在執行反序列化過程中,可能會暴露敏感信息。攻擊者可以通過構造特定的序列化數據,使得應用程序在反序列化時泄露敏感數據。
4. 服務拒絕(Denial of Service,DoS)攻擊:攻擊者可以構造惡意的序列化數據,使目標應用程序在反序列化過程中消耗大量計算資源或內存,導致系統崩潰或無法響應正常請求。
5. 鏈式反序列化攻擊:攻擊者利用復雜的對象關聯和嵌套,通過構造惡意的序列化數據,觸發多次反序列化操作。這些操作可能會引起應用程序中的意外行為,導致安全漏洞。
命令執行漏洞
概念:由于PHP程序未對前端用戶提交的數據進行嚴格過濾或限制,從而導致傳入的字段被帶入到命令執行函數中作為參數執行,造成GetShell或接管服務器權限等高危害的Web漏洞!
原理:
服務端沒有對執行命令的函數做出過濾導致的。我們可通過編寫一些系統函數來輸入疑似存在命令執行接口的地方,來檢測是否此接口是否存在命令執行漏洞。
攻擊方式:
1. 輸入驗證不足:當用戶輸入被直接傳遞給系統命令時,沒有進行充分的輸入驗證和過濾,攻擊者可以通過在輸入中插入特殊字符或命令注入,執行任意命令。
2. 操作系統調用:當程序在執行命令時使用操作系統的調用函數,但沒有正確驗證和過濾輸入數據,攻擊者可以通過構造惡意輸入來執行任意系統命令。
3. Shell接管:當程序在執行命令時,通過使用系統調用函數將命令傳遞給一種外部程序解釋器,如Shell,但在傳遞命令時,未正確過濾和驗證輸入,攻擊者可以通過構造特殊字符或命令注入來接管Shell并執行任意命令。
4. 文件包含漏洞:當應用程序允許通過用戶輸入包含外部文件時,如果沒有正確驗證和過濾輸入,攻擊者可以構造惡意輸入來包含并執行任意命令。
5. 操作系統環境變量:當應用程序使用操作系統的環境變量來執行命令時,如果沒有正確驗證和過濾環境變量,攻擊者可以通過修改環境變量的值來執行任意命令。
代碼執行漏洞
概念:由于PHP程序未對前端用戶提交的數據進行嚴格過濾或限制,從而導致傳入的字段被帶入到代碼執行函數中作為參數執行,造成GetShell或接管服務器權限等高危害的Web漏洞!
原理:
由于開發者在編寫代碼時沒有預見到或考慮到攻擊者可能利用輸入來執行惡意操作的情況,或者在編寫過程中沒有充分地進行輸入驗證、數據過濾和安全控制,從而導致了漏洞的產生。
攻擊方式:
1. 遠程代碼執行(Remote Code Execution,RCE):攻擊者通過輸入惡意數據觸發目標系統上的代碼執行,進而控制目標系統。常見的遠程代碼執行漏洞包括未經正確過濾的用戶輸入傳遞給命令執行函數、不安全的反序列化等。
2. SQL 注入(SQL Injection):攻擊者通過在用戶輸入中注入惡意的 SQL 語句,繞過輸入驗證和過濾,從而執行惡意代碼。如果目標系統沒有正確處理用戶輸入的 SQL 查詢,就容易受到 SQL 注入攻擊。
3. 命令注入(Command Injection):攻擊者通過在用戶輸入中注入惡意的命令,繞過輸入驗證和過濾,從而在目標系統上執行任意命令。常見的命令注入漏洞出現在系統調用、Shell 命令執行、遠程管理協議等地方。
4. 文件包含漏洞(File Inclusion Vulnerabilities):攻擊者通過包含惡意文件的方式執行代碼。這種漏洞通常出現在動態包含文件的語言中,如 PHP。如果目標系統未對用戶輸入進行適當校驗和過濾,攻擊者就可以通過構造惡意的文件路徑或遠程 URL,包含并執行惡意文件。
5. eval() 函數調用:如果目標系統的代碼中使用 eval() 函數動態執行用戶輸入的代碼,而沒有對輸入進行適當處理和驗證,攻擊者就可以通過注入惡意代碼利用這個漏洞執行任意代碼。
6. 反序列化漏洞(Deserialization Vulnerabilities):攻擊者可以通過構造惡意的序列化數據來實現遠程代碼執行。當目標系統未正確驗證和過濾反序列化的數據時,攻擊者可以注入惡意代碼。
常見的執行命令, 獲取敏感信息,寫入 web 后門等
webshell免殺
概念:攻擊者通過各種技術手段繞過安全軟件的檢測和防御機制,使其植入的Webshell能夠在目標系統中長期存在而不被發現。
原理:
通過對Webshell進行修改或加密,使其能夠繞過安全軟件的檢測和防御機制。
1. 代碼混淆:通過對 webshell 代碼進行混淆,使其難以被靜態分析引擎或模式匹配規則識別和檢測。混淆可以包括變量名、函數名、常量字符串等的更改、添加冗余代碼、使用編碼或加密等手段。
2. 動態加載:將 webshell 拆分為多個模塊,通過動態加載和組合來還原完整的功能。這樣做可以使原有的 webshell 樣本變得不連續,使其更難被基于特征匹配的檢測機制檢測到。
3. 命令執行繞過:在執行命令時,采用一些繞過技巧來規避安全軟件的檢測和防御。例如,利用操作系統的特殊命令、檢測環境是否在沙盒內、模擬用戶登錄等。
4. 數據包加密:對 webshell 和與其交互的數據進行加密,使其在傳輸過程中難以被網絡安全設備或入侵檢測系統(IDS/IPS)檢測到。
5. 反調試和反追蹤:在 webshell 中添加反調試和反追蹤的代碼,以防止安全人員對其進行分析和調試。
6. 文件偽裝:將 webshell 文件偽裝成系統或合法應用程序的文件,使其更難被安全軟件或系統文件掃描檢測到。
攻擊方式:
1.代碼混淆和加密:攻擊者使用代碼混淆和加密技術,使Webshell的代碼難以被識別和分析。這可以包括使用多種編碼、加密算法和混淆工具,使Webshell的代碼變得無法直接識別和理解。
2.變形和變量替換:攻擊者通過改變Webshell的代碼結構和變量命名,使其與常見的安全檢測規則和模式不匹配。這樣可以繞過檢測系統的靜態和動態分析。
3.動態生成和反射執行:攻擊者使用動態代碼生成和反射執行技術,使Webshell的代碼不存儲在磁盤上,而是在運行時動態生成并執行。這種方式可以繞過靜態文件掃描和惡意代碼檢測。
4.高級免殺工具和技術:攻擊者使用高級的免殺工具和技術,例如使用自定義的加密算法、虛擬化技術、多級反射執行等,以提高Webshell的免殺能力。這些工具和技術通常能夠繞過常見的安全防御工具和規則。
5.文件格式的利用:攻擊者利用一些特定文件格式的漏洞來傳播和執行Webshell。例如,利用圖片或文檔文件格式的漏洞,將Webshell嵌入其中,從而繞過文件掃描和安全檢測。
6.時間延遲和睡眠機制:攻擊者通過在Webshell代碼中添加時間延遲和睡眠機制,使Webshell的活動在特定時間范圍內變得較為稀少,從而減少被檢測到的可能性。
該文章在 2024/1/24 22:48:42 編輯過