命令執(zhí)行漏洞
PHP:提供了部分函數(shù)用來執(zhí)行外部應(yīng)用程序悠鞍,例如: system()仿耽、 shell_ exec()娄蔼、 exec()和passthru()。
在PHP中,代碼執(zhí)行漏洞出現(xiàn)較多如孝,像preg. replace()、 ob start()娩贷、 array_ map()等的數(shù)都存在代碼執(zhí)行的問題
java
框架執(zhí)行漏洞
struts2
thinkPHP
防范
盡量不要使用系統(tǒng)執(zhí)行命令;
在進(jìn)入執(zhí)行命令函數(shù)/方法之前第晰,變量一定要做好過濾,對(duì)敏感字符進(jìn)行轉(zhuǎn)義;
在使用動(dòng)態(tài)函數(shù)之前,確保使用的函數(shù)是指定的函數(shù)之一;
對(duì)PHP語(yǔ)言來說茁瘦,不能完全控制的危險(xiǎn)函數(shù)最好不要使用品抽。
文件包含漏洞
PHP包含
? ? ? PHP中提供了四個(gè)文件包含的函數(shù),分別是include()甜熔、 include_ once()圆恤、require() 和require_ once()。 這四個(gè)函數(shù)都可以進(jìn)行文件包含纺非,但作用卻不- -樣哑了,其區(qū)別如下:
require 找不到被包含的文件時(shí)會(huì)產(chǎn)生致命錯(cuò)誤(E_ COMPILE ERROR),并停止腳本:
include 找不到被包含的文件時(shí)只會(huì)產(chǎn)生警告(E_ WARNING)烧颖,腳本將繼續(xù)執(zhí)行:
include once:此語(yǔ)句和include()語(yǔ)句類似,唯-區(qū)別是如果該文件中的代碼已經(jīng)被包含弱左,則不會(huì)再次包含:
require_ once:此行語(yǔ)句和require()語(yǔ)句類似,唯-區(qū)別是如果該文件中的代碼已經(jīng)被包含炕淮,則不會(huì)再次包含拆火。
本地包含
遠(yuǎn)程包含:要使用遠(yuǎn)程包含功能,首先需要確定PHP是否已經(jīng)開啟遠(yuǎn)程包含功能選項(xiàng)( PHP默認(rèn)關(guān)閉遠(yuǎn)程包含功能)涂圆。開啟遠(yuǎn)程包含功能需要在php.ini 配置文件中修改们镜,修改后需要重啟Web 容器服務(wù)使其生效,選項(xiàng)如下:
allow url_ include = Off
//把Off更改為On
PHP文件包含利用
1.讀取敏感文件
2.遠(yuǎn)程包含shell
3.本地包含配合文件上傳
4.使用PHP封裝協(xié)議
PHP帶有很多內(nèi)置URL風(fēng)格的封裝協(xié)議润歉,這類協(xié)議與fopen(). copy()模狭、file_ exists()、 filesize()等文件系統(tǒng)函數(shù)所提供的功能類似踩衩。
①使用封裝協(xié)議讀取PHP文件嚼鹉。②寫入PHP文件。使用p://input 可以執(zhí)行PHP 語(yǔ)句驱富,但使用這條語(yǔ)句受限于allow url_ include 選項(xiàng)锚赤。只有在allow url_ include 為On時(shí)才可以使用。
5.包含Apache日志文件
某個(gè)PHP文件存在本地包含漏洞導(dǎo)致無法上傳文件時(shí)褐鸥,這種情況就像明明有SQL注入漏洞线脚,卻無法注入出數(shù)據(jù)一樣,但是叫榕,找到Apache路徑浑侥,利用包含漏洞包含Apache日志文件也可以獲取WebShell。Apache運(yùn)行后一般默認(rèn) 會(huì)生成兩個(gè)日志文件晰绎,acess.log (訪問日志)和error.log (錯(cuò)誤日志), Apache的訪問日志文件記錄了客戶端的每次請(qǐng)求及服務(wù)器響應(yīng)的相關(guān)信息
6.截?cái)喟?/p>
這種方法只適用于magic_ quotes_ gpc = Off時(shí)寓落,如果為On, %00(NULL)將 會(huì)被轉(zhuǎn)義,從而無法正常截?cái)嗪住agic _quotes_ gpe為On的情況會(huì)為以下預(yù)定義字符轉(zhuǎn)義:單引號(hào)()雙引號(hào)(")反斜杠(\)NULL
7.繞過WAF防火墻
jsp包含
1.靜態(tài)包含
? ? ? <%@ include file="pagetxt"%>為JSP中的靜態(tài)包含語(yǔ)句零如,靜態(tài)包含語(yǔ)句先進(jìn)行包含躏将,再做處理操作。JSP語(yǔ)法規(guī)定考蕾,include 指令為靜態(tài)包含祸憋,只允許包含一個(gè)已經(jīng)存在于服務(wù)器中的文件,而不能使用變量來控制包含某個(gè)文件肖卧。這就意味著使用include指令將不存在文件包含漏洞蚯窥。
2.動(dòng)態(tài)包含
<jsp:include page="page.txt" />為動(dòng)態(tài)包含語(yǔ)句。動(dòng)態(tài)包含與靜態(tài)包含恰恰相反塞帐,在運(yùn)行時(shí), 首先會(huì)處理被包含頁(yè)面拦赠,然后再包含,而且可以包含一個(gè)動(dòng)態(tài)頁(yè)面(變量)葵姥。
由于語(yǔ)言設(shè)計(jì)的差異荷鼠,相對(duì)來說,JSP 比PHP擁有更高的安全性榔幸。
杜絕方法
嚴(yán)格判斷包含中的參數(shù)是否外部可控允乐,因?yàn)槲募┒蠢贸晒εc否的關(guān)鍵點(diǎn)就在于被包含的文件是否可被外部控制;
路徑限制:限制被包含的文件只能在某一文件夾內(nèi),一 定要禁止目錄跳轉(zhuǎn)字符,如../”
包含文件驗(yàn)證:驗(yàn)證被包含的文件是否是白名單中的一員;
盡量不要使用動(dòng)態(tài)包含削咆,可以在需要包含的頁(yè)面固定寫好牍疏,如: include("head.php");。
CSRF
CSRF的攻擊建立在瀏覽器與Web服務(wù)器的會(huì)話中:欺騙用戶訪問URL
檢測(cè)
1.手工檢測(cè)
2.半自動(dòng)檢測(cè):
CSRFtester
單擊“Start Recording"按鈕開啟CSRFTester的檢測(cè)工作拨齐,在“Setp"屬性中選擇添加用戶的請(qǐng)求鳞陨,并將“Form Parameter” 框中的“edtName”值改為“CSRFTest",然后單擊“Generate HTML”按鈕生成CSRF POC。選擇-一個(gè)保存位置后瞻惋, 將會(huì)自動(dòng)打開這個(gè)已經(jīng)生成的POC進(jìn)行CSRF攻擊厦滤。如果CSRF攻擊成功,網(wǎng)站將會(huì)添加一個(gè)名為“CSRFTest”的用戶熟史。CSRFTester 是將所有的屬性生成為隱藏的input 標(biāo)簽馁害,并添加了默認(rèn)值窄俏,當(dāng)訪問這個(gè)頁(yè)面時(shí)蹂匹,JavaScript 將會(huì)自動(dòng)提交這個(gè)表單。
Burp Suite Scanner 模塊同樣也支持檢測(cè)CSRF漏洞
使用Burp Suite自動(dòng)生成CSRF POC凹蜈,在任意HTTP請(qǐng)求限寞、URL上單擊鼠標(biāo)右鍵,選擇“Engagement tools”→“Generate CSRF POC"即可生成CSRF POC仰坦。Burp Suite的CSRF POC也是根據(jù)請(qǐng)求參數(shù)生成的履植,可以直接單擊“Test in browser”按鈕進(jìn)行測(cè)試。單擊后悄晃,Burp Suite將會(huì)自動(dòng)打開瀏覽器使用這段POC進(jìn)行CSRF攻擊玫霎。
預(yù)防
1.二次確認(rèn)
在調(diào)用某些功能時(shí)進(jìn)行二次驗(yàn)證凿滤,如:刪除用戶時(shí),產(chǎn)生一個(gè)提示對(duì)話框庶近,提示“確定刪除用戶嗎?”翁脆。轉(zhuǎn)賬操作時(shí),要求用戶輸入二次密碼鼻种。設(shè)置驗(yàn)證碼反番,在進(jìn)行敏感操作時(shí)輸入驗(yàn)證碼。
當(dāng)二次驗(yàn)證后叉钥,即使用戶打開了CSRF POC頁(yè)面罢缸,也不會(huì)直接去執(zhí)行,而需要用戶再次輸入才可以完成攻擊投队。這樣枫疆,當(dāng)用戶突然收到提示后,可能會(huì)心存懷疑敷鸦,就不再會(huì)乖乖地中招养铸。
2.token認(rèn)證
CSRF 攻擊成功的兩個(gè)要素:攻擊者可得知URL的所有參數(shù)項(xiàng),并了解其含義轧膘;誘導(dǎo)用戶訪問構(gòu)造好的POC钞螟。
毎當(dāng)用戶登錄后會(huì)隨機(jī)生成一段字符串, 并且存儲(chǔ)在Session中谎碍。
在敏感操作中加入隠藏標(biāo)簽鳞滨,value 即カSession中保存的字符串,如果為GET請(qǐng)求蟆淀,考慮使用在Cookie中存儲(chǔ)Token拯啦。
提交請(qǐng)求后,服務(wù)器端取出Session中的字符串與提交的Token對(duì)比熔任,如果一致褒链,則認(rèn)為是正常請(qǐng)求,否則可能是CSRF攻擊疑苔。
更新Token值甫匹。
當(dāng)網(wǎng)站同時(shí)存在XSS. CSRF漏洞時(shí),Token 防御機(jī)制將會(huì)失效惦费,因?yàn)楣粽呖梢酝ㄟ^JavaScript獲取Token值
所以在防范CSRF時(shí)兵迅,首先需要確定網(wǎng)站是否存在XSS漏洞,如果網(wǎng)站存在XSS漏洞薪贫,那么防范CSRF是沒有任何意義的恍箭。
邏輯錯(cuò)誤漏洞
挖掘
發(fā)現(xiàn)網(wǎng)站所提供的功能模塊,針對(duì)具體的功能確定業(yè)務(wù)流程瞧省,詳細(xì)劃分具體步驟扯夭,攔截HTTP/HTTPS請(qǐng)求鳍贾,分析其參數(shù)項(xiàng)的含義;修改參數(shù)值,嘗試觸發(fā)邏輯漏洞交洗。
簡(jiǎn)單地說贾漏,黑客挖掘邏輯漏洞有兩個(gè)重點(diǎn),就是業(yè)務(wù)流程和HTTP/HTTPS請(qǐng)求篡改藕筋。
繞過授權(quán)驗(yàn)證
水平越權(quán):相同級(jí)別(權(quán)限)的用戶或者同角色的不同用戶之間纵散,可以越權(quán)訪問、修改或者刪除的非法操作隐圾。如果出現(xiàn)此類漏洞伍掀,那么將可能會(huì)造成大批量數(shù)據(jù)泄露,嚴(yán)重的甚至?xí)斐捎脩粜畔⒈粣阂獯鄹摹?/p>
垂直越權(quán)又被分為向上越權(quán)與向下越權(quán)暇藏。是不同級(jí)別之間或不同角色之間的越權(quán)蜜笤。
密碼找回邏輯漏洞
支付邏輯漏洞
指定賬戶惡意攻擊
代碼注入
按照owasp分類包括:os命令執(zhí)行
文件包含
動(dòng)態(tài)函數(shù)調(diào)用
代碼執(zhí)行
按照Wikipedia還包括:SQL注入,XML注入盐碱,xss
XML(可拓展標(biāo)識(shí)語(yǔ)言)注入
XML注入是通過改寫XML實(shí)現(xiàn)的把兔,與xss跨站漏洞相似,此漏洞利用成功的關(guān)鍵點(diǎn)就是閉合XML標(biāo)簽瓮顽。XML注入時(shí)的兩大要素為:標(biāo)簽閉合和獲取XML表結(jié)構(gòu)县好。
修復(fù):轉(zhuǎn)義
xpath注入
XPath即為XML路徑語(yǔ)言(XML Path Language), XPath 基于XML的樹狀結(jié)構(gòu),提供在數(shù)據(jù)結(jié)構(gòu)樹中找尋節(jié)點(diǎn)的能力暖混。簡(jiǎn)單地說缕贡,XPath 就是選取XML節(jié)點(diǎn)的一門語(yǔ)言。
XPath最強(qiáng)大的功能在于邏輯運(yùn)算拣播,使用XPath將會(huì)使程序變得有邏輯性晾咪,但如果這一點(diǎn)使用不當(dāng),可能將會(huì)造成注入漏洞
修復(fù)參照XML注入
json注入
JSON (JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式贮配。JSON可以將JavaScript中的對(duì)象轉(zhuǎn)換為字符串,然后在函數(shù)谍倦、網(wǎng)絡(luò)之間傳遞這個(gè)字符串。這個(gè)字符串看起來有點(diǎn)兒怪異泪勒,但是JavaScript很容易解釋它昼蛀,而且JSON可以表示:比“Key/ Value”更復(fù)雜的結(jié)構(gòu)。
JSON是根據(jù)引號(hào)(")酣藻、 冒號(hào)(:)曹洽、 逗號(hào)(,) 和花括號(hào)({)區(qū)分各字符的意義的鳍置。如果有惡意用戶向JSON中注入惡意字符辽剧,那么JSON將解析失敗。
防御:關(guān)鍵字符轉(zhuǎn)義
HTTP Parameter Pollution即HTTP參數(shù)污染税产,簡(jiǎn)稱HPP
經(jīng)常用來繞過--些Web應(yīng)用防火墻怕轿。
URL跳轉(zhuǎn)與釣魚
URL跳轉(zhuǎn)
1.客戶端跳轉(zhuǎn)
客戶端跳轉(zhuǎn)也被稱為URL重定向偷崩,用戶瀏覽器的地址欄URL會(huì)有明顯的變化
2.服務(wù)器端跳轉(zhuǎn)
服務(wù)器端跳轉(zhuǎn)也稱為URL轉(zhuǎn)發(fā),服務(wù)器端跳轉(zhuǎn)時(shí),用戶瀏覽的地址欄URL是不會(huì)變化的
webserver遠(yuǎn)程部署
通過遠(yuǎn)程部署獲取WebShell 并不屬于代碼層次的漏洞撞羽,而是屬于配置性錯(cuò)誤漏洞阐斜。
Tomcat
Jboss
weblogic