面试30余家公司安全岗,呕心沥血总结面经(二)

admin 2023年3月15日03:54:10评论88 views字数 24641阅读82分8秒阅读模式

8.6 奇安信A TEAM一面

红队

1、黄金票据原理

2、哈希传递

3、访问主机文件系统开启端口

SMB 445

4、udf提权dump_file为啥不是out_file

into outfile 函数 会 在行末端写入新行 更致命的 是会转义 换行符

into outfile事实上是可以完整导出每行记录的.这个很适合导库;而into dump是不行的 它只能导出 一行数据!

dump_file写入原意,未添加新行,into dumpfile 就能导出 一个完整能执行的2进制 文件,into dumpfile 函数不对任何列或行进行终止,也不执行任何转义处理。

5、DOM型XSS,前端代码可以看到吗?

DOM树状,方便客户端的JavaScript脚本通过DOM动态的检查和修改页面内容,不依赖服务端的数据。客户端JavaScript可以访问浏览器的DOM文本对象模型是利用的前提,当确认客户端代码中有DOM型XSS漏洞时,并且能诱使(钓鱼)一名用户访问自己构造的URL

DOM型XSS主要是由客户端的脚本通过DOM动态地输出数据到页面而不是依赖于将数据提交给服务器端,而从客户端获得DOM中的数据在本地执行,因而仅从服务器端是无法防御的。其防御在于:(1) 避免客户端文档重写、重定向或其他敏感操作,同时避免使用客户端数据,这些操作尽量在服务器端使用动态页面来实现;(2) 分析和强化客户端JS代码,特别是受到用户影响的DOM对象,注意能直接修改DOM和创建HTML文件的相关函数或方法,并在输出变量到页面时先进行编码转义,如输出到HTML则进行HTML编码、输出到则进行JS编码。

可能触发DOM型XSS的属性

document.referer属性

window.name属性

location属性:跳转。正常访问是用#去实现页面跳转,但是因为跳转部分参数可控,可能导致Dom xss。

通过 location.hash 的方式,将参数写在 # 号后,既能让JS读取到该参数,又不让该参数传入到服务器,从而避免了WAF的检测。 变量hash作为可控部分,并带入url中,变量hash控制的是#之后的部分,可以使用伪协议#javascript:alert(1)。常见的几种伪协议有javascript:vbscript:data:等。而现在的移动端(android和ios),都可以自定义这种协议从浏览器打开本地app,具体可以看看https://www.cnblogs.com/WuXiaolong/p/8735226.html#javascript:alert(1)

innerHTML属性:用于篡改页面,防护方法就是替换成innerText,它自动将HTML标签解析为普通文本,所以HTML标签不会被执行,避免XSS攻击。

documen.write属性

渲染后,不能。

6、SSRF

7、反序列化,Fastjson

XML-RPC

RMI默认配置

shiro框架

8、钓鱼,社工了解吗?

社会工程学是一种通过人际交流的方式获得信息的非技术渗透手段。不幸的是,这种手段非常有效,而且应用效率极高。事实上,社会工程学已是企业安全最大的威胁之一

想要克隆的站点URL

Judas反向代理钓鱼工具

Jonathan Cooper使用Go反向代理进行网络钓鱼网站克隆。Judas工具是一个钓鱼代理,使用命令行即可克隆网站。代理需要接收来自受害者的请求,并在发送到目标网站之前重写它们。

Judas设置了一个简单的 TCP 侦听器,它产生一个新的 goroutine 来处理每个传入的连接和一个处理请求和响应的工作 goroutine。结果通过通道从请求处理 goroutine 传递给工作程序。

访问http://192.168.75.129:443即可访问克隆的网站,并开始监听收集凭证等信息。

9、渗透思路

10、redis提权方法

11、mysql可以做啥实现提权

SQL注入

udf提权,用户自定义函数,可以执行命令,新建管理员用户。

Mysql提权主要是需要利用高权限的Mysql用户进行操作,拿用户主要是下列几种方式

  • 注入

  • 上传getshell

  • 查看网站数据库配置信息拿到用户密码

  • 弱口令

  • mysql系统漏洞,比如CVE-2012-2122身份认证漏洞

mof提权

1.原理 在windows平台下,c:/windows/system32/wbem/mof/nullevt.mof这个文件会每间隔一段时间(很短暂)就会以system权限执行一次,所以,只要我们将我们先要做的事通过代码存储到这个mof文件中,就可以实现权限提升。

2.利用条件

mysql用户具有root权限(对上面那个目录可写) 关闭了secure-file-priv

udf提权

1.原理 UDF提权是利用MYSQL的自定义函数功能,将MYSQL账号转化为系统system权限

2.利用条件

Mysql版本大于5.1版本udf.dll文件必须放置于MYSQL安装目录下的libplugin文件夹下。 Mysql版本小于5.1版本。udf.dll文件在Windows2003下放置于c:windowssystem32,在windows2000下放置于c:winntsystem32。 掌握的mysql数据库的账号有对mysql的insert和delete权限以创建和抛弃函数,一般以root账号为佳,具备`root账号所具备的权限的其它账号也可以。可以将udf.dll写入到相应目录的权限。

某些情况下,我们会遇到Can't open shared library的情况,这时就需要我们把udf.dll导出到libplugin目录下才可以,但是默认情况下plugin不存在,怎么办? 还好有大牛研究出了利用NTFS ADS流来创建文件夹的方法

select @@basedir;

//查找到mysql的目录

select 'It is dll' into dumpfile 'C:Program FilesMySQLMySQL Server 5.1lib::$INDEX_ALLOCATION';

//利用NTFS ADS创建lib目录

select 'It is dll' into dumpfile 'C:Program FilesMySQLMySQL Server 5.1libplugin::$INDEX_ALLOCATION';

//利用NTFS ADS创建plugin目录

执行成功以后再进行导出即可。

mysql反弹shell提权

其实这也属于udf提权,只不过应用场景不同,比如现在我们没有webshell但是我们却有偶然得到了mysql的root密码(弱口令等),恰巧目标机的数据库可以外联或者有phpmyadmin,那么我们就可以把上面udf.dll文件的内容先插入到数据表中,然后再导出到/lib/plugin目录。

windows启动项提权

当Windows的启动项可以被MySQL写入的时候可以使用MySQL将自定义脚本导入到启动项中,这个脚本会在用户登录、开机、关机的时候自动运行。

这个在msf也有对应的模块可以使用,但是对中文路径支持不是特别好,而且还需要等待用户上线才能反弹shell,比较麻烦,所以这里就复现手工操作

这里的操作系统是中文的win2003,目录为C:/Documents and Settings/Administrator/「开始」菜单/程序/启动/

8.9 360成都 安全运营,西南出差

1、SQL注入讲一下我知道的

2、web和实习印象深刻的漏洞

黄金票据和文件上传。

8.6阿里巴巴蓝军北京

不能实习,业务安全,学习强国蓝军,可之后联系。

8.7腾讯朱雀实验室 应用运维安全

主要做渗透测试,检测防御团队防御是否到位。听一下录音。

之后聊了很多关于学校的事,2019年来学校招聘宣讲。

有潜力但是无实战经验。

1、黄金票据原理,版本?

2、NTLM中继

NTLM hash 分为 NTLMv1 NTLMv2 NTLM session v2 三种,NTLMv2 的强度比 NTLMv1 强了不少 ,我们在实战中,如果获得的是NTLMv1的话直接对其进行爆破就行了,而现实情况中我们遇到的是 NTLMv2,NTLMv2的密码强度高了不少,因此如果你没有一个超级强大的字典,你很难得到明文密码。那么,如果爆破行不通的话我们不妨试一下NTLM Relay攻击。

在这个NTLM Relay中,我们就是要将截获的Net-NTLM Hash重放来进行攻击,从而实现对其他机器的控制,所以严格意义上应该叫作Net-NTLM Relay。访问远程主机或服务,而不用提供明文密码

由于SMB、HTTP、LDAP、MSSQL等协议都可以携带NTLM认证的三类消息,所以只要是使用SMB、HTTP、LDAP、MSSQL等协议来进行NTLM认证的程序,都可以尝试向攻击者发送Net-NTLMhash从而让攻击者截获用户的Net-NTLMhash,也就是说我们可以通过这些协议来进行攻击。

NTLMrelayx将凭证中继到LDAP、IMAP和MSSQL,NTLMrelayx是著名的smbrelayx工具.。

交叉协议的中继攻击

NTLM 身份验证被封装在其他协议中,但是无论覆盖的协议是什么,消息都是相同的。这允许在其他协议中使用 NTLM 消息。例如,使用 HTTP 进行身份验证的客户端会在“ Authorization”标头中发送 NTLM 身份验证消息。攻击者可以从 HTTP 头中提取这些消息,并在其他协议中使用它们,比如 SMB。NTLM支持多种协议,例如SMB、HTTP(S)、LDAP、IMAP、SMTP、POP3和MSSQL。

对于SMB协议,客户端在连接服务端时,默认先使用本机的用户名和密码hash尝试登录,所以攻击者可以模拟SMB服务器从而截获hash

自动发现协议——代理自动检测(WPAD)

WPAD 网络代理自动发现协议是一种客户端使用DCHP、DNS、LLMNR、NBNS协议来定位一个代理配置文件(PAC)URL的方法。WPAD通过让浏览器自动发现代理服务器,查找存放PAC 文件的主机来定位代理配置文件,下载编译并运行,最终自动使用代理访问网络。

也许在过去的几年里,对于黑客们来说,最臭名昭著的功能恐怕是 Windows 代理自动检测(WPAD)功能。这个特性将通过DNS查找一个名为WPAD的主机名,如果不能通过上面描述的LLMNR和NBNS成功查找到,则连接到它能找到的第一个主机。滥用这一特性变得更加容易,因为当提示进行身份验证时,工作站会自动尝试使用 NTLM 身份验证进行身份验证,然后可以被攻击者执行中继攻击。

Windows系统名称解析顺序为:

本地hosts文件(%windir%System32driversetchosts)

DNS缓存/DNS服务器

链路本地多播名称解析(LLMNR)和NetBIOS名称服务(NBT-NS)

也就是说,如果在缓存中没有找到名称,DNS名称服务器又请求失败时,Windows系统就会通过链路本地多播名称解析(LLMNR)和Net-BIOS名称服务(NBT-NS)在本地进行名称解析。这时,客户端就会将未经认证的UDP广播到网络中,询问它是否为本地系统的名称,由于该过程未被认证,并且广播到整个网络,从而允许网络上的任何机器响应并声称是目标机器。当用户输入不存在、包含错误或者DNS中没有的主机名时,通过工具(responder)监听LLMNR和NetBIOS广播,攻击者可以伪装成受害者要访问的目标机器,并从而让受害者交出相应的登陆凭证。核心过程与arp欺骗类似,我们可以让攻击者作中间人,截获到客户端的Net-NTLMHash。

中间人攻击

中间人攻击(man-in-middle attack,即攻击者接管受害者的流量),这种攻击在企业网络中常常具有破坏性,尤其是在使用 ARP 欺骗等技术时。然而,当企业设备连接到不受信任的网络(例如公共 WiFi 网络)时,攻击者可以攻击受害者并截获不受 TLS 保护的流量,将其重定向到受害者工作站受信任的位置。然后,受害者将自动验证是否启用了自动内部网检测(这是默认的设置)。

防御

因此唯一完整的解决方案是完全禁用 NTLM 并切换到 Kerberos。

·启用 SMB 签名: SMB 签名将通过要求所有流量都进行签名来防止中继到 SMB。签名需要用户密码来验证消息,因此中继连接的攻击者不能发送任何将被服务器接受的流量,因为攻击者没有受害者的密码。

·启用 LDAP 签名: 与 SMB 签名类似,LDAP 签名可以防止中继到 LDAP 的无签名连接。应该注意的是,通过 TLS 连接到 LDAP 被认为是有签名的,因此此设置不能防止通过 TLS 对 LDAP 的中继攻击。

·启用扩展的身份验证保护: 扩展的身份验证保护有助于防止一些中继攻击,确保用于连接到服务器的 TLS 通道与客户端验证时使用的通道相同。此设置主要适用于 IIS。

·启用 SPN 目标名称验证: SPN 目标名称验证是另一个缓解措施,它通过验证客户端认为正在对其进行身份验证的目标名称来防止中继到SMB。如果名称与服务器不匹配,则拒绝身份验证。

·确保内部网站使用 HTTPS: 当内部网站通过不安全的 HTTP 协议访问时,用户无法验证连接的真实性。通过强制所有内部网站只能使用 HTTPS,中继服务的效率就会大大降低。

8.6知道创宇404实验室 安全研究

他们做漏洞复现,应急响应。

1、ptrace原理

ptrace系统调从名字上看是用于进程跟踪的,它提供了父进程可以观察和控制其子进程执行的能力,并允许父进程检查和替换子进程的内核镜像(包括寄存器)的值。其基本原理是: 当使用了ptrace跟踪后,所有发送给被跟踪的子进程的信号(除了SIGKILL),都会被转发给父进程,而子进程则会被阻塞,这时子进程的状态就会被系统标注为TASK_TRACED。而父进程收到信号后,就可以对停止下来的子进程进行检查和修改,然后让子进程继续运行。

其原型为:   #include <sys/ptrace.h>  long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);  ptrace有四个参数:   1). enum __ptrace_request request:指示了ptrace要执行的命令。  2). pid_t pid: 指示ptrace要跟踪的进程。  3). void *addr: 指示要监控的内存地址。  4). void *data: 存放读取出的或者要写入的数据。

strace调试原理:

在上面的程序中,fork出的子进程先调用了ptrace(PTRACE_TRACEME)表示子进程让父进程跟踪自己。然后子进程调用execl加载执行了HelloWorld。而在父进程中则使用wait系统调用等待子进程的状态改变。子进程因为设置了PTRACE_TRACEME而在执行系统调用被系统停止(设置为TASK_TRACED),这时父进程被唤醒,使用ptrace(PTRACE_PEEKUSER,pid,...)分别去读取子进程执行的系统调用ID(放在ORIG_EAX中)以及系统调用返回时的值(放在EAX中)。然后使用ptrace(PTRACE_SYSCALL,pid,...)指示子进程运行到下一次执行系统调用的时候(进入或者退出),直到子进程退出为止。

GDB的实现 GDB是GNU发布的一个强大的程序调试工具,用以调试C/C++程序。可以使程序员在程序运行的时候观察程序在内存/寄存器中的使用情况。它的实现也是基于ptrace系统调用来完成的。其原理是利用ptrace系统调用,在被调试程序和gdb之间建立跟踪关系。然后所有发送给被调试程序的信号(除SIGKILL)都会被gdb截获,gdb根据截获的信号,查看被调试程序相应的内存地址,并控制被调试的程序继续运行。GDB常用的使用方法有断点设置和单步跟踪

3.1 建立调试关系 用gdb调试程序,可以直接gdb ./test,也可以gdb <pid>(test的进程号)。这对应着使用ptrace建立跟踪关系的两种方式: 1)fork: 利用fork+execve执行被测试的程序,子进程在执行execve之前调用ptrace(PTRACE_TRACEME),建立了与父进程(debugger)的跟踪关系。如我们在分析strace时所示意的程序。 2)attach: debugger可以调用ptrace(PTRACE_ATTACH,pid,...),建立自己与进程号为pid的进程间的跟踪关系。即利用PTRACE_ATTACH,使自己变成被调试程序的父进程(用ps可以看到)。用attach建立起来的跟踪关系,可以调用ptrace(PTRACE_DETACH,pid,...)来解除。注意attach进程时的权限问题,如一个非root权限的进程是不能attach到一个root进程上的。

3.2 断点原理 断点是大家在调试程序时常用的一个功能,如break linenumber,当执行到linenumber那一行的时候被调试程序会停止,等待debugger的进一步操作。 断点的实现原理,就是在指定的位置插入断点指令,当被调试的程序运行到断点的时候,产生SIGTRAP信号。该信号被gdb捕获并进行断点命中判定,当gdb判断出这次SIGTRAP是断点命中之后就会转入等待用户输入进行下一步处理,否则继续。断点的设置原理: 在程序中设置断点,就是先将该位置的原来的指令保存,然后向该位置写入int 3。当执行到int 3的时候,发生软中断,内核会给子进程发出SIGTRAP信号,当然这个信号会被转发给父进程。然后用保存的指令替换int3,等待恢复运行。断点命中判定:gdb把所有的断点位置都存放在一个链表中,命中判定即把被调试程序当前停止的位置和链表中的断点位置进行比较,看是断点产生的信号,还是无关信号。

3.3 单步跟踪原理 单步跟踪就是指在调试程序的时候,让程序运行一条指令/语句后就停下。GDB中常用的命令有next, step, nexti, stepi。单步跟踪又常分为语句单步(next, step)和指令单步(如nexti, stepi)。

最后让我们来回顾一下ptrace的使用:

1)用PTRACE_ATTACH或者PTRACE_TRACEME 建立进程间的跟踪关系。 2)PTRACE_PEEKTEXT, PTRACE_PEEKDATA, PTRACE_PEEKUSR等读取子进程内存/寄存器中保留的值。 3)PTRACE_POKETEXT, PTRACE_POKEDATA, PTRACE_POKEUSR等把值写入到被跟踪进程的内存/寄存器中。 4)用PTRACE_CONT,PTRACE_SYSCALL, PTRACE_SINGLESTEP控制被跟踪进程以何种方式继续运行。 5)PTRACE_DETACH, PTRACE_KILL 脱离进程间的跟踪关系。

8.5字节开发测试 8.13字节测试工程师

1、数组链表的区别

不同:链表是链式的存储结构;数组是顺序的存储结构。

链表通过指针来连接元素与元素,数组则是把所有元素按次序依次存储,数组是一块连续的区域。数组需要预留空间,在使用前要先申请占内存的大小,可能会浪费内存空间

链表的插入删除元素相对数组较为简单,不需要移动元素,且较为容易实现长度扩充,但是寻找某个元素较为困难;

数组寻找某个元素较为简单,但插入与删除比较复杂,由于最大长度需要再编程一开始时指定,故当达到最大长度时,扩充长度不如链表方便。

相同:两种结构均可实现数据的顺序存储,构造出来的模型呈线性结构。

数组的优点:随机访问性强,查找速度快

数组的缺点:插入和删除效率低,可能浪费内存,内存空间要求高,必须有足够的连续内存空间。数组大小固定,不能动态拓展

链表的优点:插入删除速度快,内存利用率高,不会浪费内存,大小没有固定,拓展很灵活。

链表的缺点:不能随机查找,必须从第一个开始遍历,查找效率低

2、指针引用的区别

两者的定义和性质不同

指针和引用都是地址的概念,指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。

指针是一个变量,存储的是一个地址,指向内存的一个存储单元;

引用是原变量的一个别名,跟原来的变量实质上是同一个东西。

int a = 996; int *p = &a; // p是指针, &在此是求地址运算 int &r = a; // r是引用, &在此起标识作用

上面定义了一个整型变量 a,p 是一个指针变量,p 的值是变量 a 的地址;

而引用 r,是 a 的一个别名,在内存中 r 和 a 占有同一个存储单元。

面试30余家公司安全岗,呕心沥血总结面经(二)

指针可以有多级,引用只能是一级

int **p; // 合法 int &&a; // 不合法

指针可以在定义的时候不初始化,引用必须在定义的时候初始化

int *p; // 合法 int &r; // 不合法 int a = 996; int &r = a; // 合法

指针可以指向NULL,引用不可以为NULL

int *p = NULL; // 合法
int &r = NULL; // 不合法

指针:指针就是内存地址,指针变量是用来存放内存地址的变量.不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。

引用:引用不是新定义一个变量,而是给已存在变量取一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间.

引用的主要用途是:修饰函数的形参和返回值.

在C++语言中,函数的参数和返回值的传递方式有三种:值传递,指针传递和引用传递.引用具有指针的效率,又具有变量使用的方便性和直观性.

实际上引用可以做的事,指针都可以做,为什么还要引用呢?

引用体现了最小特权原则,即给予程序元素完成其功能的最小权限. 指针能够毫无约束的操作内存中的任何东西,尽管功能强大,但是非常危险.

初始化:引用在定义时必须初始化,指针则没有要求(尽量初始化,防止野指针)
引用在初始化引用一个实体后,就不能再引用其它实体,而指针可以在任意时候指向一个同类型实体
没有NULL引用,但是有nullptr指针
在sizeof中含义不同: 引用结果为引用类型的大小,但指针始终是地址空间,所占字节个数(32位平台占4个字节)
引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小
有多级指针,但没有多级引用
访问实体的方式不同,指针需要显式解引用,引用编译器自己处理
引用比指针使用起来相对安全

2、Linux查询命令grep

常用选项:
  -E :开启扩展(Extend)的正则表达式。

  -i :忽略大小写(ignore case)。

  -v :反过来(invert),只打印没有匹配的,而匹配的反而不打印。

  -n :显示行号

  -w :被匹配的文本只能是单词,而不能是单词中的某一部分,如文本中有liker,而我搜寻的只是like,就可以使用-w选项来避免匹配liker

  -c :显示总共有多少行被匹配到了,而不是显示被匹配到的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到。

  -o :只显示被模式匹配到的字符串。

  --color :将匹配到的内容以颜色高亮显示。

  -A n:显示匹配到的字符串所在的行及其后n行,after

  -B n:显示匹配到的字符串所在的行及其前n行,before

  -C n:显示匹配到的字符串所在的行及其前后各n行,context

输出十行,写入到文件

-o 重定向>

3、数据库索引

索引,用于提升数据库的查找速度。MySQL索引底层的实现,B+树

加速查找速度的数据结构,常见的有两类:

(1)哈希,例如HashMap,查询/插入/修改/删除的平均时间复杂度都是O(1);

(2),例如平衡二叉搜索树,查询/插入/修改/删除的平均时间复杂度都是O(lg(n));

可以看到,不管是读请求,还是写请求,哈希类型的索引,都要比树型的索引更快一些,那为什么,索引结构要设计成树型呢?

画外音:80%的同学,面试都答不出来。

索引设计成树形,和SQL的需求相关。

对于这样一个单行查询的SQL需求:

select * from t where name=”shenjian”;

确实是哈希索引更快,因为每次都只查询一条记录。

*画外音:所以,如果业务需求都是单行访问,例如passport,确实可以使用哈希索引。

但是对于排序查询的SQL需求:

(1)分组:group by

(2)排序:order by

(3)比较:<、>

(4)…

哈希型的索引,时间复杂度会退化为O(n),而树型的“有序”特性,依然能够保持O(log(n)) 的高效率。

第一种:二叉搜索树

面试30余家公司安全岗,呕心沥血总结面经(二)

二叉搜索树,如上图,是最为大家所熟知的一种数据结构,就不展开介绍了,它为什么不适合用作数据库索引?

(1)当数据量大的时候,树的高度会比较高,数据量大的时候,查询会比较慢;

(2)每个节点只存储一个记录,可能导致一次查询有很多次磁盘IO;

第二种:B树

面试30余家公司安全岗,呕心沥血总结面经(二)

B树,如上图,它的特点是:

(1)不再是二叉搜索,而是m叉搜索;

(2)叶子节点,非叶子节点,都存储数据;

(3)中序遍历,可以获得所有节点;

B树为何适合做索引?

(1)由于是m分叉的,高度能够大大降低;

(2)每个节点可以存储j个记录,如果将节点大小设置为页大小,例如4K,能够充分的利用预读的特性,极大减少磁盘IO;

第三种:B+树

面试30余家公司安全岗,呕心沥血总结面经(二)

B+树,如上图,仍是m叉搜索树,在B树的基础上,做了一些改进

(1)非叶子节点不再存储数据,数据只存储在同一层的叶子节点上;

画外音:B+树中根到每一个节点的路径长度一样,而B树不是这样。

(2)叶子之间,增加了链表,获取所有节点,不再需要中序遍历;

这些改进让B+树比B树有更优的特性:

(1)范围查找,定位min与max之后,中间叶子节点,就是结果集,不用中序回溯;

画外音:范围查询在SQL中用得很多,这是B+树比B树最大的优势。

(2)叶子节点存储实际记录行,记录行相对比较紧密的存储,适合大数据量磁盘存储;非叶子节点存储记录的PK,用于查询加速,适合内存存储;

(3)非叶子节点,不存储实际记录,而只存储记录的KEY的话,那么在相同内存的情况下,B+树能够存储更多索引;

总结

(1)数据库索引用于加速查询;

(2)虽然哈希索引是O(1),树索引是O(log(n)),但SQL有很多“有序”需求,故数据库使用树型索引;

(3)InnoDB不支持手动创建哈希索引;

(4)数据预读的思路是:磁盘读写并不是按需读取,而是按页预读,一次会读一页的数据,每次加载更多的数据,以便未来减少磁盘IO

(5)局部性原理:软件设计要尽量遵循“数据读取集中”与“使用到一个数据,大概率会使用其附近的数据”,这样磁盘预读能充分提高磁盘IO

(5)数据库的索引最常用B+树:

- 很适合磁盘存储,能够充分利用局部性原理,磁盘预读;

- 很低的树高度,能够存储大量数据;

- 索引本身占用的内存很小;

- 能够很好的支持单点查询,范围查询,有序性查询;

4、进程线程区别

每个进程都有自己的地址空间,即进程空间,在网络或多用户换机下,一个服务器通常需要接收大量不确定数量用户的并发请求,为每一个请求都创建一个进程显然行不通(系统开销大响应用户请求效率低),因此操作系统中线程概念被引进。

进程:

是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。

线程:

是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。

协程:

是一种比线程更加轻量级的存在。一个线程也可以拥有多个协程。其执行过程更类似于子例程,或者说不带返回值的函数调用。

地址空间:

线程共享本进程的地址空间,而进程之间是独立的地址空间。

资源:

线程共享本进程的资源如内存、I/O、cpu等,不利于资源的管理和保护,而进程之间的资源是独立的,能很好的进行资源管理和保护。

健壮性:

多进程要比多线程健壮,一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。

执行过程:

每个独立的进程有一个程序运行的入口、顺序执行序列和程序入口,执行开销大。

但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,执行开销小。

可并发性:

两者均可并发执行。

切换时:

进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程。

其他:

线程是处理器调度的基本单位,但是进程不是。

协程避免了无意义的调度,由此可以提高性能,但程序员必须自己承担调度的责任。同时,协程也失去了标准线程使用多CPU的能力。切换由自己控制,由当前协程切换到其他协程由当前协程来控制。

*python多线程的问题(面试问题)

存在问题:

python由于历史遗留的问题,严格说多个线程并不会同时执行(没法有效利用多核处理器,python的并发只是在交替执行不同的代码)。

多线程在Python中只能交替执行,即使100个线程跑在100核CPU上,也只能用到1个核。所以python的多线程并发并不能充分利用多核,并发没有java的并发严格。

原因:

原因就在于GIL ,在Cpython 解释器(Python语言的主流解释器)中,有一把全局解释锁(GIL, Global Interpreter Lock),在解释器解释执行Python 代码时,任何Python线程执行前,都先要得到这把GIL锁。

这个GIL全局锁实际上把所有线程的执行代码都给上了锁。

这意味着,python在任何时候,只可能有一个线程在执行代码。

其它线程要想获得CPU执行代码指令,就必须先获得这把锁,如果锁被其它线程占用了,那么该线程就只能等待,直到占有该锁的线程释放锁才有执行代码指令的可能。

多个线程一起执行反而更加慢的原因:

同一时刻,只有一个线程在运行,其它线程只能等待,即使是多核CPU,也没办法让多个线程「并行」地同时执行代码,只能是交替执行,因为多线程涉及到上线文切换、锁机制处理(获取锁,释放锁等),所以,多线程执行不快反慢。

什么时候GIL 被释放?

当一个线程遇到I/O 任务时,将释放GIL。

计算密集型(CPU-bound)线程执行100次解释器的计步(ticks)时(计步可粗略看作Python 虚拟机的指令),也会释放GIL。

即,每执行100条字节码,解释器就自动释放GIL锁,让别的线程有机会执行。

Python虽然不能利用多线程实现多核任务,但可以通过多进程实现多核任务。多个Python进程有各自独立的GIL锁,互不影响。

5、http与https区别

TCP三次握手

访问浏览器发生了什么

浏览器解析URL

检查HSTS列表(Https) 浏览器检查自带的“预加载HSTS(HTTP严格传输安全)”列表,这个列表里包含了那些请求浏览器只使用HTTPS进行连接的网站。浏览器向网站发出第一个HTTP请求之后,网站会返回浏览器一个响应,请求浏览器只使用HTTPS发送请求。然而,就是这第一个HTTP请求,却可能会使用户收到 downgrade attack 的威胁,这也是为什么现代浏览器都预置了HSTS列表。

转换非ASCII的Unicode字符:浏览器检查输入是否含有不是 a-z, A-Z,0-9, - 或者 . 的字符

解析域名,找到主机IP。

浏览器与网站建立TCP连接

浏览器发起GET请求

显示页面或返回其他

浏览器处理及渲染

浏览器收到Response后,首先对其进行加载,并根据其中的代码继续向服务器请求资源(css、javascript、img等),加载完成后对页面进行解析。 解析的过程,其实就是生成解析树,即Dom树。Dom树是由Dom元素及属性节点组成,加上css解析的样式对象和js解析后的动作实现。 接下来对Dom树进行可视化表示,也就是渲染,生成一颗渲染树。最后一步就是绘制网页,浏览器根据渲染树将元素绘制到屏幕上,同时执行js,完成整个页面的展示。

drop和delete区别

drop主要用于删除结构 例如删除数据库:drop database XX,删除表 drop table XX。字段也是结构的一种,也可以使用drop了?对的,但是我们改变了表结构要先alter方法。例如,我们要删除student表上的age字段的信息,可以这样写:alter table student drop age。

delete主要用于删除数据 举个例子,要删除 student表上名字为‘张三’的所有信息:delete from student where name=‘张三’。这种情况下用delete,由此可见delete常用于删除数据。

6、两个球,100层,用最少的次数摔碎

可以用不同层次。

7、编程题

数组,找到一个x,左边的比它小,右边的比它大。

最简单的思路是:遍历数组,对于每个元素分别往前、往后遍历一下,看看是否它是否满足条件。

通过分析可以得到,对于每个元素,如果它比左侧最大的值要大,同时比右侧最小的值要小,就满足条件。

数组,从小到大排序

最小公共字串

8.5 绿盟武汉二面 8.2一面

1、端口扫描

2、SSRF

3、自己分析过调试吗?代码审计

4、最印象深刻的

文件上传。github解决问题。

5、未来发展方向性的问题

6、印象深刻的具体的漏洞(web)

SSRF 和文件上传

7、同事矛盾沟通

选择倾听,主动思考。**不卑不亢,迎难而上。大是大非面前坚守底线。不做人身攻击。先保持冷静。及时停止争论**。

8.6兴业数金成都二面 7.29一面

主要问经历,安全运营,安全管理。

1、自我能力的判断

7.29科来 成都

安全研究中心(部门),技术支撑,自动化工具检测,产品研究,流量,渗透,开发,逆向,开发。

1、课程

C++ 操作系统 数据库。

2、内存木马检测

3、TCP握手

4、web工具

登录信息 爆破如何做

5、SQL注入

6、SSRF

7、内网横向移动

7.23shein希音 跨境电商 9.3 二面

蓝队,运营,规则部署工具,汇聚安全事件,waf,红队,应用安全,合规。

1、内存马的检测

查看命令执行

相关进程

二面

2、UNC的绕过方法

3、拟态和外面的防御的区别 优劣势

7.23京东 二面 7.21一面

漏洞研究,红队,免杀。安全工具的开发,自动一键利用。web和内网都有很多人,偏向于实践开发。

微信视频好像没记录。

1、内网如何用较少的流量探测主机

ping命令:通过ping检查网络连通性,通过telnet来测试指定端口连通性。

Powershell:通过powershell脚本扫描IP地址存活

基于MSF的内网主机探测:使用msf进行反弹shell进行内网渗透时,通过msf自带的扫描模块进行快速扫描。

Nmap扫描内网:Nmap是一个端口扫描器,可用于主机发现、端口扫描、版本检测、OS检测等。使用场景:建立socks代理,proxychains+Nmap扫描内网。

1)直接在webshell下执行,通过系统自带命令或上传脚本工具进行扫描探测 ;2)通过反弹shell进行内网渗透,msf等渗透测试框架自带一些扫描模块;3)通过socks代理扫描内网(例如 proxychains+Nmap扫描)。

在合适的场景下,选择最合适的武器。比如支持存活探测的协议,包括了 ARP、ICMP、SMB、 UDP、NETBIOS、SNMP协议等;支持端口扫描的方式,包括ACK扫描、SYN扫描、TCP扫描、UDP扫描、ICMP扫描等。


2、拟态项目简介

3、套接字通信

套接字(socket)为通信的端点,每个套接字由一个 IP 地址和一个端口号组成。通过网络通信的每对进程需要使用一对套接字,即每个进程各有一个。

创建 Socket,连接服务器,将 Socket 与远程主机连接。

服务端先初始化 Socket,建立流式套接字,与本机地址及端口进行绑定,然后通知 TCP,准备好接收连接,调用 accept() 阻塞,等待来自客户端的连接。

4、永恒之蓝原理

SMB 445端口。SMBv1版本。

是一种利用Windows系统的SMB协议漏洞来获取系统的最高权限,以此来控制被入侵的计算机。 SMB(全称是Server Message Block)是一个协议服务器信息块,它是一种客户机/服务器、请求/响应协议,通过SMB协议可以在计算机间共享文件、打印机、命名管道等资源,电脑上的网上邻居就是靠SMB实现的;SMB协议工作在应用层和会话层,可以用在TCP/IP协议之上,SMB使用TCP139端口和TCP445端口。永恒之蓝是在Windows的SMB服务处理SMB v1请求时发生的漏洞,这个漏洞导致攻击者在目标系统上可以执行任意代码。通过永恒之蓝漏洞会扫描开放445文件共享端口的Windows机器,无需用户任何操作,只要开机上网,不法分子就能在电脑和服务器中植入勒索软件、远程控制木马、虚拟货币挖矿机等恶意程序。

永恒之蓝依赖于一个名为srv!SrvOS2FeaListSizeToNt的windows函数。

第一个错误是当协议试图将OS / 2 FileExtended Attribute(FEA)列表结构转换为NT FEA结构以确定要分配多少内存时出现的数学错误。错误计算会产生整数溢出,导致分配的内存少于预期的数量,进而导致缓冲区溢出。如果写入的数据超出预期,则多余的数据可能溢出到相邻的存储空间中。

第二个错误是由于SMB协议对两个相关子命令:SMB_COM_TRANSACTION2和SMB_COM_NT_TRANSACT的定义不同而导致的缓冲区溢出。两者都有一个_SECONDARY命令,当单个分组中包含太多数据时使用该命令。TRANSACTION2和NT_TRANSACT之间的关键区别在于,后者需要一个数据包,大小是前者的两倍。如果客户端使用NT_TRANSACT紧接在前的子命令发送精心制作的消息,则会发生TRANSACTION2验证错误。虽然协议识别出两个分开的子命令已被接收到,其分配的类型和尺寸的数据包(并相应地分配内存)仅基于接收到的最后一个数据包的类型。由于最后一个较小,因此第一个数据包将占用比分配的更多的空间。

一旦攻击者实现了最初的溢出,他们就可以利用SMBv1中的第三个bug,该bug出现在SMB_COM_SESSION_SETUP_ANDX命令中:该命令的请求依赖于WordCount的值来确定具体的请求格式,当为12时和为13时红框中的变量会有所区别,利用该漏洞将12类型的请求包通过13类型进行处理,由于两种类型的请求包格式不一致,通过控制请求包指定偏移的数据,即可以控制SrvAllocateNonPagedPool创建的pool的大小,实现堆喷射,导致在指定地址分配内存,使得攻击者可以编写和执行Shellcode来控制系统。

防御

首先,确保更新并应用安全补丁MS17-10,其次禁用SMBv1,并且不使任何易受攻击的计算机访问互联网。

当前网络形势下,已出现疑似永恒之蓝病毒变种,例如:wannaRen的病毒,应对这些新的威胁,传统防护手段很难有效防范,安芯网盾内存保护系统通过硬件虚拟化技术对内存恶意行为进行监控,能够有效检测到内存中缓冲区溢出、堆栈溢出、部署shellcode、执行shellcode、等恶意行为,有效防护这类新威胁。

5、PsExec具体的实现

PsExec特点:

  • psexec远程运行需要远程计算机启用文件和打印共享且默认的Admin$共享映射到C:windows目录。

  • psexec建立连接之后目标机器上会被安装一个“PSEXESVC”服务。但是psexec安全退出之后这个服务会自动删除(在命令行下使用exit命令退出)。

PsExec详细运行过程:


    1. TCP三次握手,通过SMB会话进行身份验证。

    2. 连接admin$共享,通过 SMB 访问默认共享文件夹 ADMIN$,写入PSEXESVC.exe文件;

    3. 利用ipc命名管道调用svcctl服务,使用ipc通道并调用svcctl这个服务,这个服务能使我们开启指定的远程服务

    4. 利用svcctl服务开启psexesvc服务

    5. 生成4个命名管道以供使用。一个psexesvc管道用于服务本身,另外的管道stdin(输入)、stdout(输出)、stderr(输出)用于重定向进程。使用创建出来的命名管道来进行通信远程控制对方电脑。

作为渗透工具的缺点

  • 特征明显,psexec类工具会释放文件,市面上的杀毒软件基本都能检测到。

  • 执行过程中需要安装服务,会留下日志,容易通过溯源推测出攻击过程,并且退出时偶尔会出现服务不能删除的情况。

  • 条件限制,需要开启admin$ 445端口共享。

7.14shein笔试

网络工具

nbscan:用于扫描Windows网络上NetBIOS名字信息的程序。该程序对给出范围内的每一个地址发送NetBIOS状态查询,并且以易读的表格列出接收到的信息,对于每个响应的主机,NBTScan列出它的IP地址、NetBIOS计算机名、登录用户名和MAC地址。但只能用于局域网,NBTSCAN可以取到PC的真实IP地址和MAC地址,如果有”ARP攻击”在做怪,可以找到装有ARP攻击的PC的IP/和MAC地址。*但只能用于局域网*,NBTSCAN可以取到PC的真实IP地址和MAC地址,如果有”ARP攻击”在做怪,可以找到装有ARP攻击的PC的IP/和MAC地址。NBTSCAN可以取到PC的真实IP地址和MAC地址,如果有”ARP攻击”在做怪,可以找到装有ARP攻击的PC的IP/和MAC地址。总之,NBTSCAN可以取到PC的真实IP地址和MAC地址。

wvs: 顶级网站扫描工具的WVS。暴力破解,盲注和HTTP编辑功能;抓包;子域名挖掘;主机发现(发现同网段的主机); 网络爬虫;网站漏洞扫描。

文件上传

dos防护web服务器

目录遍历

目录遍历最大的危害是能够让任意用户访问系统的敏感文件,继而攻陷整个服务器。例如获取linux下的/etc/passwd文件后可能会破解出root用户的密码等。

nmap语法

反序列化

即黑客通过构造恶意的序列化数据,从而控制应用在反序列化过程中需要调用的类方法,最终实现任意方法调用。如果在这些方法中有命令执行的方法,黑客就可以在服务器上执行任意的命令。

Java 序列化是指把 Java 对象转换为字节序列的过程便于保存在内存、文件、数据库中,ObjectOutputStream类的 writeObject() 方法可以实现序列化。

Java 反序列化是指把字节序列恢复为 Java 对象的过程,ObjectInputStream 类的 readObject() 方法用于反序列化。

msf数据库创建

初始化 msf 数据库

msfdb init

nginx解析漏洞

增加/.php后缀,被解析成PHP文件,好好回去看看

Tookit

鱼叉式网络钓鱼攻击 网页攻击 传染媒介式(俗称木马) 建立payloaad和listener 邮件群发攻击(夹杂木马啊payload的玩意发给你) Arduino基础攻击 无线接入点攻击 二维码攻击 Powershell攻击

3389端口无法连接

1、服务器在内网。 2、做了tcp/ip筛选。 先执行下面cmd命令: cmd /c regedit -e c:1.reg HKEY_LOCAL_MACHINESYSTEMControlSet001ServicesTcpip,导出注册表里关于TCP/IP筛选的第一处 cmd /c regedit -e c:2.reg HKEY_LOCAL_MACHINESYSTEMControlSet002ServicesTcpip,导出注册表里关于TCP/IP筛选的第二处 cmd /c regedit -e c:3.reg HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpip”,导出注册表里关于TCP/IP筛选的第三处 然后回到c盘1.reg、2.reg、3.reg,把1.reg、2.reg、3.reg下载回来到自己的硬盘里面编辑一下,找到 EnableSecurityFilters这个字段看看dword后面的键值是否为00000000,如果为00000001就说明管理员做了 tcp/ip筛选,我们只要把1改成0就行了,2.reg和3.reg进行一样的修改。 (regedit参数为:/s 导入*.reg 文件进注册表(安静模式) /e 导出注册表文件) 3、做了ip安全策略或windows自带***。 执行cmd命令: cmd /c net stop policyagent 停掉IPSEC Services。执行cmd /c net stop sharedaccess停掉windows自带的***,然后再连3389。 4、管理员设置的终端登陆权限只有指定的用户可以。 5、***。

XSS CSRF XXE区别与防护

XSS是跨站脚本攻击,用户提交的数据中可以构造代码来执行,从而实现窃取用户信息等攻击。修复方式:对字符实体进行转义、使用HTTP Only来禁止JavaScript读取Cookie值、输入时校验、浏览器与Web应用端采用相同的字符编码。

CSRF是跨站请求伪造攻击,XSS是实现CSRF的诸多手段中的一种,是由于没有在关键操作执行时进行是否由用户自愿发起的确认。修复方式:筛选出需要防范CSRF的页面然后嵌入Token、再次输入密码、检验Referer

XXE是XML外部实体注入攻击,XML中可以通过调用实体来请求本地或者远程内容,和远程文件保护类似,会引发相关安全问题,例如敏感文件读取。修复方式:XML解析库在调用时严格禁止对外部实体的解析。

7.11虾皮安全工程师 挂经

1、简历疑惑

产出攻防技术文档:知识星球

2、协议https认证过程

面试30余家公司安全岗,呕心沥血总结面经(二)

第一步,爱丽丝给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法。

第二步,鲍勃确认双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数(Server random)。

第三步,爱丽丝确认数字证书有效,然后生成一个新的随机数(Premaster secret),并使用数字证书中的公钥,加密这个随机数,发给鲍勃。客户端继续发送Change Cipher Spec报文。用于告知服务端,客户端已经切换到之前协商好的加密套件(Cipher Suite)的状态,准备使用之前协商好的加密套件加密数据并传输了。客户端发送Finished报文。该报文包含连接至今全部报文的整体校验值(也就是HASH值),用来供服务器校验。

第四步,鲍勃使用自己的私钥,获取爱丽丝发来的随机数(即Premaster secret)。接着,服务器同样发送Change Cipher Spec报文。服务器同样发送Finished报文,用来供客户端校验。

第五步,爱丽丝和鲍勃根据约定的加密方法,使用前面的三个随机数,生成"对话密钥"(session key),用来加密接下来的整个对话过程。

面试30余家公司安全岗,呕心沥血总结面经(二)

握手阶段有三点需要注意。

(1)生成对话密钥一共需要三个随机数。

(2)握手之后的对话使用"对话密钥"加密(对称加密),服务器的公钥和私钥只用于加密和解密"对话密钥"(非对称加密),无其他作用。

(3)服务器公钥放在服务器的数字证书之中。

DH算法的握手阶段

整个握手阶段都不加密(也没法加密),都是明文的。因此,如果有人窃听通信,他可以知道双方选择的加密方法,以及三个随机数中的两个。整个通话的安全,只取决于第三个随机数(Premaster secret)能不能被破解。

虽然理论上,只要服务器的公钥足够长(比如2048位),那么Premaster secret可以保证不被破解。但是为了足够安全,我们可以考虑把握手阶段的算法从默认的RSA算法,改为 Diffie-Hellman算法(简称DH算法)。

采用DH算法后,Premaster secret不需要传递,双方只要交换各自的参数,就可以算出这个随机数。

面试30余家公司安全岗,呕心沥血总结面经(二)

第三步和第四步由传递Premaster secret变成了传递DH算法所需的参数,然后双方各自算出Premaster secret。这样就提高了安全性。

session的恢复

握手阶段用来建立SSL连接。如果出于某种原因,对话中断,就需要重新握手。

这时有两种方法可以恢复原来的session:一种叫做session ID,另一种叫做session ticket。

session ID的思想很简单,就是每一次对话都有一个编号(session ID)。如果对话中断,下次重连的时候,只要客户端给出这个编号,且服务器有这个编号的记录,双方就可以重新使用已有的"对话密钥",而不必重新生成一把。

随机数作用

"不管是客户端还是服务器,都需要随机数,这样生成的密钥才不会每次都一样。由于SSL协议中证书是静态的,因此十分有必要引入一种随机因素来保证协商出来的密钥的随机性。对于RSA密钥交换算法来说,pre-master secret本身就是一个随机数,再加上hello消息中的随机,三个随机数通过一个密钥导出器最终导出一个对称密钥。pre-master secret的存在在于SSL协议不信任每个主机都能产生完全随机的随机数,如果随机数不随机,那么pre-mastersecret就有可能被猜出来,那么仅适用pre-master secret作为密钥就不合适了,因此必须引入新的随机因素,那么客户端和服务器加上pre-master secret三个随机数一同生成的密钥就不容易被猜出了,一个伪随机可能完全不随机,可是是三个伪随机就十分接近随机了,每增加一个自由度,随机性增加的可不是一。"

如果黑客拦截了服务器把证书发送给客户端,并对证书进行恶意修改,会出现什么情况?

第一种情况,假如黑客只是单纯的修改数字证书中的内容,那么由于数字签名的存在,客户端会很容易的判断出报文是否被篡改。

第二种情况,黑客不仅修改了数字证书的内容,并且把数字签名替换掉了,由于黑客不可能知道CA的私钥,于是在客户端用CA的公钥进行解密的时候,解密之后得不到正确的信息,也很容易判断出报文是否被修改。

第三种情况,黑客恶意的从相同的第三方CA申请了一个数字证书。由于这个CA是真实存在的,所以客户端是可以用CA的公钥进行解密,得到了黑客提供的数字证书中的公钥。但是,由于数字证书在申请的时候,会绑定一个域名,当客户端比如说浏览器,检测到这个数字证书中的域名和我们现在网页访问的域名不一致,便会发出警告,此时我们也能得 知数字证书被替换了。

为什么最后客户端和服务端都要发送一个Finish报文?

上面已经提及,Finish报文是对至今全部报文的整体校验值(也就是HASH值)。当客户端把这个值通过得到的公钥进行加密的时候,服务器得到之后对其进行解密,然后再对全部报文进行一个HASH求值。如果这个值跟解密得到的值相等的话,那么说明客户端是可信赖的。 同样的,服务器发送这样的一个整体校验值,用来客户端验证服务器是否是真正要进行通信的那一个。 综上,这个Finish报文就是用来校验双方的身份的。

3、ssl pining

证书锁定(SSL/TLS Pinning)顾名思义,将服务器提供的SSL/TLS证书内置到移动端开发的APP客户端中,当客户端发起请求时,通过比对内置的证书和服务器端证书的内容,以确定这个连接的合法性。

握手环节仍然面临(MIM中间人)攻击的可能性,因为CA证书签发机构也存在被黑客入侵的可能性,同时移动设备也面临内置证书被篡改的风险。

中间人攻击的关键就是截获服务器返回的证书并伪造证书发送给客户端骗取信任,获取随机数3,进而达成盗取信息的目的。

4、加解密

对称:DES,AES,

非对称:RSA大素数分解,ECC离散对数,DH

加密模式:ECB,CBC,OFB,CBF,CTR

1、ECB(Electronic Code Book):

又称电子密码本模式:Electronic codebook,是最简单的块密码加密模式,加密前根据加密块大小(如AES为128位)分成若干块,之后将每块使用相同的密钥单独加密,解密同理。

特点:

(1)简单,有利于并行计算,误差不会被传送;

(2)同样的明文块会被加密成相同的密文块,不能很好的隐藏明文数据模式;

(3)加密消息块相互独立成为被攻击的弱点,不能提供严格的数据保密性,可以对明文进行主动攻击;

2、CBC模式: 密码分组链接(CBC,Cipher-block chaining)模式,每个明文块先与前一个密文块进行异或后,再进行加密。在这种方法中,每个密文块都依赖于它前面的所有明文块。同时,为了保证每条消息的唯一性,在第一个块中需要使用初始化向量IV。它的实现机制使加密的各段数据之间有了联系。 特点:

①不容易主动攻击,安全性好于ECB,适合传输长度长的报文,是SSL、IPSec的标准;

②每个密文块依赖于所有的信息块,明文消息中一个改变会影响所有密文块;

③发送方和接收方都需要知道初始化向量;

④主要缺点是加密过程是串行的,无法被并行化,因为在加密时,明文中的微小改变会导致其后的全部密文块发生改变,而且消息必须被填充到块大小的整数倍。而在解密时,从两个邻接的密文块中即可得到一个明文块。因此,解密过程可以被并行化,而解密时,密文中一位的改变只会导致其对应的明文块完全改变和下一个明文块中对应位发生改变,不会影响到其它明文的内容。

5、流量分析?

6、xss除了能盗用cookie还能做啥,javascript,beff

挂马

7、SQL注入

防御

宽字节

二次注入

8、SSRF防御

9、文件上传

前端还是后端?

不执行:文件服务器,防目录穿越,执行权限禁掉

10、内外网渗透流程

11、andriod安全

7.1奇安信 安全研究员 成都

1、基本情况 学校,职业规划(渗透,研究)

2、流量分析

日志分析,协议分析

网络流量分析既指特定用途的硬件设备(如绿盟的NTA),也指基于网络层的安全分析技术,在FWIDSIPS中很常见。相比于主机层、应用层是以日志、请求等为分析对象,流量分析面对的是更底层的网络数据包,所包含的信息元素更多,但是分析起来也更加生涩。流量分析已被应用于多个领域,如带宽资源的合理性管控、网络链路排障以及本文所要探索的安全攻防领域。

高性能网络IO,特征匹配引擎,网络传输

[1、 网络层 ] a) DDoS检测防护:目前应用最为成熟的领域, b) Web漏洞防护:基于机房出口的流量牵引,对业务接入成本最低,因为并不需要业务更改域名指向或者安装Agent插件。

c) 基于网络层的阻断:理论上,所有基于IP的流量管控拦截都可以通过这套体系实现。比如针对特定端口请求的常态拦截,防止运维同学手抖操作开放了高危端口;针对0day漏洞的虚拟补丁机制,为下游业务升级版本赢得时间窗;甚至将能力开放给到业务自助操作,从机房入口层级屏蔽业务上来自某些恶意源的异常访问、请求限速等(图示为宙斯盾的网络流量阻断配置)。

[2、 主机层 ] a) 入侵回溯:传统的主机安全检测响应EDR系统,通过Agent方式采集主机日志、命令操作等信息,然后上报到控制中心进行策略建模,从而发现主机入侵威胁。比如高风险命令注入执行,单纯基于主机端数据仅能知道发生了什么,若同时能在流量层面针对这些强特征命令字进行检测,进一步关联,就能溯源到攻击者是如何利用的。此外,流量层的检测能力,也能与主机层发现互补,形成多个铃铛的告警能力。

b) 木马通信:比如ICMP木马,进程也不会监听端口,对主机层检测能力提出更大挑战,甚至如上面提过的XDP,在协议栈之前对流量进行劫持处理,主机端tcpdump也无法抓取。而作为中间管道,在流量层进行检测分析,会是更好的补充手段。

[3、 应用层 ] a) 网络资产搜集:安全工作的前置步骤是对资产大盘的全面搜集和掌控。以漏洞扫描为例,传统方法是依靠流程和系统,让业务侧主动登记上报,再配以爬虫,但会存在漏的问题,影响覆盖率。 b) 高危资产主动发现:高危端口、高危组件和高危服务的对外开放占据了漏洞攻击的很大一部分口子,传统方法是靠主动扫描来感知,存在扫描周期和扫描被屏蔽的问题。而通过流量则可以较好的解决上述问题,内部团队曾经复盘一起安全事件,业务高危端口从对外开放到被探测利用的时间只有45秒,针对资产数量较多的大中型企业来说,很难在45秒内完成一轮扫描,而通过流量建立相关通信特征的检测,则可以实现秒级响应。及时的捕捉到这些高危通信行为,让安全团队迅速卷入,收敛风险。实现上单纯依靠入流量还不够,网络上的大量扫描和探测会带来误报,提高运营成本,结合出流量的回显关联,则能较好的解决误报问题。

c) 脆弱点/漏洞主动发现:漏洞扫描一般重点关注在对特征类漏洞的发现,发送特定构造参数或payload以触发是否存在漏洞,对于业务层面的不合规行为或者逻辑类漏洞则覆盖不足,比如敏感信息明文传输、越权、管理后台类等,这些场景却是流量分析大显身手的地方。

[4、 云时代安全能力 ] 如果流量足够多、类型足够丰富,那基于流量层面进行威胁情报建设、pdns积累、0day发现等都有实践意义,目前我们也在进行相关尝试。

3、事件分析

根据漏洞,分析受影响严重程度,威胁情报分析APT。资产测绘。提需求(需要什么数据:IP,DNS),分析(溯源),报告。

*安全信息 + 研判 = 威胁情报*

任何未经研判的安全信息,都不能称之为“威胁情报”。威胁情报用于辅助支持决策或者安全分析,未知来源和真实性的安全信息将影响决策的正确性和分析结果的准确性。

3、简历与流量分析事件分析不相关,谈谈想法

4、基础知识

什么是IP?

IP是Internet Protocol(网际互连协议)的缩写,是TCP/IP体系中的网际层协议。设计IP的目的是提高网络的可扩展性:一是解决互联网问题,实现大规模、异构网络的互联互通;二是分割顶层网络应用和底层网络技术之间的耦合关系,以利于两者的独立发展。根据端到端的设计原则,IP只为主机提供一种无连接、不可靠的、尽力而为的数据包传输服务。

Ip地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。是一种在Internet上的给主机编址的方式,也称为网际协议地址。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

IP和域名?

ip地址与域名是一对多的关系。一个ip地址可以对应多个域名,但是一个域名只有一个ip地址。ip地址是数字组成的,不方便记忆,所以有了域名,通过域名地址就能找到ip地址。

SYN是啥?

SYN:同步序列编号(*Synchronize Sequence Numbers*)。是TCP/IP建立连接时使用的握手信号。在客户机和服务器之间建立正常的TCP网络连接时,客户机首先发出一个SYN消息,服务器使用SYN+ACK应答表示接收到了这个消息,最后客户机再以ACK消息响应。这样在客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和服务器之间传递。事实上SYN攻击并不管目标是什么系统,只要这些系统打开TCP服务就可以实施。

TCP之所以可靠,是因为它保证了传送数据包的顺序。顺序是用一个序列号来保证的。响应包内也包括一个序列号,表示接收方准备好这个序列号的包。

MAC是啥?

MAC地址英语:Media Access Control Address),直译为媒体存取控制位址,也称为局域网地址(LAN Address),MAC位址以太网地址(Ethernet Address)或物理地址(Physical Address),它是一个用来确认网络设备位置的位址。在OSI模型中,第三层网络层负责IP地址,第二层数据链路层则负责MAC位址 [1] 。MAC地址用于在网络中唯一标示一个网卡,一台设备若有一或多个网卡,则每个网卡都需要并会有一个唯一的MAC地址 。

ARP协议在几层?

在OSI模型中ARP协议属于链路层. 而在TCP/IP模型中,ARP协议属于网络层. OSI模型把网络划分为七层,IP地址在OSI模型的第三层,MAC地址在第二层,彼此不直接交流。. 在通过以太网发送IP数据包时,需要先封装第三层(32位IP地址)、第二层(48位MAC地址)的报头,但由于发送时只知道目标IP地址,不知道其MAC地址,又不能跨第二、三层,所以需要使用地址解析协议ARP,根据网络层IP数据包包头中的IP地址信息解析出目标硬件地址(MAC地址)信息,以保证通信的顺利进行。

ARP欺骗?

广播,在ARP回复时,发送请求包的主机A并不会验证ARP回复包的真实性,也就是不能判断回复主机A的是不是主机B。由此引出一个局域网攻击方式ARP欺骗。

TCP,UDP区别

三次握手为啥不是两次?双工,客户端确认发送与接收成功。服务器确认发送与接收成功。相互确认发送与接收正常。

DNS协议?

人们可以直接访问 wikipedia.org 来代替 IP 地址,然后域名系统(DNS)就会将它转化成便于机器识别的 IP 地址。通过域名去查询域名服务器,得到 IP 地址的过程叫做域名解析


原文始发于微信公众号(猪猪谈安全):面试30余家公司安全岗,呕心沥血总结面经(二)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年3月15日03:54:10
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   面试30余家公司安全岗,呕心沥血总结面经(二)https://cn-sec.com/archives/1605411.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息