網路安全常見面試題
計算機網路
OSI模型和TCP/IP體系結構?
-
OSI模型:從下到上為物理層,資料鏈路層,網路層,傳輸層,會話層,表示層,應用層。
-
TCP/IP結構:從下到上為網路介面層,網際層,傳輸層,應用層
TCP/IP的三次握手和四次揮手過程,且為什麼要這樣?
三次握手
客戶端給伺服器傳送資料:
- 客戶端給伺服器傳送SYN包,詢問是否可以進行連線
- 伺服器若可以進行連線,回覆SYN+ACK包
- 客戶端回覆一個ACK包,連線建立
四次揮手
處於連線狀態的客戶端給伺服器傳送資料:
- 客戶端首先給伺服器傳送一個FIN包,表示要關閉連線。
- 伺服器接收到FIN包後,給客戶端傳送一個ACK包,代表已經接受了關閉連線的請求,但是未傳輸完的資料仍要繼續傳輸。
- 當傳輸資料傳輸完之後,伺服器給客戶端傳送一個FIN包。
- 客戶端給伺服器回覆一個ACK包,中止連線。
為什麼這樣?
為了建立可靠傳輸,解決通道不可靠的問題。
私有IP的地址劃分
分為三類:
- A類:10.0.0.0-10.255.255.255
- B類:172.16.0.0-172.31.255.255
- C類:192.168.0.0-192.168.255.255
TCP和UDP的區別和優缺點
UDP:
- 基於無連線的
- 不可靠的,只是傳送資料包,不考慮對方能否接受到
- 用於即時性要求很高的場合
TCP: - 面向連線的,可靠的
- 傳送位元組流,對方一定要接收到且不能保證丟失資料。
- 常用:流量控制、超時重傳、擁塞控制等機制來保證可靠傳輸。
- 建立連線需要消耗時間和資源。
正向Shell和反向Shell的區別?
- 正向shell:攻擊者連線被攻擊機器,攻擊者處於內網,被攻擊機器處於外網的情況。(上傳webshell,進行連線)
- 反向shell:被攻擊者主動連線攻擊機器,被攻擊者處於內網,攻擊者處於外網。(反彈shell)
正向代理和反向代理的區別?
- 正向代理:客戶端將資料傳送給代理,代理把資料傳送給伺服器。
- 伺服器無法感知客戶端是誰。
- 反向代理:假設內網有一臺web伺服器,客戶端無法直接訪問內網。那麼,我們可以將web伺服器反向代理到外網的nginx伺服器,此時客戶端訪問nginx伺服器,就訪問到web資源了。
- 客戶端無法感知伺服器是誰。
- 提高伺服器的安全性。
常見防火牆種類
- Web應用防火牆
- 包過濾防火牆
- 代理防火牆
- 狀態檢測防火牆
HTTP和HTTPS的區別?
- HTTPS協議需要用到證書(公鑰和私鑰),HTTP不需要。
- HTTP資訊明文傳輸,HTTPS資訊加密傳輸。
- HTTP埠80、HTTPS埠443。
- HTTPS協議基於SSL+HTTP協議比HTTP更加安全。
HTTPS工作原理?(非對稱加密和對稱加密結合)
- 客戶端發起https請求,連線到伺服器的443埠
- 服務端生成證書(私鑰和公鑰)
- 傳送伺服器的公鑰
- 客戶端解析公鑰,驗證公鑰是否有效,如果無效,提示證書存在問題,如果有效,那麼客戶端生成一個隨機值(私鑰)用伺服器的公鑰加密,傳輸到伺服器上。
- 伺服器將加密後的值用自身的私鑰解密,得到客戶端的私鑰,然後將明文透過客戶端的私鑰進行對稱加密。
- 伺服器將密文進行傳輸
- 客戶端用自己之前生成的私鑰解密傳過來的資訊,獲取瞭解密後的內容。
在上述過程中,用非對稱加密傳輸金鑰,確保安全性。用對稱加密來加解密資料,速度快。
系統(Windows及Linux)方面常問
如何手工判斷對方作業系統?
- 修改url引數,改成大寫,正常為Windows,不正常為Linux
- ping伺服器,看TTL值
- 看資料包,如果資料包中存在IIS,肯定Windows。
Windows和Linux檢視開放埠和執行服務的命令?
- Windows:
- 開放埠:netstat -ano | findstr 關鍵字
- 檢視正在執行的服務:net start
- Linux:
- 開發埠:netstat -tuln | grep 關鍵字
- 檢視正在執行/不執行的服務:service --status-all | grep +/-
Windows或Linux被植入後門檔案,講一下你的排查點
- 檢視日誌
- 檢視是否存在異常使用者
- 檢視異常/隱藏程序
- 檢視系統檔案的時間是否被改動、系統檔案的內容是否被改動
- 檢查網路
- 檢查計劃任務
- 檢查後門程式
- 檢查系統服務
- ...
Web安全
OWASP TOP 10
- 注入(SQL隱碼攻擊、表示式注入等)
- 失效的身份驗證
- 無驗證
- 驗證脆弱
- 驗證可繞過 - 敏感資料洩露
- 身份證、電話號碼、姓名、學號、密碼等洩露
- 抓包,後端將全部內容返回,前端只取了一部分 - XML/XXE
- 外部實體引入導致RCE等漏洞 - 失效的訪問控制
- 越權、未授權訪問 - 配置不當導致漏洞
- IIS PUT漏洞 - XSS
- 使用者可以對頁面內容進行改變,寫入惡意JS語句 - 反序列化漏洞
- 使用者根據序列化字串,構造惡意物件,當反序列化之後,就會呼叫魔術方法,從而導致RCE、資訊洩露、getshell等 - 第三方元件、框架漏洞
- Weblogic、Shiro、Spring、Log4j等元件出現漏洞,導致網站被入侵。 - 不足的日誌和監控
- 日誌收集不足、缺陷檢測時間過長導致駭客入侵無法被溯源反制。
SQL隱碼攻擊原理的種類?防禦?預編譯原理?
原理?
伺服器在接收客戶端的資料時,由於沒有對資料進行過濾,導致未過濾的資料被拼接到SQL語句中並執行。
種類?
- 數字型
- 字元型
- 聯合注入
- 布林注入
- 延時注入
- 報錯注入
- 二次注入
- 堆疊注入
- 寬位元組注入
- HTTP頭注入
修復?
- 預編譯
- 正規表示式過濾
- 開啟魔術引號,對特殊字元加轉義
- 裝WAF
預編譯原理?
將一次SQL語句的執行分為兩次互動完成:
- 先傳送SQL語句的模板,對於引數部分,用佔位符代替,例如Mybatis中用?
- 對於客戶端傳遞過來的引數傳入到模板中,僅僅被當作是字串執行,因此杜絕了SQL隱碼攻擊的產生。
XSS的種類有哪些?區別?修復?
種類?
- 儲存型
- 反射型
- DOM型
原理/區別?
XSS就是js程式碼。XSS本質就是輸入和輸出。使用者可以控制輸入的內容,伺服器如果對輸入的內容沒有經過任何過濾,那麼使用者就可以構造惡意XSS從而對html頁面進行改變,對使用者進行攻擊。
-
儲存型:將js程式碼儲存到了資料庫中,當使用者訪問了帶有惡意js程式碼的頁面時,js程式碼就會從資料庫中調取出來,從而被載入到頁面中執行。
- 儲存型比反射型危害更大,因為會一直儲存在資料庫中。
- 只要使用者訪問了惡意頁面,就會收到攻擊。
- 不需要使用者的配合。
- 常出現在使用者留言板等業務中
-
反射型:常出現在url中,攻擊者構造帶有XSS的惡意連結,欺騙使用者點選,從而導致XSS。
- 反射型XSS一般都是一次性的
- 需要使用者配合(配合社工)
- 使用者正常訪問不會受到XSS。
-
DOM型:上述提到的輸入,處理,輸出都是在前端完成。
修復?
- 開啟http-only,防止cookie盜取
- 過濾JS標籤
- 對於輸入的資料進行轉義等(魔術引號)
- 裝WAF等
XSS,CSRF,SSRF區別?
- XSS:跨站指令碼攻擊
- CSRF:跨站請求偽造
- SSRF:伺服器端請求偽造
XSS:伺服器對於使用者的輸入過濾不嚴,導致使用者可以向html頁面注入惡意js程式碼,當使用者訪問頁面時,瀏覽器就會解析惡意js程式碼,從而導致危害。(突出點在於js程式碼)
CSRF:脅持使用者瀏覽器強制做出某些行為。(突出點在於行為,傳送資料包)在這個過程中,攻擊者會利用使用者對已知站點的信任,在使用者不知情的狀態下,執行相關行為。
SSRF:伺服器代替攻擊者去請求url中的資料,如果url為內網地址,那麼攻擊者就相當於挾持了伺服器的身份來訪問內網的內容。
什麼是XXE漏洞?
XXE即XML外部實體注入漏洞,當應用程式解析XML輸入時,沒有禁用外部實體的載入,導致可以載入惡意外部檔案,造成命令執行、SQL隱碼攻擊、資訊洩露、帶外執行等。
PHP反序列化?
攻擊者根據類和序列化字串,構造惡意物件,當反序列化之後,就會呼叫魔術方法,從而導致RCE、資訊洩露、getshell等
PHP反序列化通常都會使用魔術方法,當序列化字串進行反序列化時,就會呼叫相應的魔術方法,從而導致RCE等。
如何構造?從原始碼中找到類,修改屬性,透過PHP的serialize方法來產生序列化字串。
Java反序列化?
Shiro反序列化?
如何發現某系統採用了Shiro框架?
手工:
嘗試去登入,如果登入失敗發現返回包存在rememberMe=deleteMe欄位,那麼就基本可以判斷是Shiro框架。
工具:
- goby
- 網路引擎
- shiroscan
- 外掛
原理:
- 未登陸的情況下,請求包的cookie中沒有rememberMe欄位,返回包setCookie裡也沒有deleteMe欄位
- 登陸失敗的話,不管勾選RememberMe欄位沒有,返回包都會有rememberMe=deleteMe欄位
- 不勾選RememberMe欄位,登陸成功的話,返回包set-Cookie會有rememberMe=deleteMe欄位。但是之後的所有請求中Cookie都不會有rememberMe欄位
- 勾選RememberMe欄位,登陸成功的話,返回包set-Cookie會有rememberMe=deleteMe欄位,還會有rememberMe欄位,之後的所有請求中Cookie都會有rememberMe欄位
業務邏輯漏洞的種類?
- 越權
- 未授權
- 支付金額修改
- 條件競爭
- 任意使用者註冊
- 任意使用者登入
- 簡訊轟炸機
- ...
給你一個登入框,思路?
- SQL隱碼攻擊
- XSS
- 任意使用者註冊
- 任意使用者登入
- js分析,檢視程式碼邏輯,檢視是否存在資訊洩露?
- 抓包
- 驗證碼爆破、轟炸、重用
- 弱口令,構造社工字典,爆破
- 未授權訪問
- 看返回包返回的資料,是否存在資訊洩露?
- 社會工程學
- ...
CDN和DNS區別?
CDN:內容分發網路,主要作用就是讓使用者就近訪問網路資源,提高響應速度,降低網路擁堵。
DNS:主要作用就是將域名翻譯成ip地址。
CDN檢測和繞過思路?
檢測?
- 超級ping
- 檢視返回包,是否存在域名為cdn.xxx的檔案,如果存在就是從CDN節點所請求的快取資源。
繞過?
- 子域名繞過
- 國外ping
- 採用CDN指令碼進行全網掃描
- 內部郵件洩露(反向連線的手段)
- ...
常見的中介軟體漏洞?
- IIS:PUT漏洞、短檔名漏洞
- Apache:解析漏洞、目錄遍歷等
- Redis:未授權訪問漏洞等
- Nginx:解析漏洞、目錄遍歷、目錄穿越等
- Shiro:反序列化漏洞等
- Tomcat:RCE漏洞、war後門檔案部署等
- JBoss:反序列化漏洞、war後門檔案部署等
- WebLogic:反序列化漏洞、war後門檔案部署等
- ...
WAF繞過的手法?
命令無回顯怎麼辦?
- 延時判斷
- DNSLog外帶
- 監聽http請求
- 寫webshell
- ...
3389埠無法連線的情況?
- 埠改了
- 超過了伺服器最大連線數
- 伺服器在內網
- 埠關了
- 管理員設定許可權,只允許指定使用者登入
- 防火牆
常問的埠資訊
- 21:FTP檔案傳輸協議
- 22:SSH遠端連線
- 23:TELNET遠端登入
- 25:SMTP郵件服務
- 53:DNS域名系統
- 80:HTTP超文字傳輸協議
- 443:HTTPS安全超文字傳輸協議
- 1433:MSSQL
- 3306:MYSQL
- 3389:windows遠端桌面服務埠
- 7701:weblogic
- 8080:TCP,HTTP協議代理伺服器:Apache-tomcat預設埠號
- 6379:redis
- ...
什麼是業務邏輯漏洞?說出至少三種業務邏輯漏洞。
邏輯漏洞是指由於程式邏輯不嚴或邏輯太複雜,導致一些邏輯分支不能夠正常處理或處理錯誤。挖掘業務邏輯漏洞,需要對業務有深刻的理解。
拿支付漏洞來說,簡單思路有價格修改,支付狀態修改,數量最大值溢位,訂單替換,支付介面替換,四捨五入,越權支付等等。
拿登入來說,修改狀態資訊,密碼修改跳過驗證等等。
密碼找回漏洞中存在:1)密碼允許暴力破解、2)存在通用型找回憑證、3)可以跳過驗證步驟、4)找回憑證可以攔包獲取。
身份認證漏洞中最常見的是:1)會話固定攻擊、2)Cookie 仿冒。只要得到Session 或 Cookie 即可偽造使用者身份。
驗證碼漏洞中存在:1)驗證碼允許暴力破解、2)驗證碼可以透過Javascript 或者改包的方法來進行繞過。
拿到webshell不出網情況下怎麼辦?
探測出網協議、如dns帶外,icmp等
PHP程式碼執行/命令執行的危險函式
- 程式碼執行:eval()、call_user_func()等
- 命令執行:system()、shell_exec()、exec()、passthru()等
SSRF禁用 127.0.0.1 後如何繞過,支援哪些協議?
- 縮寫繞過
- 進位制繞過
- dns重繫結
- 301重定向
- ...
.SVN/GIT原始碼洩露?
在使用SVN管理原生代碼過程中,會自動生成一個名為.svn的隱藏資料夾,其中包含重要的原始碼資訊
使用git進行版本控制,對站點自動部署。如果配置不當,可能會將.git資料夾直接部署到線上環境。這就引起了git洩露漏洞。
為何一個mysql資料庫的站,只有一個80埠開放?
- 3306埠已經更改
- 站庫分離,3306埠不對外開放。