網路安全常見面試題-Web方向

夏目^_^發表於2024-03-07

網路安全常見面試題

計算機網路

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埠不對外開放。

相關文章