干货|Web安全入门基础与思路总结(附思维导图)
該篇文章主要是寫給WEB安全入門者的基礎(chǔ)與思路
基礎(chǔ)
HTTP協(xié)議
網(wǎng)站訪問過程
-
靜態(tài)頁(yè)訪問
首先用戶通過瀏覽器打開kw0ng.top,此時(shí)瀏覽器會(huì)向DNS服務(wù)器請(qǐng)求解析,將kw0ng.top轉(zhuǎn)換為IP地址120.78.132.122,接著數(shù)據(jù)包開始一層層封裝,以便于在網(wǎng)絡(luò)中傳輸,數(shù)據(jù)包HTTP Request會(huì)被發(fā)往120.78.132.122,中間可能經(jīng)過運(yùn)營(yíng)商,過了很多跳路由直到送達(dá)到目的地址120.78.132.122,此時(shí)120.78.132.122上的Apache正在運(yùn)行,120.78.132.122經(jīng)過網(wǎng)絡(luò)層還原回應(yīng)用層HTTP協(xié)議,送達(dá)至Apache,我們一般稱Apache這類功能軟件為中間件,其他中間件還有Nginx,Tomcat等,Apache將默認(rèn)的index.html頁(yè)面讀取后作為HTTP Response返回給瀏覽器,瀏覽器解析后將頁(yè)面展現(xiàn)出來(lái)。此時(shí)就完成了一個(gè)靜態(tài)頁(yè)面的訪問過程。
-
動(dòng)態(tài)頁(yè)訪問
前期與上相同,一直到Apache中間件,Apache發(fā)現(xiàn)請(qǐng)求的是PHP文件,于是將數(shù)據(jù)包轉(zhuǎn)發(fā)至PHP應(yīng)用,PHP應(yīng)用接受請(qǐng)求后解析數(shù)據(jù)包發(fā)現(xiàn)存在參數(shù)id=1,PHP應(yīng)用開始計(jì)算,如果是需要連接數(shù)據(jù)庫(kù)的方法,則將id值組裝成SQL語(yǔ)句,向數(shù)據(jù)庫(kù)發(fā)起查詢,最后將結(jié)果返回給中間件,此時(shí)的結(jié)果也是靜態(tài)內(nèi)容,因?yàn)榻Y(jié)果最終都要返回給瀏覽器,因此無(wú)論是PHP還是Python編寫的網(wǎng)站,最終瀏覽器展現(xiàn)的都是HTML,JS與CSS。
代理
挖掘漏洞就要分析應(yīng)用工作過程,而網(wǎng)站作為B/S的架構(gòu),HTTP協(xié)議是前后端交互的基礎(chǔ)協(xié)議,因此分析網(wǎng)站交互的HTTP數(shù)據(jù)包,再?gòu)臄?shù)據(jù)包中找尋漏洞是滲透測(cè)試的基本手段。而代理就是截獲網(wǎng)站前后端HTTP數(shù)據(jù)包的手段,通過代理我們可以對(duì)數(shù)據(jù)包進(jìn)行篡改、重放來(lái)測(cè)試漏洞。目前常用的代理工作方式是通過瀏覽器插件將流量轉(zhuǎn)發(fā)至特定IP端口,而通過特定軟件如Burpsuite監(jiān)聽端口來(lái)接收插件轉(zhuǎn)發(fā)來(lái)的流量實(shí)現(xiàn)代理瀏覽器流量。
Burpsuite
HTTPS協(xié)議
需要注意的是,瀏覽器(Client)拿到證書后驗(yàn)證其數(shù)字簽名具體方式是:根據(jù)證書上寫的CA簽發(fā)機(jī)構(gòu),在瀏覽器操作系統(tǒng)內(nèi)置的根證書里找到對(duì)應(yīng)的公鑰,用此公鑰解開數(shù)字簽名,得到摘要(digest,證書內(nèi)容的hash值),據(jù)此驗(yàn)證證書的合法性,這也就是為什么使用Burpsuite劫持HTTPS網(wǎng)站需要安裝Burpsuite根證書的原因。
HTTPS中間人
Burpsuite通過代理方式接收到瀏覽器HTTPS請(qǐng)求后,返回自身的HTTPS證書,由于我們已經(jīng)安裝好了Burpsuite的根證書,因此瀏覽器驗(yàn)證證書通過,瀏覽器開始與Burp協(xié)商對(duì)稱加密密鑰,之后Burp便可以解密瀏覽器發(fā)來(lái)的HTTPS數(shù)據(jù)包內(nèi)容了,而Burp又以作為客戶端的方式向真正的HTTPS網(wǎng)站發(fā)起HTTPS交互,交互過后此時(shí)Burp就擁有了兩個(gè)對(duì)稱密鑰,一個(gè)用來(lái)加解密瀏覽器發(fā)來(lái)的數(shù)據(jù),另一個(gè)用來(lái)加解密真實(shí)HTTPS網(wǎng)站的數(shù)據(jù)。這樣Burp作為中間人就可以完整的看到明文的HTTPS數(shù)據(jù)包內(nèi)容了。
APP與小程序
灰盒
主動(dòng)與被動(dòng)漏洞掃描-發(fā)現(xiàn)通用漏洞
Nessus與AWVS
Nessus與AWVS是老牌商業(yè)漏洞掃描器,漏洞庫(kù)非常完善,對(duì)于一些歷史漏洞,如Windows、Weblogic、Redis、Tomcat等操作系統(tǒng)與組件歷史CVE挖掘非常好用。
Nessus使用
第一步-登錄
https://ip:8834/
新建掃描
選擇掃描模式,一般使用高級(jí)掃描即可
輸入項(xiàng)目名稱與目標(biāo)IP地址,不要使用http://ip這種,只輸入IP地址
一般這就可以直接進(jìn)行保存了,也可以手動(dòng)進(jìn)行其他高級(jí)配置
保存后會(huì)跳轉(zhuǎn)到主頁(yè),這是我們還需最后一步,啟動(dòng)掃描
啟動(dòng)掃描后,就可以進(jìn)入項(xiàng)目中實(shí)時(shí)查看掃描結(jié)果了
AWVS使用
AWVS主要用來(lái)掃描WEB站點(diǎn)
第一步-登錄
https://ip:3443/#/login
第二步-掃描
添加單個(gè)掃描目標(biāo)
登錄掃描模式:網(wǎng)站不能有圖形驗(yàn)證碼等
開啟Site Login
New新建,AWVS會(huì)自動(dòng)訪問我們輸入的目標(biāo)站點(diǎn)
其實(shí)這就是內(nèi)置了個(gè)瀏覽器,我們手動(dòng)進(jìn)入登錄界面,輸入賬戶密碼,并點(diǎn)擊登錄
登錄成功后,點(diǎn)擊右下角的Finish即可,之后再點(diǎn)擊Scan
Xray
雖然主動(dòng)掃描可以發(fā)現(xiàn)很多系統(tǒng)與組件歷史漏洞,但是卻無(wú)法深入WEB應(yīng)用挖掘,即使AWVS支持輸入賬號(hào)密碼掃描,但面對(duì)一些需要驗(yàn)證碼登錄的系統(tǒng)依然束手無(wú)策,且主動(dòng)爬蟲技術(shù)注定難以全面的發(fā)現(xiàn)所有接口,因此我們可以通過代理的方式將所有數(shù)據(jù)包轉(zhuǎn)發(fā)至漏洞掃描器,這樣就可以盡可能全面的測(cè)試到所有功能點(diǎn),特別是針對(duì)SQL注入、反射型XSS漏洞,效率很高。
第一步-生成證書
xray_windows_amd64.exe genca
安裝證書
運(yùn)行命令之后,將在當(dāng)前文件夾生成 ca.crt 和 ca.key 兩個(gè)文件
證書是ca.crt文件,安裝后這兩個(gè)文件保留即可,不要?jiǎng)h除
-
系統(tǒng)安裝
-
火狐瀏覽器單獨(dú)安裝
?
?
第二步-修改配置文件
配置文件中默認(rèn)了只能掃描哪些目標(biāo),因?yàn)槲覀円獙⑺薷?br /> 打開config.yaml
允許掃描的域添加個(gè)*,不允許掃描的域也可以略做刪減
第三步-運(yùn)行Xray
.\xray_windows_amd64.exe webscan --listen 127.0.0.1:7777 --html-output xray-testphp.html
-
127.0.0.1:7777為Xray監(jiān)聽的端口
-
xray-testphp.html為輸出的報(bào)告文件
第四步-配置代理
瀏覽器使用代理插件將流量轉(zhuǎn)發(fā)至Xray,Xray會(huì)針對(duì)經(jīng)過的流量進(jìn)行漏洞掃描
CMS歷史漏洞檢查
漏洞掃描器的POC不一定很健全,如一些小型的CMS的漏洞可能并未收集,我們可以查看該應(yīng)用使用的框架版本、以及使用的網(wǎng)頁(yè)編輯器等版本,然后通過搜索引擎來(lái)查找是否存在一些公開漏洞payload。
漏洞猜想與驗(yàn)證-發(fā)現(xiàn)功能漏洞
再進(jìn)行了主動(dòng)與被動(dòng)漏洞掃描之后,一些通用漏洞如MS_17010、SQL注入 往往此時(shí)已經(jīng)被挖掘出來(lái),接下來(lái)我們要通過人工測(cè)試去挖掘一些掃描器無(wú)法發(fā)現(xiàn)的漏洞,如存儲(chǔ)型XSS、越權(quán)、ID遍歷等,此時(shí)我們一般使用功能點(diǎn)猜想法,便是根據(jù)具體功能點(diǎn)去測(cè)試漏洞,如一個(gè)登錄頁(yè)面,我們可以猜想存在:
-
用戶名枚舉
-
用戶密碼爆破
-
萬(wàn)能密碼
-
登錄繞過
-
密碼找回邏輯缺陷
而在灰盒測(cè)試中,我們往往有了一個(gè)可登錄的賬戶,因此本輪我們重點(diǎn)關(guān)注的是一些敏感功能,如文件/頭像上傳功能,個(gè)人信息修改功能,這兩個(gè)往往會(huì)存在任意文件上傳與存儲(chǔ)型XSS。還有就是要關(guān)注一個(gè)功能點(diǎn)的數(shù)據(jù)包實(shí)現(xiàn),功能實(shí)現(xiàn)的不嚴(yán)謹(jǐn)往往就會(huì)存在邏輯漏洞,如修改密碼處,是否需要傳遞原密碼,是否通過傳遞用戶id來(lái)作為用戶修改密碼的身份憑據(jù)。
流量審計(jì)-查缺補(bǔ)漏
在針對(duì)功能猜想與驗(yàn)證完后,我們可以對(duì)期間產(chǎn)生的流量進(jìn)行審計(jì),利用Burpsuite的HTTP history去查看瀏覽器發(fā)送過的所有數(shù)據(jù)包,尋找敏感參數(shù)與值,如file=a.png就可能存在任意文件讀取,url=http://a.com?可能存在URL跳轉(zhuǎn)或SSRF漏洞,出現(xiàn)userid=1可能存在橫向越權(quán)漏洞。
權(quán)限、配置-尋找配置問題
這一輪的測(cè)試可在前3輪中穿插,這一輪主要是權(quán)限配置,如垂直越權(quán),通過替換cookie來(lái)測(cè)試是否有健全的權(quán)限管控,通過編寫CSRF POC來(lái)測(cè)試服務(wù)端對(duì)跨站請(qǐng)求偽造是否做了防范措施,通過手動(dòng)添加Origin頭來(lái)測(cè)試跨域策略配置是否合理。
黑盒
當(dāng)我們拿到一個(gè)沒有賬戶密碼的網(wǎng)站除了直接漏洞掃描還可嘗試測(cè)試以下內(nèi)容。
掃描目錄/接口
-
備份文件泄漏
-
接口文檔泄漏:在一些使用自動(dòng)化接口文檔的WEB應(yīng)用,開發(fā)可能忘記關(guān)閉接口文檔展示
devtools查看前端代碼
通過Chrome的devtools我們可以查看到網(wǎng)站的部分html與js代碼,而一些這些文件中則會(huì)暴露一些接口出來(lái),通過這些接口我們可以嘗試測(cè)試以下漏洞:
-
文件讀取漏洞:常出現(xiàn)在需要下載插件或客戶端的web應(yīng)用
-
用戶遍歷:通過登錄失敗的提示來(lái)遍歷用戶名,嘗試尋找弱口令用戶
-
任意用戶密碼重置:密碼找回邏輯是否合理
-
未授權(quán)訪問漏洞:前后端分離模式中,接口基本都可以在js文件中找到,測(cè)試是否存在未授權(quán)訪問
尋找源碼
-
通過前端代碼特征在Github中尋找相同代碼轉(zhuǎn)為白盒測(cè)試。
-
通過前端代碼特征在Fofa等網(wǎng)站尋找相同站點(diǎn),嘗試掃描網(wǎng)站備份文件或弱口令轉(zhuǎn)為灰盒或白盒測(cè)試。
白盒
基礎(chǔ)信息
通過web應(yīng)用配置文件來(lái)收集一下信息:
-
WEB應(yīng)用使用了什么開發(fā)模式、路由規(guī)則
-
使用了哪些組件、組件的密碼
-
Token、Key強(qiáng)度是否足夠
-
跨域、HTTP等返回頭配置
可能存在的問題: -
使用存在已知漏洞的組件,如Fastjson 1.70以下版本
-
數(shù)據(jù)庫(kù)、Shiro AES Key、JWT Key強(qiáng)度不足
-
跨域資源共享配置缺陷、未配置HttpOnly、SameSite
訪問控制
一個(gè)WEB應(yīng)用通常都會(huì)設(shè)計(jì)授權(quán)認(rèn)證體系,這部分主要摸清該應(yīng)用的訪問控制是如何實(shí)現(xiàn)的,主流實(shí)現(xiàn)方式如下:
-
Shiro
-
Spring Security
-
Java Filter
-
Java Interceptor
可能存在的問題: -
權(quán)限配置不嚴(yán)格,導(dǎo)致存在未授權(quán)訪問漏洞
-
未做權(quán)限分離,導(dǎo)致存在垂直越權(quán)漏洞
-
使用Filter、Interceptor黑名單的方式限制用戶訪問授權(quán)接口,可能存在權(quán)限繞過漏洞
常規(guī)漏洞
通過檢測(cè)相關(guān)函數(shù)名或特征可以迅速發(fā)現(xiàn)以下漏洞:
-
SQL注入
-
文件處理
-
命令執(zhí)行
-
反序列化
-
URL重定向
-
SSRF
-
XXE
一些特征:
SQL注入:
尋找拼接SQL語(yǔ)句的方法、查看Mybatis的xml中是否有使用${}的,且追溯后參數(shù)可被用戶控制
grep -rn "\${" *
文件處理:
FileInputStream
FileOupputStream
RandomAccessFile
FileUtils
AsynchronousFileChannel
Files
FileUtil
有時(shí)還可以通過HTTP返回頭快速定位文件下載方法
Content-Disposition
命令執(zhí)行:
Runtime.exec
ProcessBuilder.start
GroovyShell.evaluate
反序列化:
ObjectInputStream.readObject
ObjectInputStream.readUnshared
XMLDecoder.readObject
Yaml.load
XStream.fromXML
ObjectMapper.readValue
JSON.parseObject
URL重定向:
Redirect
SSRF:
HttpClient.execute
HttpClient.executeMethod
HttpURLConnection.connect
HttpURLConnection.getInputStream
URL.openStream
XXE:
判斷使用哪種XML解析器
搜索是否有禁用外部實(shí)體配置(修護(hù)部分有具體代碼)
是否有外部輸入點(diǎn)進(jìn)行解析
業(yè)務(wù)邏輯
雖然前面已經(jīng)能發(fā)現(xiàn)大部分常規(guī)漏洞,但一些邏輯漏洞是不具有很明顯的特征的,還是需要我們?nèi)リP(guān)注下重要的業(yè)務(wù)邏輯,如密碼修改、密碼重置設(shè)計(jì)的是否合理,查看用戶信息是否使用了一些可遍歷的User_id參數(shù)。
總結(jié)
以上是生活随笔為你收集整理的干货|Web安全入门基础与思路总结(附思维导图)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 12306登录_实现123
- 下一篇: 压力测试、负载测试、渗透测试、容量测试、