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