安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。
目录
[1. 常见漏洞对应函数](#1. 常见漏洞对应函数)
[2. PHP安全特性](#2. PHP安全特性)
[3. 代码审计方法论](#3. 代码审计方法论)
[1. 命令执行方式](#1. 命令执行方式)
[2. 反序列化原理](#2. 反序列化原理)
[3. ysoserial利用链示例](#3. ysoserial利用链示例)
[4. Shiro反序列化漏洞](#4. Shiro反序列化漏洞)
[5. 核心机制理解](#5. 核心机制理解)
[6. 代码审计重点](#6. 代码审计重点)
[1. 非脚本工具开发](#1. 非脚本工具开发)
[2. Web框架安全](#2. Web框架安全)
[3. 代码审计关键](#3. 代码审计关键)
## PHP 1. 常见漏洞对应函数(挨个问) - 命令执行 - 代码执行 - 文件包含 - 文件上传 - 文件删除 - SSRF - ... 2. PHP安全特性有关注吗 3. 代码审计(mvc/非mvc) ## Java 1. Java执行命令的几种方式 2. Java反序列化的原理 3. 讲讲yso的链 4. Shiro 反序列化原理 5. 反射,代理,类加载这些熟悉吗 6. 代码审计 ## Python 1. 是否写过非脚本的工具 2. Web框架(flask/django) 3. 代码审计
PHP安全审计要点
1. 常见漏洞对应函数
漏洞类型 危险函数/场景 审计要点 命令执行 system()
,exec()
,passthru()
,shell_exec()
, 反引号 ``用户输入直接拼接命令参数 代码执行 eval()
,assert()
,preg_replace(/e)
,call_user_func()
,create_function()
动态执行用户可控字符串 文件包含 include()
,require()
,include_once()
,require_once()
未过滤的路径参数(LFI/RFI) 文件上传 move_uploaded_file()
+ 临时文件路径未验证文件类型/内容,目录遍历 文件删除 unlink()
用户可控路径未校验 SSRF file_get_contents()
,curl_exec()
,fsockopen()
用户控制URL协议(如 php://input
)反序列化 unserialize()
魔术方法( __wakeup()
,__destruct()
)2. PHP安全特性
- 类型弱校验 :
==
与===
区别(如"0e123" == "0"
为true)- 魔术引号废弃 (PHP 5.4+):需手动转义(
addslashes()
vsmysqli_real_escape_string()
)- 安全配置 :
open_basedir
(目录隔离)、disable_functions
(禁用高危函数)、allow_url_include=Off
- Filter扩展 :
filter_var($input, FILTER_VALIDATE_URL)
过滤输入3. 代码审计方法论
- 非MVC架构 :
追踪用户输入($_GET
/$_POST
) → 危险函数调用链,关注全局过滤缺失- MVC框架(如Laravel) :
重点审查路由控制器 → 中间件过滤 → ORM/SQL构建(避免原生SQL拼接)
Java安全深度解析
1. 命令执行方式
java`// 1. Runtime执行 Runtime.getRuntime().exec("cmd /c whoami"); // 2. ProcessBuilder(更灵活) new ProcessBuilder("cmd", "/c", "calc").start(); // 3. JNI调用本地库(需编译) native void executeCommand(String cmd);`
2. 反序列化原理
- 核心机制 :
ObjectInputStream.readObject()
自动调用对象的readObject()
或readExternal()
方法- 利用条件 :
靶库中存在可串联的Gadget链(如InvokerTransformer
+ConstantTransformer
)3. ysoserial利用链示例
- CommonsCollections链 :
AnnotationInvocationHandler
→LazyMap.get()
→ChainedTransformer.transform()
- Fastjson链 :
JdbcRowSetImpl
→JNDI
注入(lookup()
触发LDAP/RMI请求)4. Shiro反序列化漏洞
- 根源 :Cookie中
rememberMe
字段使用AES-CBC加密
→ 密钥硬编码 → 伪造序列化数据触发readObject()
- 利用:结合CommonsBeanutils等链构造内存马
5. 核心机制理解
- 反射 :
Class.forName()
,Method.invoke()
动态加载/调用类- 动态代理 :
InvocationHandler
拦截方法调用(AOP攻击面)- 类加载 :双亲委派机制 → 突破需自定义
ClassLoader
(如Tomcat热部署)6. 代码审计重点
- 框架入口 :Struts2的
Action
参数、Spring MVC的@RequestMapping
- 表达式注入 :OGNL/SpEL表达式解析(如
${@runtime.exec(...)}
)- 三方库漏洞:Log4j JNDI、Fastjson autoType等
Python安全实践
1. 非脚本工具开发
- 场景:网络扫描器(Scapy)、GUI工具(PyQt)、RPC服务(gRPC)
- 安全实践 :
使用subprocess
代替os.system()
,禁用pickle
序列化协议2. Web框架安全
框架 高危点 防御方案 Flask render_template_string()
(SSTI)禁止动态模板,用 Jinja2
沙箱Django eval()
执行用户输入启用CSRF中间件,ORM防SQL注入 3. 代码审计关键
- 输入校验 :
input()
→sanitize
(如html.escape()
)- 依赖风险 :
requirements.txt
包含漏洞库(如requests
SSRF)- 反序列化 :
pickle.loads()
→ 重写__reduce__
执行命令
通用审计建议
- 输入输出控制 :
- 白名单校验 > 黑名单过滤
- 输出编码(如HTML实体化)
- 最小权限原则 :
- PHP:禁用
exec
函数- Java:配置
SecurityManager
沙箱- 依赖管理 :
- 定期扫描
composer.json
/pom.xml
/requirements.txt
- 纵深防御 :
- WAF拦截异常请求
- RASP实时阻断漏洞利用