本文主要是介绍华云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的访问控制”设计缺陷引起的漏洞。
在代码审计过程中,要发现这两类漏洞,需要注意以下几点:
- 权限控制机制:审查系统中是否有完善、细致的权限控制机制。对于每个功能点,都要确认是否有相应的权限控制,并且这些控制是否严格、有效。
- 用户身份验证:确保系统对每个用户的身份都进行了严格的验证。特别是在执行敏感操作时,如访问其他用户的私有数据或进行权限提升,系统应该再次验证用户的身份和权限。
- 数据访问和操作的校验:对于每个数据访问和操作请求,系统都应该进行严格的校验,确保请求的用户有权限访问或操作该数据。特别是对于基于URL的访问控制,要防止恶意用户通过猜测URL来访问无权访问的资源。
- 输入验证和过滤:对于用户输入的数据,要进行严格的验证和过滤,防止恶意用户输入恶意数据来绕过权限控制。例如,防止SQL注入攻击、跨站脚本攻击等。
- 日志和监控:建立完善的日志和监控机制,记录用户的操作和行为。这样即使发生了越权访问或操作,也能及时发现并追溯源头。
4、解释一下SSRF
SSRF(Server-Side Request Forgery,服务器端请求伪造)是一种安全漏洞,由攻击者构造形成,利用服务端对用户提供的可控URL地址过于信任且未经严格检测,从而伪造服务器端发起的请求。攻击者可以利用SSRF攻击内网或其他服务器,获取敏感数据或绕过某些安全防御措施。
具体来说,SSRF的攻击方式包括但不限于:
- 对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息。
- 攻击运行在内网或本地的应用程序。
- 对内网web应用进行指纹识别,通过访问默认文件实现。
- 攻击内外网的web应用,主要是使用get参数就可以实现的攻击。
- 利用file协议读取本地文件等。
为了防御SSRF攻击,可以采取以下措施:
- 过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件,那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
- 统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。
- 限制请求的端口为http常用的端口,比如80、443、8080、8090等端口。
- 黑名单内网ip,避免应用被用来获取内网数据,攻击内网。
- 禁用不需要的协议,仅仅允许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段以及对应的掩码如下:
- A类地址
- IP段:10.0.0.0 - 10.255.255.255
- 掩码:255.0.0.0
- 网络范围:10.0.0.0/8,这里的“/8”表示网络部分占8位。
- B类地址
- IP段:172.16.0.0 - 172.31.255.255
- 掩码:255.255.0.0
- 网络范围:172.16.0.0/12,这里的“/12”表示网络部分占12位。
- C类地址
- IP段:192.168.0.0 - 192.168.255.255
- 掩码:255.255.255.0
- 网络范围:192.168.0.0/16,这里的“/16”表示网络部分占16位。
7、教育系统攻防演练,分享一个渗透的例子
场景描述
某教育机构的内部网站提供了一个学生信息管理系统,该系统允许教师和管理员查看和编辑学生的个人信息、成绩和出勤记录等。系统使用用户名和密码进行身份验证,并且存在一些已知的安全漏洞。
渗透测试步骤
- 信息收集:
- 渗透测试团队首先通过搜索引擎、Whois查询等方式收集目标网站的相关信息,如IP地址、域名、子域名、服务器类型等。
- 团队还通过访问网站,了解其功能、页面结构、登录机制等。
- 漏洞扫描:
- 使用自动化工具对目标网站进行漏洞扫描,发现网站存在SQL注入漏洞和跨站脚本攻击(XSS)漏洞。
- 利用SQL注入漏洞:
- 渗透测试团队在登录页面的用户名或密码字段中输入特制的SQL注入代码。
- 通过观察系统的响应,团队成功绕过了身份验证,并获取了数据库中的敏感信息,包括管理员的用户名和密码。
- 提升权限:
- 使用获取到的管理员凭据登录系统,渗透测试团队获得了对系统的完全控制权。
- 他们能够查看和修改所有学生的信息,包括成绩和出勤记录。
- 植入恶意代码:
- 利用跨站脚本攻击(XSS)漏洞,团队在系统中植入了恶意代码。
- 当其他用户(如教师或管理员)访问受感染的页面时,恶意代码会被执行,可能导致用户凭据被盗取或系统被进一步破坏。
- 清理痕迹与报告:
- 在完成渗透测试后,团队清理了所有留下的痕迹,确保系统恢复到原始状态。
- 他们编写了一份详细的渗透测试报告,列出了发现的所有漏洞、利用方法、潜在影响以及修复建议。
修复措施与建议
- 对输入进行严格的验证和过滤,防止SQL注入和跨站脚本攻击。
- 使用参数化查询或预编译语句来访问数据库,避免直接拼接SQL语句。
- 实施最小权限原则,确保每个用户只能访问其所需的最少资源。
- 定期更新和打补丁系统及其依赖组件,以修复已知的安全漏洞。
- 建立安全审计和监控机制,实时检测并响应潜在的安全事件。
- 对员工进行安全意识培训,提高他们对网络安全的认识和防范能力。
8、除了学校,有没有试过渗透别的系统
看个人情况
9、这样的场景(给内网靶标),渗透内网系统的思路
攻击思路主要有2种:
攻击外网服务器,获取外网服务器的权限,接着利用入侵成功的外网服务器作为跳板,攻击内网其他服务器,最后获得敏感数据,并将数据传递到攻击者,看情况安装长期后门,实现长期控制和获得敏感数据的方式。
攻击办公网的系统、办公网电脑、办公网无线等方式,一般是采用社工,实现控制办公电脑,再用获得的办公网数据,可能是内网的各种登录账号和密码,再获取办公网或者生产网的有用数据。
这篇关于华云an安服实习-记一次面试题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!