【面试复盘】华顺信安 白帽汇安全研究院一面

本文是作者对华顺信安安全研究院一面的复盘,涉及CTF比赛的解题经验、Web安全(如XXE、PHP与Java反序列化)及RMI机制。还分享了在绿盟的工作内容,离职原因,以及所负责的端口扫描插件实现和二维码识别小程序的原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.讲讲CTF另你印象最深刻的一道题目

和面试官讲了一道社工解密类的Misc题目


2.CTF web类的题目有做过吗,有没有印象比较深刻的

讲了网鼎杯CTF第一场的spider:

拿到题目,访问 robots.txt 发现存在 /get_sourcecode 文件,访问该URL提示 NOT 127.0.0.1

尝试伪造IP绕过,无果,经过尝试发现首页的爬虫分析系统会执行 JS 代码,我们构造恶意的ajax请求代码,通过服务器执行 JS 代码来访问 /get_sourcecode 文件

拿到 get_sourcecode 源代码,开始代码审计!

发现 redis 关键字 dbfilename ,猜测题目存在一个 redis 未授权访问,攻击思路应该是通过 redis 写马 getshell

先通过 JS 代码探测主机开放了哪些web端口,发现 8000端口开放着,猜测可能运行着一个PHP 的Web服务。再次通过 JS 代码,操纵 redis 并写入 shell。最后接着构造 JS 代码访问我们构造的PHP文件即可获得flag🚩


3.讲讲XXE的原理以及利用方法

应用程序在解析XML内容时,没有禁止外部实体的加载,导致可加载恶意外部文件;因此如果XML内容可控,那么就可造成XXE漏洞

利用方法:

1- 读取文件 <!ENTITY name SYSTEM "file:///etc/passwd">
2- SSRF <!ENTITY name SYSTEM "http://hacker.ssrf">
3- 在安装expect扩展的PHP环境里执行系统命令 <!ENTITY xxe SYSTEM "expect://id" >]>
4- 拒绝服务攻击 递归引用的方式

4.PHP反序列化讲讲,都有什么函数,以及如何利用的

序列化:serialize
反序列化:unserialize

利用可以使用PHP魔术方法

__construct:当对象被创建时调用

__destruct:当对象被销毁前调用

__sleep:执行serialize函数前调用

__wakeup:执行unserialize函数前调用

__call:在对象中调用不可访问的方法时调用

__callStatic:用静态方法调用不可访问方法时调用

__get:获得类成因变量时调用

__set:设置类成员变量时调用

5.Java反序列化函数,如何利用

序列化:Java.io.ObjectOutputStream类中的writeObject方法
反序列化:Java.io.ObjectInputStream类中的readObject方法
利用:通过Java反射


6.说说你对Java反射的理解

PS:因为对Java反射机制比较熟悉,这里说了一大堆,面试官很好,也没有打断

Java反射是Java语言的一项特性,它允许程序在运行时动态地获取、检查和操作类、对象、方法和属性。通过Java反射,开发人员可以在编译时未知类的情况下,通过类的名称、方法名、属性名等进行操作和调用

尽管Java反射提供了强大的动态操作能力,但由于它是在编译时未知类的情况下进行操作,因此会引入一定的性能开销和安全风险。因此,在使用反射时需要谨慎,确保合理使用并遵循最佳实践

Java反射主要带来的两个问题:安全问题和性能开销问题


7.rmi有了解吗

RMI是Java中的远程方法调用机制,它允许在不同的Java虚拟机(JVM)上的对象之间进行远程通信和方法调用。通过RMI,Java程序可以在网络上的不同节点上调用远程对象的方法,就像调用本地对象的方法一样,而不需要直接处理网络通信和序列化


8.rmi的架构有了解吗,讲一下

PS:一时懵逼了,后来发现其实就是讲讲rmi的各方组件构成,当时没答上来/(ㄒoㄒ)/~~

  • 客户端(Client):客户端是发起RMI调用的一方,它通过网络连接到服务器端,并请求调用远程对象的方法。客户端可能位于不同的Java虚拟机(JVM)中
  • 服务器端(Server):服务器端是提供远程对象和服务的一方。它在运行着的JVM中创建并导出远程对象,使其能够被客户端访问和调用。服务器端可能有多个,并且可以分布在不同的主机上
  • RMI注册表:RMI注册表是RMI架构中的中心化服务。它充当了服务器端和客户端之间的纽带。在服务器端,RMI注册表维护了一个对象引用的映射表,将远程对象与唯一的标识符进行关联。客户端通过查找RMI注册表获取远程对象的引用
  • 远程对象:远程对象是在服务器端创建并导出的Java对象,它实现了远程接口。远程接口定义了远程对象可供远程调用的方法。远程对象必须继承java.rmi.server.UnicastRemoteObject类以支持远程调用

9.讲讲你在绿盟的工作内容,为什么离职了

  • 负责XXX(自动化渗透测试平台)的迭代研发和POC,EXP的更新
  • 负责绿盟新一代安全社区XXX的前后端研发,并能对关键模块进行技术选型,对漏洞高发点进行安全把控
  • 参加公司内部资产轮询测试和漏扫“大练兵”,针对公司核心资产进行渗透测试

离职原因:学校有事


10.讲讲你在绿盟的部门,主要负责什么,团队规模怎么样

XXX部门,人数20几人,主要做红队工具开发,信息收集工具开发,自动化渗透测试平台开发,为一线安服人员赋能


11.最近报出的漏洞有了解吗?

讲了Spring Framework远程代码执行漏洞,但是实际根本没有复现过,这里答的效果一般


12.简单介绍一下你负责的端口扫描插件的实现

  • 基于绿盟旧版本(Python)的端口识别插件,设计并实现了Go语言端口识别插件的核心功能,包括目标主机的端口扫描和结果分析
  • 使用多线程技术提高插件的扫描速度,通过与channel配合实现了新的并发方式,提高了对协程控制的精细程度,扫描速度提升了300%
  • 集成了常见的端口扫描技术,如TCP连接扫描、SYN扫描和UDP扫描,以确保对不同类型的目标主机都具有较高的识别准确性

13.为什么要与channel配合实现并发

当时上线测试时发现了线程批量启动批量结束,造成服务器资源的不稳定性,配合使用channel,可以使线程的启动更加的平滑

在并发环境中,多个任务可能同时访问共享资源,导致竞争条件和数据不一致的问题。通过使用Channel,可以将任务间的交互限制在一个有序的通信通道中,避免了直接访问共享资源的竞争,从而减少了潜在的并发问题


14.向目标发送数据包,怎么判断端口开闭状态的

通过尝试与目标主机的指定端口建立TCP连接,可以判断端口是否开放。如果连接成功建立,则端口处于开放状态;如果连接失败或被拒绝,则端口处于关闭状态

使用ICMP协议发送Ping请求来测试目标主机的可达性。如果目标主机响应Ping请求,通常意味着端口处于开放状态;如果没有响应,则端口可能处于关闭状态或被防火墙屏蔽

UDP扫描是通过发送UDP数据包到目标端口,根据返回的响应或无响应来判断端口状态。如果收到UDP响应,可以推断端口是开放的;如果没有响应,则端口可能处于关闭状态或被防火墙过滤

通过发送数据包并测量从发送到接收的响应时间,可以初步判断端口的状态。如果响应时间非常短,则可以推断端口开放;如果响应时间较长或没有响应,则端口可能关闭


15.刚刚讲到向目标发送TCP连接的包,这里是怎么实现的

PS:看面试官的反应应该是期待我们自己实现了一个网络连接的框架,但实际没有,我们用的是goland的net包/(ㄒoㄒ)/~~

使用net包来进行端口扫描,具体是使用 net.DialTimeout 尝试向对方端口建立一个连接,通过连接的状态识别端口是否开放


16.POC和EXP的区别

POC指的是概念验证,是一种用于验证漏洞、安全问题或攻击方法的技术证明

EXP是针对特定漏洞或问题的实际攻击代码,用于获取未经授权的访问权限、执行恶意操作或获得敏感信息


17.平时是怎么编写POC的

在写POC之前,首先需要把漏洞详情搞清楚。对于一些开源CMS,可以到官网或者github上找到对应版本的源码,搭建模拟环境进行研究;有些不开源的漏洞,可以在网上找一些案例进行黑盒测试,复原漏洞产生过程。最好再撰写一份属于自己的漏洞分析报告

复现完成后生成payload,转化为XXX格式的poc(基于YAK语言的),提交到不同模拟环境扫描测试,考虑不同目标环境和条件下的适用性。如果可能,提供POC的变体,以适应不同的操作系统、软件版本或配置

最后审核上线


18.你们POC识别的维度有几层

???没看懂这个问题什么意思


19.平时有没有自己开发什么有意思的项目

IMUSTCTF靶场,二维码安全识别小程序,模拟学习强国的疫情期间的答题APP,算法可视化项目,网络安全视频学习站点,包头市青山区遇见青山APP(点评类),包头市广电局活动管理系统,包头市第二届文创旅游大赛官网,IMUSTACM(ACM练习平台)


20.详细说说你们的二维码识别小程序的原理

讲了一堆,巴拉巴拉,主要针对dfa内容监测算法和码安四维二维码分析算法


21.总结

面试时没有录音(之后要养成面试录音复盘的好习惯),还有一些问题忘记了,一面问了挺长时间,整体感觉很好,面试官人也不错,会详细介绍他们团队的研究方向


22.结果

5月23日,通知一面通过了,准备二面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

世界尽头与你

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值