Advertisement

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

阅读量:

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

    1. 分享一下你对CTF印象最深刻的那道题目的看法。
    1. 你在做CTF的时候有过接触web类题目吗?有没有特别印象深刻的一道题?
    1. 能否简单介绍一下XXE攻击的基本原理以及具体应用方法?
    1. 在PHP中反序列化方面有哪些函数?请具体说明它们是如何被利用的。
    1. Java反序列化相关的函数有哪些?它们的具体应用场景是什么?
    1. 关于Java反射的理解,请详细阐述你的认识。
    1. rmi协议的基础知识了解了吗?
    1. 对rmi协议的整体架构有了解吗?能否简要说明其工作原理?
    1. 在绿盟的工作内容是什么?为什么会选择离职?
    1. 在绿盟主要负责什么部门?团队规模情况如何?
    1. 最近有没有了解到某些最新的漏洞信息?
    1. 能否介绍一下你负责的端口扫描插件的核心实现原理?
    1. 在与channel交互时为什么要采用并发机制?
    1. 如何判断发送出去的数据包是否成功到达目标端口?
    1. 刚才提到向目标发送TCP连接包时,请解释具体的实现步骤。
    1. POC与EXP之间的主要区别是什么?
    1. 平时在编写POC时主要采用哪种方式?
    1. 您使用的POC识别维度通常有多少层?
    1. 在工作中有没有独立开发过有趣的小项目?
    1. 能否详细解释你们开发的二维码识别小程序的工作原理?
    1. 总结一下目前的工作内容与收获。
    1. 实验结果表明什么问题?请简要说明。

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

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


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

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

面对题目时,查看 robots.txt 文件后发现确实存在一个名为 /get_sourcecode 的目录项;尝试访问此 URL 却得到 403 禁用响应。

在多次尝试通过伪装IP规避访问时未获成功后发现首页具备基于JavaScript的爬虫分析系统会自动执行相关代码此时我们决定编写恶意的AJAX请求代码并由服务器端执行JavaScript以获取/get_sourcecode路径下的文件

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

识别 redis 核心关键字 dbfilename 后,推测该场景可能涉及 redis 未授权访问问题,并认为攻击思路可能是通过注入 getshell 指令实现的。

利用JS脚本探测主机已开放的Web端口,并注意到8000号端口处于开放状态。推测该Web服务可能是基于PHP开发的。随后再次使用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反射的理解

由于对Java反射机制有较为深入的理解,在此部分进行了详细阐述;这部分内容较为丰富;面试官态度友好;未进行任何打断

Reflection represents a core feature of the Java programming language. It enables programs to dynamically access, inspect, and manipulate classes, objects, methods, and attributes at runtime. via Java reflection, developers can interact with classes and their associated elements even when the class is unknown at compile time. They can access class names, method names, attribute names, and perform operations or calls accordingly.

虽然Java反射具备了强大的动态功能。但由于其在编译阶段处理未知类时进行操作。从而导致带来一定的性能开销和安全风险。需要注意,在使用反射时应采取谨慎措施。为了确保合理应用并严格遵守最佳实践

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


7.rmi有了解吗

该机制为Java提供了一种实现跨平台应用能力的技术框架。它允许开发人员在基于不同JVM的独立环境中实现统一的业务逻辑接口,并可无缝集成到现有的基于本地JVM的应用系统中。利用该技术框架,在Web服务架构中可以方便地创建可扩展性良好的服务实例,并可显著简化应用部署流程的同时提升系统的性能效率


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

PS:一时陷入困惑,后来才意识到核心要点在于 rmi 各模块的具体功能组成,当时未能及时解答出来~

  • 客户端(Client):通过网络连接发起请求到服务器端,并执行特定操作以调用所需功能。
  • 服务器端(Server):在其运行的JVM中负责生成并部署必要的资源以便供客户端访问。
  • RMI注册表:作为核心组件管理映射关系,在其管理下实现资源与客户端之间的有效通信。
  • 远程对象:这些Java对象实现了特定接口并在支持远距离调用的标准类之上进行了扩展

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

  • 主管自动化渗透测试平台的技术迭代与优化工作,并推动相关项目的实施进展
  • 主导绿盟新一代安全社区的整体架构设计与实现工作;具备从架构设计到细节实现的技术能力,并有效识别潜在风险
  • 参与公司组织的安全能力提升训练活动;对公司重要资源进行全面安全评估与防护

离职原因:学校有事


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

XXX部门共有十几二十名员工,在 red team 工具、情报搜集工具以及渗透测试平台的研发方面深耕细作,并致力于为一线安全管理人员提供提升工作效能的技术支持


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

涉及Spring Framework远程代码执行漏洞的问题进行了介绍;然而实际上并没有成功实现这些漏洞的复现;整体表现平平。


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

  • 利用绿盟旧版本(Python)开发了一个Go语言端口识别插件的核心功能。
  • 通过多线程技术显著提升了插件的整体运行效率,并结合通道机制实现了更高效的并发处理。该插件在协程管理能力上的优化水平较之前提升约300%。
  • 整合了常用的端口探测手段包括TCP连接探测、SYN探测以及UDP探测等方法,并确保不同目标主机都能获得较高的探测精度。

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

在进行上线测试时,我们揭示了多线程同时启动/关闭导致服务器资源处于不稳定状态.通过结合通道机制(channel),能够使得启动过程更加平滑.

在并行执行的环境中

通过引入Channel机制

最终达到了降低潜在并发问题发生频率的目的


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

通过与目标主机指定端口进行 TCP 连接尝试, 以便确定该端口是否开放。若该 TCP 连接建立成功, 则表示该端口已打开; 若该 TCP 连接无法建立或遭到拒绝, 则表示该端口已关闭。

通过ICMP协议向目标主机发送Ping请求来检验其可达性。若目标主机接收到Ping请求,则表明该端口处于开放状态;反之若无响应则该端口可能处于关闭状态或受防火墙的阻止。

通过向目标端口发送UDP数据包来进行UDP扫描,在网络设备上观察其返回的信息以判断当前的状态;若检测到接收方返回了ACK报文,则可推断该端口处于开放状态;反之,则表明该端口可能处于关闭状态或受防火墙拦截

利用发送数据包及其在发送至接收过程中的响应时间进行检测 ,可以判定该端口的状态。若检测到的响应时间为极短 ,则可判定该端口处于开放状态 ;若检测到的响应时间为较长或无回应 ,则该端口可能处于关闭状态


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

PS:对面试官的态度可能预示着他们希望我们自行构建一个网络连接架构。然而实际情况并非如此,具体实现中我们采用了golang的标准库net包。(≧ω≦)/~

为了实现对端口的扫描,在具体操作中采用 net.DialTimeout 这一方法。具体操作中采用 net.DialTimeout 这一方法。通过调用该函数尝试与目标端口进行通信,并通过接收到的响应状态来判断目标端口是否处于开放状态。


16.POC和EXP的区别

POC是指概念验证这一技术,并被用来检测潜在漏洞、安全漏洞以及可能的攻击手段。

EXP是专门针对特定的安全缺陷或安全问题设计的实际攻击样本,用于实现未经授权的访问权限、执行恶意操作以及窃取敏感信息


17.平时是怎么编写POC的

在开展POC工作之前,首先要弄清楚具体的漏洞情况。对于那些开源的网站管理系统,可以通过官网或GitHub获取相应版本的源代码,然后搭建一个模拟的研究环境来进行分析;而对于一些没有公开源代码的系统,可以在网上查找相关案例来进行黑盒测试分析,并还原其发生机制的基础上编写一份自己系统的漏洞分析报告文档

实现复现后生成payload,并将其转换为特定格式的POC(基于YAK语言实现),并在多个模拟环境中进行扫描测试。若可行,则提供相应场景下的POC变体,并考虑不同目标环境及条件进行适用性评估。

最后审核上线


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

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


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

IMUSTCTF测试场, 码上守护二维码安全识别移动应用, 学习强国答题应用(基于疫情), 算法可视化教学平台, 安全知识网络课程网站, 包头市青山区遇见青山服务类应用(点评类), 包头市广电局活动管理系统(广电局 affiliated), 包头市第二届文创旅游大赛 tournament website, IMUSTACM(ACM练习系统)


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

详细阐述了许多内容,并重点讲述了DF A内容监控机制以及码安基于四维码的数据解析方法


21.总结

在面试过程中未有录音(后需培养持续进行面试录音与复盘的习惯),还有些问题未能记住。一面持续询问了一段时间后整体感受良好。让人觉得他是个很不错的家伙,并将深入阐述他们团队的研究方向


22.结果

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

全部评论 (0)

还没有任何评论哟~