华云an安服实习-记一次面试题

2024-03-16 18:04

本文主要是介绍华云an安服实习-记一次面试题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、看你简历上说擅长java、php代码审计,也没有类似的经历能够分享一下,比如说独自审的一套代码或者开源项目,从中发现的一些比较高危的问题

在我之前的工作中,我曾经负责对一个开源的PHP项目进行了代码审计。这个项目是一个内容管理系统(CMS),被广大开发者用于快速搭建网站。由于它的普及性和开源性质,对其进行安全审计显得尤为重要。

1. 审计过程

在审计过程中,我首先熟悉了项目的整体架构和代码结构。我阅读了项目的文档,查看了代码仓库的提交记录,并了解了项目的主要功能和常用模块。

接下来,我使用了一些自动化的代码审计工具,如PHPStan和SonarQube,对代码进行了静态分析。这些工具帮助我发现了代码中可能存在的一些潜在问题,如未定义的变量、未处理的异常、SQL注入风险等。

在静态分析的基础上,我进一步对代码进行了手动审查。我重点关注了用户输入处理、数据库操作、文件上传等安全敏感的部分。我查看了相关的函数和类,分析了它们的逻辑和实现方式,尝试寻找可能的安全漏洞。

2. 发现的问题

在审计过程中,我发现了一些比较高危的问题。其中一个比较典型的问题是SQL注入漏洞。在项目的一个模块中,用户输入没有经过充分的过滤和验证,直接被拼接到SQL查询语句中。这导致了潜在的SQL注入风险,攻击者可以利用这个漏洞执行恶意的SQL语句,获取敏感信息或者对数据库进行非法操作。

为了验证这个问题的真实性,我尝试构造了一些恶意的输入,并成功地触发了SQL注入漏洞。我及时向项目维护者报告了这个问题,并提供了修复建议。

3. 修复建议

针对发现的SQL注入漏洞,我给出了以下的修复建议:

  • 使用参数化查询或预编译语句来处理用户输入,避免直接将用户输入拼接到SQL语句中。
  • 对用户输入进行严格的过滤和验证,确保输入的安全性和合法性。
  • 更新数据库驱动库或ORM框架到最新版本,以确保它们提供了足够的安全防护措施。

除了SQL注入漏洞外,我还发现了一些其他的问题,如跨站脚本攻击(XSS)漏洞、文件上传漏洞等。我也针对这些问题给出了相应的修复建议。

2、在审项目的时候,比如一个web网站,简单说说思路

在审计一个Web网站项目时,我的思路通常遵循以下几个步骤:

1. 信息收集

首先,我会对目标网站进行基本的信息收集。这包括了解网站的功能、架构、使用的技术栈(如后端语言、前端框架、数据库类型等)、第三方库和插件的使用情况等。我还会查看网站的robots.txt文件、sitemap.xml文件以及网站的源代码,以获取更多关于网站结构和功能的信息。

2. 威胁建模

在收集了足够的信息后,我会进行威胁建模。这一步主要是根据收集到的信息,分析网站可能面临的安全威胁和攻击面。我会考虑各种攻击场景,如SQL注入、跨站脚本攻击(XSS)、跨站请求伪造(CSRF)、文件上传漏洞、认证和授权问题等。

3. 自动化扫描

接下来,我会使用自动化扫描工具对网站进行初步的漏洞扫描。这些工具可以帮助我快速发现一些常见的安全漏洞,如SQL注入、XSS等。但需要注意的是,自动化扫描工具可能会产生一些误报或漏报,因此扫描结果需要人工进一步验证和分析。

4. 手动测试

在自动化扫描的基础上,我会进行更深入的手动测试。我会针对威胁建模中识别的攻击面,逐一进行手动验证和测试。这包括输入验证测试、权限提升测试、业务逻辑测试等。在手动测试过程中,我可能会使用各种工具和技术,如代理工具、抓包工具、模糊测试等。

5. 漏洞验证和报告

当发现潜在的漏洞时,我会进行漏洞验证,确保漏洞的真实性和可利用性。一旦验证了漏洞的存在,我会记录漏洞的详细信息,包括漏洞类型、影响范围、攻击方式等,并生成漏洞报告。漏洞报告通常会提交给网站的管理员或安全团队,以便他们及时修复漏洞。

6. 修复建议

除了报告漏洞外,我还会提供修复建议。我会根据漏洞的类型和影响范围,给出相应的修复方案和建议。这些建议可能包括修改代码逻辑、更新库和插件、加强输入验证等。

7. 总结和反馈

最后,我会对整个审计过程进行总结和反馈。我会分析审计过程中遇到的问题和困难,总结经验和教训,并提出改进建议。

3、简单描述一下什么是水平越权,什么是垂直越权,我要发现这两类漏洞,那我代码审计要注意什么地方

水平越权是指同一权限级别的用户之间,一个用户能够访问或操作另一个用户的资源。例如,用户A和用户B都是普通用户,但用户A通过某种手段能够访问到用户B的私有数据,这就构成了水平越权。在实际应用中,水平越权多发生在一些能够对数据进行增、删、改、查的功能点,如果系统没有严格地验证用户身份或对数据做细分及校验,就可能导致此类漏洞。

垂直越权则是指不同权限级别的用户之间,低权限用户能够访问或操作高权限用户的资源。这通常是由于Web应用程序没有做权限控制,或者仅在菜单上做了权限控制,导致恶意用户只要猜测其他管理页面的URL,就能访问或控制其他角色拥有的数据或页面,从而达到权限提升的目的。垂直越权也被称为权限提升漏洞,是一种“基于URL的访问控制”设计缺陷引起的漏洞。

在代码审计过程中,要发现这两类漏洞,需要注意以下几点:

  1. 权限控制机制:审查系统中是否有完善、细致的权限控制机制。对于每个功能点,都要确认是否有相应的权限控制,并且这些控制是否严格、有效。
  2. 用户身份验证:确保系统对每个用户的身份都进行了严格的验证。特别是在执行敏感操作时,如访问其他用户的私有数据或进行权限提升,系统应该再次验证用户的身份和权限。
  3. 数据访问和操作的校验:对于每个数据访问和操作请求,系统都应该进行严格的校验,确保请求的用户有权限访问或操作该数据。特别是对于基于URL的访问控制,要防止恶意用户通过猜测URL来访问无权访问的资源。
  4. 输入验证和过滤:对于用户输入的数据,要进行严格的验证和过滤,防止恶意用户输入恶意数据来绕过权限控制。例如,防止SQL注入攻击、跨站脚本攻击等。
  5. 日志和监控:建立完善的日志和监控机制,记录用户的操作和行为。这样即使发生了越权访问或操作,也能及时发现并追溯源头。

4、解释一下SSRF

SSRF(Server-Side Request Forgery,服务器端请求伪造)是一种安全漏洞,由攻击者构造形成,利用服务端对用户提供的可控URL地址过于信任且未经严格检测,从而伪造服务器端发起的请求。攻击者可以利用SSRF攻击内网或其他服务器,获取敏感数据或绕过某些安全防御措施。

具体来说,SSRF的攻击方式包括但不限于:

  1. 对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息。
  2. 攻击运行在内网或本地的应用程序。
  3. 对内网web应用进行指纹识别,通过访问默认文件实现。
  4. 攻击内外网的web应用,主要是使用get参数就可以实现的攻击。
  5. 利用file协议读取本地文件等。

为了防御SSRF攻击,可以采取以下措施:

  1. 过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件,那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
  2. 统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。
  3. 限制请求的端口为http常用的端口,比如80、443、8080、8090等端口。
  4. 黑名单内网ip,避免应用被用来获取内网数据,攻击内网。
  5. 禁用不需要的协议,仅仅允许http和https请求。这样可以防止类似于file:///, gopher://, ftp:// 等引起的问题。

5、如何防御SSRF,场景:http://ip/?url=imagejipg

验证:你可以直接右键图片,在新窗口打开图片,如果是浏览器上URL地址栏是http://www.baidu.com/img/bd_logo1.png,说明不存在SSRF漏洞。经过简单的排除验证之后,我们就要验证看看此URL是否可以来请求对应的内网地址。在此例子中,首先我们要获取内网存在HTTP服务且存在favicon.ico文件的地址,才能验证是否是SSRF漏洞。

防御:限制请求的协议,例如限制只能是HTTP,HTTPS
使用DNS缓存或者Host白名单的方式
设置URl白名单或者限制内网IP等。

6、常见的内网段有哪些,他们的掩码是什么

常见的内网IP段以及对应的掩码如下:

  1. A类地址
    • IP段:10.0.0.0 - 10.255.255.255
    • 掩码:255.0.0.0
    • 网络范围:10.0.0.0/8,这里的“/8”表示网络部分占8位。
  2. B类地址
    • IP段:172.16.0.0 - 172.31.255.255
    • 掩码:255.255.0.0
    • 网络范围:172.16.0.0/12,这里的“/12”表示网络部分占12位。
  3. C类地址
    • IP段:192.168.0.0 - 192.168.255.255
    • 掩码:255.255.255.0
    • 网络范围:192.168.0.0/16,这里的“/16”表示网络部分占16位。

7、教育系统攻防演练,分享一个渗透的例子

场景描述

某教育机构的内部网站提供了一个学生信息管理系统,该系统允许教师和管理员查看和编辑学生的个人信息、成绩和出勤记录等。系统使用用户名和密码进行身份验证,并且存在一些已知的安全漏洞。

渗透测试步骤
  1. 信息收集
    • 渗透测试团队首先通过搜索引擎、Whois查询等方式收集目标网站的相关信息,如IP地址、域名、子域名、服务器类型等。
    • 团队还通过访问网站,了解其功能、页面结构、登录机制等。
  2. 漏洞扫描
    • 使用自动化工具对目标网站进行漏洞扫描,发现网站存在SQL注入漏洞和跨站脚本攻击(XSS)漏洞。
  3. 利用SQL注入漏洞
    • 渗透测试团队在登录页面的用户名或密码字段中输入特制的SQL注入代码。
    • 通过观察系统的响应,团队成功绕过了身份验证,并获取了数据库中的敏感信息,包括管理员的用户名和密码。
  4. 提升权限
    • 使用获取到的管理员凭据登录系统,渗透测试团队获得了对系统的完全控制权。
    • 他们能够查看和修改所有学生的信息,包括成绩和出勤记录。
  5. 植入恶意代码
    • 利用跨站脚本攻击(XSS)漏洞,团队在系统中植入了恶意代码。
    • 当其他用户(如教师或管理员)访问受感染的页面时,恶意代码会被执行,可能导致用户凭据被盗取或系统被进一步破坏。
  6. 清理痕迹与报告
    • 在完成渗透测试后,团队清理了所有留下的痕迹,确保系统恢复到原始状态。
    • 他们编写了一份详细的渗透测试报告,列出了发现的所有漏洞、利用方法、潜在影响以及修复建议。
修复措施与建议
  • 对输入进行严格的验证和过滤,防止SQL注入和跨站脚本攻击。
  • 使用参数化查询或预编译语句来访问数据库,避免直接拼接SQL语句。
  • 实施最小权限原则,确保每个用户只能访问其所需的最少资源。
  • 定期更新和打补丁系统及其依赖组件,以修复已知的安全漏洞。
  • 建立安全审计和监控机制,实时检测并响应潜在的安全事件。
  • 对员工进行安全意识培训,提高他们对网络安全的认识和防范能力。

8、除了学校,有没有试过渗透别的系统

看个人情况

9、这样的场景(给内网靶标),渗透内网系统的思路

攻击思路主要有2种:

攻击外网服务器,获取外网服务器的权限,接着利用入侵成功的外网服务器作为跳板,攻击内网其他服务器,最后获得敏感数据,并将数据传递到攻击者,看情况安装长期后门,实现长期控制和获得敏感数据的方式。

攻击办公网的系统、办公网电脑、办公网无线等方式,一般是采用社工,实现控制办公电脑,再用获得的办公网数据,可能是内网的各种登录账号和密码,再获取办公网或者生产网的有用数据。

这篇关于华云an安服实习-记一次面试题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/816273

相关文章

荣耀嵌入式面试题及参考答案

在项目中是否有使用过实时操作系统? 在我参与的项目中,有使用过实时操作系统。实时操作系统(RTOS)在对时间要求严格的应用场景中具有重要作用。我曾参与的一个工业自动化控制项目就采用了实时操作系统。在这个项目中,需要对多个传感器的数据进行实时采集和处理,并根据采集到的数据及时控制执行机构的动作。实时操作系统能够提供确定性的响应时间,确保关键任务在规定的时间内完成。 使用实时操作系统的

一些其他面试题

阿里二面:那你来说说定时任务?单机、分布式、调度框架下的定时任务实现是怎么完成的?懵了。。_哔哩哔哩_bilibili 1.定时算法 累加,第二层每一个格子是第一层的总时间400 ms= 20 * 20ms 2.MQ消息丢失 阿里二面:高并发场景下引进消息队列有什么问题?如何保证消息只被消费一次?真是捏了一把汗。。_哔哩哔哩_bilibili 发送消息失败

zookeeper相关面试题

zk的数据同步原理?zk的集群会出现脑裂的问题吗?zk的watch机制实现原理?zk是如何保证一致性的?zk的快速选举leader原理?zk的典型应用场景zk中一个客户端修改了数据之后,其他客户端能够马上获取到最新的数据吗?zk对事物的支持? 1. zk的数据同步原理? zk的数据同步过程中,通过以下三个参数来选择对应的数据同步方式 peerLastZxid:Learner服务器(Follo

java常用面试题-基础知识分享

什么是Java? Java是一种高级编程语言,旨在提供跨平台的解决方案。它是一种面向对象的语言,具有简单、结构化、可移植、可靠、安全等特点。 Java的主要特点是什么? Java的主要特点包括: 简单性:Java的语法相对简单,易于学习和使用。面向对象:Java是一种完全面向对象的语言,支持封装、继承和多态。跨平台性:Java的程序可以在不同的操作系统上运行,称为"Write once,

【Kubernetes】常见面试题汇总(三)

目录 9.简述 Kubernetes 的缺点或当前的不足之处? 10.简述 Kubernetes 相关基础概念? 9.简述 Kubernetes 的缺点或当前的不足之处? Kubernetes 当前存在的缺点(不足)如下: ① 安装过程和配置相对困难复杂; ② 管理服务相对繁琐; ③ 运行和编译需要很多时间; ④ 它比其他替代品更昂贵; ⑤ 对于简单的应用程序来说,可能不

【附答案】C/C++ 最常见50道面试题

文章目录 面试题 1:深入探讨变量的声明与定义的区别面试题 2:编写比较“零值”的`if`语句面试题 3:深入理解`sizeof`与`strlen`的差异面试题 4:解析C与C++中`static`关键字的不同用途面试题 5:比较C语言的`malloc`与C++的`new`面试题 6:实现一个“标准”的`MIN`宏面试题 7:指针是否可以是`volatile`面试题 8:探讨`a`和`&a`

Laravel 面试题

PHP模块 PHP7 和 PHP5 的区别,具体多了哪些新特性? 性能提升了两倍 结合比较运算符 (<=>) 标量类型声明 返回类型声明 try…catch 增加多条件判断,更多 Error 错误可以进行异常处理 匿名类,现在支持通过new class 来实例化一个匿名类,这可以用来替代一些“用后即焚”的完整类定义 …… 了解更多查看文章底部链接 PHP7 新特性 为什么 PHP

(function() {})();只执行一次

测试例子: var xx = (function() {     (function() { alert(9) })(); alert(10)     return "yyyy";  })(); 调用: alert(xx); 在调用的时候,你会发现只弹出"yyyy"信息,并不见弹出"10"的信息!这也就是说,这个匿名函数只在立即调用的时候执行一次,这时它已经赋予了给xx变量,也就是只是

【吊打面试官系列-Redis面试题】说说 Redis 哈希槽的概念?

大家好,我是锋哥。今天分享关于 【说说 Redis 哈希槽的概念?】面试题,希望对大家有帮助; 说说 Redis 哈希槽的概念? Redis 集群没有使用一致性 hash,而是引入了哈希槽的概念,Redis 集群有 16384 个哈希槽,每个 key 通过 CRC16 校验后对 16384 取模来决定放置哪个槽, 集群的每个节点负责一部分 hash 槽。

flume系列之:记录一次flume agent进程被异常oom kill -9的原因定位

flume系列之:记录一次flume agent进程被异常oom kill -9的原因定位 一、背景二、定位问题三、解决方法 一、背景 flume系列之:定位flume没有关闭某个时间点生成的tmp文件的原因,并制定解决方案在博主上面这篇文章的基础上,在机器内存、cpu资源、flume agent资源都足够的情况下,flume agent又出现了tmp文件无法关闭的情况 二、