《网安面试指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token=1860256701&lang=zh_CN
下午闲聊看到圈子里说现在网安公司都是边大刀阔斧的评判,边吸应届生,这咱也不知道真假,赶紧翻出脉脉看看。
还确实,似乎特别是今年互联网甲方大规模招收新人,似乎让互联人普遍被称为30+的危机,似乎也给了刚毕业的年轻人新的机会,同时公司还能降低了。
传统网安厂商也不例外,据说最近网安公司产品线受到大模型的冲击,大量的评判,同时又在高新挖掘算法、大模型阵地,看看脉脉里是这样的,不知道你呆的公司现在是什么情况,来吧评论区聊聊。
不管怎么样,今年的届生来说,应该是比较难的。
也正如我前几天发的《11家公司放出3w+的岗位然而》
对于应届生来说也很不错的机会,特别是哪些学年还不错的小伙伴。珍惜大厂降本增效的机会,紧抓刷面试题抓,紧找个机会进大厂一波。
为了方便大家沟通交流25年校招的信息、面试经验,我专门在星球中拉了个校招群,进星球后扫描进就可以了(会不定期发放内推码)---去后方领劵再进哈。
今年面过大厂安全岗的应该都普及,面试官多多少少都会问你写代码相关的问题把,如果你做不了安全开发,那么这些Java代码审计的题目你一定要略知一二。这里简单给大家放几个,看看会不会。
1.Spring表达式注入(SpEL)
代码片段:
@PreAuthorize("hasRole('ADMIN') || #user.id == authentication.principal.id")
public void updateUser(User user) {
//...
}
问题:分析潜在的安全风险及利用场景,如何构造恶意参数绕过权限校验?
答案:
-
漏洞点:Spring Security的
@PreAuthorize
使用SpEL表达式,若攻击者控制user.id
参数可构造简单表达式 -
攻击方式:确定
user.id
触发T(java.lang.Runtime).getRuntime().exec('calc')
RCE -
修复方案:避免在权限注解中直接引用用户可控参数,改用白名单校验或严格类型转换
2. MyBatis SQL 注入
代码片段:
<select id="findUser" parameterType="String" resultType="User">
SELECT * FROM users WHERE ${column} = #{value}
</select>
问题:指出漏洞原理并给出两种以上利用方式,如何安全修复?
答案:
-
漏洞原理:
${column}
直接拼接未过滤的列名参数 - 攻击方式:
-
初二
column=id; DROP TABLE users --
-
匿名
CASE WHEN
评论
-
-
修复方案:使用
<sql id="safeColumns">
白名单机制或预定义枚举值
3. Fastjson反序列化
代码片段:
String json = request.getParameter("data");
Object obj = JSON.parseObject(json, User.class);
问题:在Fastjson 1.2.24版本下,如何构造Payload实现RCE?给出修复方案
答案:
-
攻击Payload:利用
@type
指定恶意类如com.sun.rowset.JdbcRowSetImpl
,结合JNDI注入 - 修复方案:
-
升级到1.2.83+版本并开启
safeMode
-
产品
ParserConfig.getGlobalInstance().addDeny("org.apache.")
-
4. Shiro RememberMe 预测
代码片段:
shiro.rememberMe.cipherKey=KPHbfwAAAAAAAAAA
问题:分析该配置的安全隐患,给出完整的攻击利用链
答案:
-
漏洞点:硬编码默认AES密钥,符合Shiro 1.2.4默认密钥漏洞特征
- 攻击步骤:
-
使用ysoserial生成CommonsBeanutils1链的序列化数据
-
使用已知的密钥加密构造恶意Cookie
-
恶意发送RememberMe Cookie的请求触发反序列化
-
5. JAX-RS XML外部实体注入
代码片段:
@POST
@Consumes(MediaType.APPLICATION_XML)
public Response createUser(User user) {
//...
}
问题:如何利用XXE漏洞读取服务器文件?给出防御措施
答案:
- 攻击Payload:
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]> <user><name>&xxe;</name></user>
- 策略:
-
产品
XMLInputFactory.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false)
-
使用
DocumentBuilderFactory
时启用setExpandEntityReferences(false)
-
6. HQL注入
代码片段:
String hql = "FROM User WHERE name = '" + name + "'";
Query query = session.createQuery(hql);
问题:说明HQL注入与SQL注入的区别,给出防御方案
答案:
-
差异点:HQL支持对象属性查询,但不直接操作表,但可通过
' OR '1'='1
类语句绕过 - 策略:
-
使用
setParameter()
参数 -
对输入允许进行白名单校验(如仅字母数字)
-