面试题整理
能否说出对称加密与非对称加密的主要不同点
对称加密通信双方使用协商好的同一密钥进行加密解密,非对称加密通信双方使用密钥对进行加解密,一个公钥,一个私钥,公钥加密的数据通过私钥解密,私钥加密过的数据通过公钥解密。公钥用来解密,私钥用来做身份验证。
常见对称加密算法
DES
3DES 使用三条密钥加密
AES
对称加密中分组加密与流式加密的区别
非对称加密均属于分组密码
流密码又称为序列密码,以序列的方式加密,首先将种子密钥通过算法生成一个密钥流,这个一个良好的伪随机数。然后按比特与明文流按照加密算法进行加密变换。加密过程中的密钥流由种子密钥通过密钥生成器产生。
加密过程
种子密码->随机数发生器->密钥流
明文流->(通过密钥流)->加密变换->密文流
又分为同步密钥流与自同步密钥流
分组加密
又称块密码,在进行加密时,先将明文编程二进制续流,然后将其编程若干个固定长度的分组,不够长度的用0进行填充到固定长度。然后逐个分组依次进行加密操作。分组长短影响密码强度,分组长度不能太短也不能太长。既要便于操作与运算又要保证密码的安全性。明文分组的长度可以与密钥分组的长度不一致,当明文分组长的时候,即带数据压缩功能,增加了解密的复杂度,当明文分组短的时候,增加了资源的消耗。每一个明文分组使用的时同一个密钥
加密过程
明文分组m->通过密钥k加密变换->密文分组c->通过密钥k解密变换->明文流分组。如果在一定周期后密钥重复,那么称为周期流密码,否则为非周期流密码
分组密码每次只能处理一个固定长度的明文,不足还需要补全,分组密码的体制一般首先将M‘进行填充得到消息M,使其长度为固定分组长度L的整数倍。而流密码加密时不一定得到相同的密码,因为明文的重复部分是使用密钥流的不同部分加密的。对于分组密码,在一个固定的密钥的作用下,对相同的明文加密,一定能得到相同的密文。
说出一种流式加密算法
说出一种非对称加密算法
RSA
RSA与DH——Merkle-Hellman都是基于非对称的加密算法,有什么不同吗
dh算法会在通信双方各生成一对密钥,即有两对密钥,而且它是动态的。rsa只包含一组密钥,而且是静态的,即一旦生成密钥就不会更改,除非显式得替换
MD(Message Digest)算法的中文是什么?是加密算法吗?
信息摘要算法,不是加密算法,经过该算法加密的数据会形成唯一的签名来标识这段数据,避免了数据被伪造的可能。不是一种加密算法,它的过程是不可逆的。
base32/base64/rot13是加密算法吗
不是,只是一种数据编码方式,rot13—-回转13
网络模型有几层
iso七层参考模型—应用层、会话层、表示层、传输层、网络层、数据链路层、物理层
tcp/ip五层模型——应用层、传输层、网络层、数据链路层、物理层
四层模型———应用层、传输层、网络层、网络接口层
三次握手的过程
四次挥手的过程
ICMP协议属于哪一层协议
网络层 网络探测与跟踪协议
http请求方式
get post put delete trace connection head options patch
host头作用
标识要请求的主机
referer作用
标识从哪个网页过来的,用来防盗链
https密钥交换过程
客户端发送hello包,包括tls版本,加密方式列表,一个随机数
服务器发送hell包,确认使用tls的加密列表,一个随机数
服务器发送公钥证书,
客户端使用根证书验证公钥证书,如果能够解密,则会发编码改变消息,再发送一个随机数,并把对称密钥发过去,
服务器也发送一个编码改变消息,表示后面发送的消息都是加密之后的消息
DNS是什么,采用什么协议通信
域名系统。tcp udp协议都有,五层协议是dns协议
dns工作流程
首先在浏览器缓存里面找、然后到主机缓存里面找、再到hosts文件里面找、再到本地域名解析器里面找、如果配置了转发器,则到上一级域名服务器里面找,如果没有则到根服务器里面找,根服务器告诉顶级域服务器地址,顶级域服务器告诉二级域服务器地址,依次迭代,直到找到或者超时。
顶级域名是什么TLD?有效顶级域名ETLD是什么
最高级的域名,域名的最后一部分,分为通用性域名与国家顶级域名
如github.io这一类域名,只用顶级域名不能表示,于是使用了有效顶级域名,即顶级域名加他的前一部分。
防火墙是什么?waf是什么?iptables属于哪一种
防火墙是用来做流量过滤的,又分为软件防火墙、硬件防火墙;代理防火墙、状态检测防火墙、透明防火墙,主要工作在三层以上,可以根据协议、端口号、地址等对流量进行拦截过滤。waf指web应用防火墙,可以检测数据包内容,最要是用来防病毒、木马的。iptables属于软件防火墙。
iptables能根据mac地址指定规则吗?
能
桥接是什么,NAT是什么
两台机器公用一张网卡,nat——网络地址转换协议,分为端口映射与端口复用两种,端口复用负责对内网的ip地址做转换,端口映射负责对讲外网访问的地址转换为内网服务器地址。
SOP CORS CSP
SOP 同源策略,同源策略是浏览器的基础,它建立了不同资源之间互相访问的标准,保证了资源的安全性。通过域名、端口、协议类型来判断是否同源
cors 跨域资源访问 因为同源策略的限制,如果我们有一个正常的需要跨域的请求,那么就不能实现,于是有了sors,通过http响应头部的acao、acam等字段规定哪写来源的请求是可以访问该资源的。这个判断是在浏览器 端发生的。
CSP内容安全策略,通过content-security-policy字段来指定哪写来源的js资源是可信的,能够一定程度上防止xss
sql注入原理
用户输入得参数直接进入sql查询语句,恶意代码破坏了sql语句原有得结构,导致了非预期的查询结果。
sql注入的常规防御方法
预编译技术、过滤sql关键字、过滤引号、数据转义、数据编码
是否知道预编译查询
知道,通过将sql语句预编译为字节码,将要输入的参数部分用问号占位,生成一个预编译语句,用户的所有输入都将被当作一个完整的字符串
sql语句中哪写部分不能使用预编译?为什么?怎么解决
sql语句的结构部分不能使用预编译语句,如要查询的字段名、表名部分。
过滤
按注入方法分,有哪写类型
联合查询注入、时间盲注、布尔盲注、报错注入、堆叠注入
什么是宽字节注入
如果mysql数据库配置了set names 或者 set_client_charset为gbk gb2312 big5这类的宽字节编码则可能存在宽字节注入。宽字节分为高字节与低字节两个部分,当后端的过滤策略中是对特殊符号进行转义那么转义符的十六进制表示正好在宽字节的低字节区,那么我们只需要找一个高字节区的编码与转义符结合,那么单引号等特殊字符就逃逸了出来。gbk的高字节区的范围为%81-%ef
如果不能使用引号怎么写出文件
使用十六进制编码、base64编码的方式写出
sql注入的过程
怕段闭合符、判断字段数、有无回显、有回显,select语句使用联合查询注入、非select语句使用报错注入、无回显使用布尔盲注、时间盲注、dnslog等方式
udf mof提权
前提是已经获得了一个webshell能够执行基本的mysql命令。对目标目录具有写的权限。
udf提权 用户自定义函数提权,导入动态连接库、导入函数、执行函数
mof提权,利用nullevt.mof文件以system什么执行的特性,将我们的脚本写到这个文件中进行提权。
非关系型数据库是否存在注入问题,什么情况下会发生mongodb注入
存在。当我们像mongodb传入的参数为一个数组的时候,如
?id[a]=123
经过mongodb解析后变成
db.test.fin({id:{a:123}})
如果a是一个操作符呢?
db.test.find({id:{$ne:123}})
注入发生了
redis是否存在注入问题
存在,未授权访问漏洞
redis getshell原理,为什么能写入文件
常见getshell方法有webshll 定时任务 开启启动项 ssh免密登录。redis默认以root身份运行。
XSS漏洞原理
用户的输入没有经过过滤被直接得输出到浏览器页面中,恶意的输入破坏的原有的dom结构,导致js代码得以执行。
XSS常见类型
反射型、存储型、DOM型
uxss/mxss
uxss 通用性xss,与传统型xss不一样,通用性xss利用的是浏览器本身的漏洞或者插件的漏洞,这些插件往往拥有很大的权限,不受同源策略的限制。所以即便是本身没有漏洞的网站因为这些有问题的插件的存在而存在xss问题
mxss 突变xss,用户正常的输入经过浏览器的多次渲染产生了不可预测的结果。其出现必须满足的一点就是,用户的输入两次出现在innerhtml中。常见的有反单引号破坏结构、引号转义等
常见防御方法
过滤特殊字符,敏感标签,开启xss-filter与csp、转义、实体编码、http-only
csp是什么,如何防御的xss
内容安全策略,通过提供白名单的方式,指定哪写来源脚本可以被执行
xss危害
网站钓鱼、身份伪造、键盘记录、未授权操作、xss warm
csrf原理
利用可浏览器对于用户的信任,实现一些非用户本人意愿的操作。用户访问带有恶意请求的url的时候,浏览器处于对用户的信任,携带存储在本地的该网站的cookie访问,从而导致不被预期期望的操作,如非法转账、删帖等
如何检测
是否有tooken
是否校验了referr
x-forward-url字段是否使用了正则
是否使用了samesite
自定义属性验证
是否使用了验证码
常规防御方法
上一个题目就是
samesite是什么
samesite—-同站、出现在cookie中,表示,只能在访问同一个站点的时候才发送cookie,那么什么是同站呢?所谓同站即etld+1 有效顶级域名加上它前面的一部分就是同站。也就是说不校验协议类型与端口号。有些严格的也会校验协议类型。防止csrf攻击
samesite与sameorigin区别
sameorigin校验协议、端口号、域名三个部分,主要用作防御xss攻击。只有同源的资源才能互相访问。
samesite简要域名部分,主要用来防御csrf攻击,制用同站的网站才能发送cookie,不同站的不发送
ssrf原理
服务器提供了访问其他url的接口,但未对输入做严格的过滤,导致攻击者可用这个接口访问内网资源,等。
常见发生场景
翻译、收藏、分享等场景
如何检测,外带dns一定准确吗
通过抓包软件,查看流量是否由客户端发送否则未服务端发送。
查找url page display等关键字
防御方法、无法使用域名白白名单怎么办、dns重绑定怎么办
限制使用的协议类型,限制ip,限制域名,
限制协议、使用ip、使用黑名单
java是否由有ssrf问题
ssrf具体怎么利用,常见绕过方法
gopher ftp dict file等协议用于读取本地敏感文件,探测内网主机存活情况、端口banner信息。
用户名
十进制编码
点好使用句号代替
加上根域名
使用?
dns rebinding
使用短域名
使用xip.io
XXE原理
web程序提供了解析xml语句的接口,利用这个接口,我们可以执行我们自己的恶意代码。
常规防御方法
关键字过滤
不允许使用外部实体
或者干脆不使用该接口
涉及协议,为什么使用ftp协议外带数据而不使用http
http
ppt://filter
file
攻击过程,会读取哪写文件
首先判断是否由注入点,通过珠宝观察数据类型是否符合xml格式,若是,则可能存在。
读取系统铭感文件、中间件配置文件、数据库配置文件等
越权的类型
水平越权
垂直越权
常规修复方案
判断操作用户是否对数据拥有操作权限
操作数据时添加where子句,限定只查询当前用户的数据
基于角色进行权限控制—-rbac
基于资源进行权限控制——
基于属性的权限控制——abac
基于第三方框架进行权限控制
知不知道rabc与abac dac自主访问控制 mac强制访问控制
RABC——-其基本思想是,对系统操作的各种权限不是直接授予具体的用户,而是在用户集合与权限集合之间建立一个角色集合。每一种角色对应一组相应的权限。一旦用户被分配了适当的角色后,该用户就拥有此角色的所有操作权限。这样做的好处是,不必在每次创建用户时都进行分配权限的操作,只要分配用户相应的角色即可,而且角色的权限变更比用户的权限变更要少得多,这样将简化用户的权限管理,减少系统的开销
ABAC——ABAC则是通过动态将一个或一组属性来判断是否满足设定的条件来进行授权判断。属性通常来说分为四类:用户属性(如用户年龄),环境属性(如当前时间),操作属性(如读取)和对象属性(如一篇文章,又称资源属性),可以看出配置非常灵活,能够满足几乎所有需求。
并发是什么意思,会造成什么影响
同一时间内多次发送http/tcp请求。当多个线程同时对同一个资源进行操作的时候因为执行顺序不可控的问题,可能导致非预期的bug,从而实现多次获奖、多次收获、多次获赠的目的。并发对数据的一致性与可用性的影响很大。
如何修复,乐观锁、悲观锁、死锁、活锁
对数据库操作进行加锁。
悲观锁认为每一次对数据的操作都会改变数据,所以操作数据前都会对数据进行加锁,其他线程就不能操作数据,但是查询操作不受影响。悲观锁会锁定数据,其他操作不会影响到被锁的数据,但是普通的查询没有影响,需要用到 for update语句
乐观锁则认为一般情况下数据不会发生冲突,只有在提交新数据的时候才对数据进行检查,如果发生冲突则返回错误让用户决定怎么做。实现乐观锁的方法是在数据表中增加一个version字段,每当数据更新的时候这个字段执行加1操作。这样当数据更改的时候,另外一个事务访问此条数据进行更改的话就会操作失败,从而避免了并发操作错误。
死锁
是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象死锁。 一种情形,此时执行程序中两个或多个线程发生永久堵塞(等待),每个线程都在等待被其他线程占用并堵塞了的资源。例如,如果线程A锁住了记录1并等待记录2,而线程B锁住了记录2并等待记录1,这样两个线程就发生了死锁现象。计算机系统中,如果系统的资源分配策略不当,更常见的可能是程序员写的程序有错误等,则会导致进程因竞争资源不当而产生死锁的现象。锁有多种实现方式,比如意向锁,共享-排他锁,锁表,树形协议,时间戳协议等等。锁还有多种粒度,比如可以在表上加锁,也可以在记录上加锁
活锁
活锁指的是任务或者执行者没有被阻塞,由于某些条件没有满足,导致一直重复尝试,失败,尝试,失败。
登录过程中会遇到什么安全问题
密码爆破、用户名枚举、验证码失效、弱密码、手机号轰炸、万能密码、身份伪造
针对短信的安全策略有哪写
限制单一设备、单一ip、单一手机号发送请求的次数
建立上述清单的黑名单
采用图形验证码
检测ip所在地与收集号归属是否匹配——-微信账号找回
输入手机号实名认证
检测手机号有效性
waf拦截
options请求,预发送请求从后端获取令牌。发送短信页面载入的时候,向后端请求令牌。发送短信时将令牌发回服务端对比。要确保令牌不能被获取。故需要对js进行混淆。
注册过程中会遇到哪写安全问题
恶意注册
重复注册
覆盖注册
找回密码过程中会遇到什么安全问题,跨步骤找回,交叉session找回
身份冒用,用自己的手机接受验证码,验证码发出后,填写他人的账号,修改了他人的密码。即
邮箱弱token:找回密码链接token被猜解到
返回凭证:用户凭证被包含在响应数据包中,从而可以直接携带这个凭证登录,绕过了验证逻辑
用户凭证暴力破解:凭证简单,没有对尝试次数做限制,或者后台验证逻辑被猜解出来,从而绕过次数限制
用户凭证有效性
验证码的有效性,却没有对验证码和手机号码做绑定验证
安全手机重新绑定
凭证有效性
服务器是否开启了验证
跨步骤找回
注入
token生成可控
session覆盖
OAuth 2.0授权码模式的认证过程
该认证的目的是是否允许第三方的应用代表用户获得访问权限。
OAuth2.0是一种允许第三方应用程序使用资源所有者的凭据获得对资源有限访问权限的一种授权协议
oauth2.0有四种认证方式,授权码认证 简化模式认证 密码模式认证 客户端模式认证。
授权码认证过程
客户端点击请求认证按钮表示开始认证,浏览器弹出认证窗口,用户点击允许,认证服务器生成授权码,并重定向到我们的窗口。开始同步资源
- 注册app,需要进行auth认证的网站需要先到目标网站注册,注册成功后方可进行oauth认证
- 用户向浏览器发起访问请求,浏览器询问是否连接到auth服务器,用户点击是,进入到认证过程
- 浏览器代替用户向认证服务器发送请求,携带注册app时认证服务器生成的客户端id与重定向url,认证服务器询问客户确认消息,是否确认让该王章访问。用户点击是,完成认证。
- 认证服务器重定向到上面提交的重定向url,并向请求认证的服务器返回一个认证码,auth-code。
- 请求认证的服务器携带认证码、客户端ip、客户端密码访问token endpoint服务器,该服务器返回一个access_token给请求认证的服务器。
- 请求服务器携带access_token访问服务器资源。该服务器收到access_token后向认证服务器验证该access_token,认证服务器返回用户名及权限等。资源服务器向请求认证的服务器提供资源,该服务器再发送给用户。
- 在授权码方式下,ACCESS_TOKEN 只会存在我们网站的服务器里,用户端从始至终都获取不到这个信息,我们不必害怕用户的电脑中毒了而导致 ACCESS_TOKEN 泄露。
简化认证—-不使用clietn_secret,不适用认证码进行中转,访问token保存在客户端。
- 注册
- 浏览器告知服务器要连接到认证服务器,服务器询问是否连接,用户点击是。
- 浏览器向认证服务器发起认证请求,携带客户端id以及重定向url。认真服务器发起询问,是否允许请求夫区其访问。
- 客户端确认后,认证节点将访问token返回给客户端。
- 客户端携带access_token访问资源服务器,资源服务器向认证节点确认access_token,返回用户名,权限等信息。资源服务器返回资源到客户端。
OAuth会有什么安全问题?token外带、csrf、url跳转
redirect_url篡改
如果state参数来静态,或者不存在则可能存在csrf
支付过程中会有什么安全问题?金额篡改、购物车篡改、优惠券重用
苹果坏账
receipt-data被重复使用。客户在苹果商店购买产品后,苹果公司扣款成功后会发回一个receipt-data,正常的流程应该在服务端验证这个receipt-data的有效性与唯一性,但有些商家为了偷懒,在客户端只验证了器有效性,并没有验证其唯一性,导致了重复刷单的问题。这部分多出来的流水,苹果公司是不会分账的。
还有信用卡黑卡刷单、外币卡折扣赚差价、苹果对小额消费不做验证过程的36技术。
描述第三方支付流程
三方支付要经过产品层、核心层、网关层、最后到达渠道测
网关层主要是封装各个渠道的差异,呈现统一的接口,然后提供给上层系统调用。同时路由一般也维护在网关层,路由一般分为人工路由与规则路由。职工路由指运营人员指定支付渠道与产品之间的映射关系,规则路由则是按照业务要求设置各种路由规则。
核心层:一般包括会员系统、风控系统、收费系统、订单系统、清算系统、财务系统、签约系统等
产品层:通过核心层提供的服务组合起来,答题可分入金类产品,出金类产品
运营直撑层:直撑系统是一个公司提供给支付系统运行的基础设施,包括以下子系统:运维监控、日志分析、短信平台、安全机制、统计报表
suid什么意思,被设置为suid标志位的程序就能以root身份执行了吗
set user id 不能 ,设置了suid的文件只是让其他用户获取了要操作文件所有者的权限
如何查看当前主机ip 开放端口 进程列表
linux: ifconfig ip a ss netstat ps
windows: ipconfig netstat tasklist
如何查看一个进程打开/读写的文件
lsof -p pid
系统疑似被入侵,需要检查哪写日志
/var/log/secure 登录日志,凡是与系统有关的登录信息都在这里
/cat /etc/passwd 检查是否由异常的用户
/var/log/cron 计划任务
/var/log/btmp 错误登录日志
/var/log/wtmp 所有的登录用户信息
/var/log/utmp 当前登录用户信息
什么叫正向连接、什么叫反向连接、主机不能访问公网怎么办
CDN域名,如何获取真实IP
子站猜解 如果子站与主站在同一个C段,我们可以先获取子站的ip,然后再枚举主站。
让网站主动连接我们,
查找历史dns解析记录,也就是,使用cdn前的记录
网络空间搜索
利用其他漏洞
多地ping
docker未授权访问
docker remote api 再docker swarm开启了2375端口监听容器状态的时候,会调用这个api,如果其暴露在公网上,我们就可以使用docker客户端直接连接它,然后执行我们的命令getshell,最常见的利用就是新建一个容器,将宿主机的根目录挂载该容器中的某一个目录下,然后向宿主机的/root/.ssh中写入攻击机的公钥实现免密登录。
docker里的特权模式指什么
特权模式在6.0版本的时候被引入Docker,其核心作用是允许容器内的root拥有外部物理机的root权限,而此前在容器内的root用户只有外部物理机普通用户的权限 docker run –privileged
获得了一个低权限的shell,如何提权,有什么常用工具吗
内核提权
sudo提权
suid提权
linux配置错误提权
定时任务提权
密码复用提权
第三方服务提权
当发现一个webshell,如何快速排查
遇到请求加密怎么办
加密算法在so里怎么办,混淆了无法自己实现怎么办