网络安全常见面试题
计算机网络
OSI模型和TCP/IP体系结构?
OSI模型:从下到上为物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。
TCP/IP结构:从下到上为网络接口层,网际层,传输层,应用层
TCP/IP的三次握手和四次挥手过程,且为什么要这样?
三次握手
客户端给服务器发送数据:
客户端给服务器发送SYN包,询问是否可以进行连接
服务器若可以进行连接,回复SYN+ACK包
客户端回复一个ACK包,连接建立
四次挥手
处于连接状态的客户端给服务器发送数据:
客户端首先给服务器发送一个FIN包,表示要关闭连接。
服务器接收到FIN包后,给客户端发送一个ACK包,代表已经接受了关闭连接的请求,但是未传输完的数据仍要继续传输。
当传输数据传输完之后,服务器给客户端发送一个FIN包。
客户端给服务器回复一个ACK包,中止连接。
为什么这样?
为了建立可靠传输,解决信道不可靠的问题。
私有IP的地址划分
分为三类:
A类:10.0.0.0-10.255.255.255
B类:172.16.0.0-172.31.255.255
C类:192.168.0.0-192.168.255.255
TCP和UDP的区别和优缺点
UDP:
基于无连接的
不可靠的,只是发送数据包,不考虑对方能否接受到
用于即时性要求很高的场合
TCP:
面向连接的,可靠的
发送字节流,对方一定要接收到且不能保证丢失数据。
常用:流量控制、超时重传、拥塞控制等机制来保证可靠传输。
建立连接需要消耗时间和资源。
正向Shell和反向Shell的区别?
正向shell:攻击者连接被攻击机器,攻击者处于内网,被攻击机器处于外网的情况。(上传webshell,进行连接)
反向shell:被攻击者主动连接攻击机器,被攻击者处于内网,攻击者处于外网。(反弹shell)
正向代理和反向代理的区别?
正向代理:客户端将数据发送给代理,代理把数据发送给服务器。
服务器无法感知客户端是谁。
反向代理:假设内网有一台web服务器,客户端无法直接访问内网。那么,我们可以将web服务器反向代理到外网的nginx服务器,此时客户端访问nginx服务器,就访问到web资源了。
客户端无法感知服务器是谁。
提高服务器的安全性。
常见防火墙种类
Web应用防火墙
包过滤防火墙
代理防火墙
状态检测防火墙
HTTP和HTTPS的区别?
HTTPS协议需要用到证书(公钥和私钥),HTTP不需要。
HTTP信息明文传输,HTTPS信息加密传输。
HTTP端口80、HTTPS端口443。
HTTPS协议基于SSL+HTTP协议比HTTP更加安全。
HTTPS工作原理?(非对称加密和对称加密结合)
客户端发起https请求,连接到服务器的443端口
服务端生成证书(私钥和公钥)
传送服务器的公钥
客户端解析公钥,验证公钥是否有效,如果无效,提示证书存在问题,如果有效,那么客户端生成一个随机值(私钥)用服务器的公钥加密,传输到服务器上。
服务器将加密后的值用自身的私钥解密,得到客户端的私钥,然后将明文通过客户端的私钥进行对称加密。
服务器将密文进行传输
客户端用自己之前生成的私钥解密传过来的信息,获取了解密后的内容。
在上述过程中,用非对称加密传输密钥,确保安全性。用对称加密来加解密数据,速度快。
系统(Windows及Linux)方面常问
如何手工判断对方操作系统?
修改url参数,改成大写,正常为Windows,不正常为Linux
ping服务器,看TTL值
看数据包,如果数据包中存在IIS,肯定Windows。
Windows和Linux查看开放端口和运行服务的命令?
Windows:
开放端口:netstat -ano | findstr 关键字
查看正在运行的服务:net start
Linux:
开放端口:netstat -tuln | grep 关键字
查看正在运行/不运行的服务:service –status-all | grep +/-
Windows或Linux被植入后门文件,讲一下你的排查点
查看日志
查看是否存在异常用户
查看异常/隐藏进程
查看系统文件的时间是否被改动、系统文件的内容是否被改动
检查网络
检查计划任务
检查后门程序
检查系统服务
…
Web安全
OWASP TOP 10
注入(SQL注入、表达式注入等)
失效的身份验证
– 无验证
– 验证脆弱
– 验证可绕过
敏感数据泄露
– 身份证、电话号码、姓名、学号、密码等泄露
– 抓包,后端将全部内容返回,前端只取了一部分
XML/XXE
– 外部实体引入导致RCE等漏洞
失效的访问控制
– 越权、未授权访问
配置不当导致漏洞
– IIS PUT漏洞
XSS
– 用户可以对页面内容进行改变,写入恶意JS语句
反序列化漏洞
– 用户根据序列化字符串,构造恶意对象,当反序列化之后,就会调用魔术方法,从而导致RCE、信息泄露、getshell等
第三方组件、框架漏洞
– Weblogic、Shiro、Spring、Log4j等组件出现漏洞,导致网站被入侵。
不足的日志和监控
– 日志收集不足、缺陷检测时间过长导致黑客入侵无法被溯源反制。
SQL注入原理的种类?防御?预编译原理?
原理?
服务器在接收客户端的数据时,由于没有对数据进行过滤,导致未过滤的数据被拼接到SQL语句中并执行。
种类?
数字型
字符型
联合注入
布尔注入
延时注入
报错注入
二次注入
堆叠注入
宽字节注入
HTTP头注入
修复?
预编译
正则表达式过滤
开启魔术引号,对特殊字符加转义
装WAF
预编译原理?
将一次SQL语句的执行分为两次交互完成:
先发送SQL语句的模板,对于参数部分,用占位符代替,例如Mybatis中用?
对于客户端传递过来的参数传入到模板中,仅仅被当作是字符串执行,因此杜绝了SQL注入的产生。
XSS的种类有哪些?区别?修复?
种类?
存储型
反射型
DOM型
原理/区别?
XSS就是js代码。XSS本质就是输入和输出。用户可以控制输入的内容,服务器如果对输入的内容没有经过任何过滤,那么用户就可以构造恶意XSS从而对html页面进行改变,对用户进行攻击。
存储型:将js代码存储到了数据库中,当用户访问了带有恶意js代码的页面时,js代码就会从数据库中调取出来,从而被加载到页面中执行。
存储型比反射型危害更大,因为会一直存储在数据库中。
只要用户访问了恶意页面,就会收到攻击。
不需要用户的配合。
常出现在用户留言板等业务中
反射型:常出现在url中,攻击者构造带有XSS的恶意链接,欺骗用户点击,从而导致XSS。
反射型XSS一般都是一次性的
需要用户配合(配合社工)
用户正常访问不会受到XSS。
DOM型:上述提到的输入,处理,输出都是在前端完成。
修复?
开启http-only,防止cookie盗取
过滤JS标签
对于输入的数据进行转义等(魔术引号)
装WAF等
XSS,CSRF,SSRF区别?
XSS:跨站脚本攻击
CSRF:跨站请求伪造
SSRF:服务器端请求伪造
XSS:服务器对于用户的输入过滤不严,导致用户可以向html页面注入恶意js代码,当用户访问页面时,浏览器就会解析恶意js代码,从而导致危害。(突出点在于js代码)
CSRF:胁持用户浏览器强制做出某些行为。(突出点在于行为,发送数据包)在这个过程中,攻击者会利用用户对已知站点的信任,在用户不知情的状态下,执行相关行为。
SSRF:服务器代替攻击者去请求url中的数据,如果url为内网地址,那么攻击者就相当于挟持了服务器的身份来访问内网的内容。
什么是XXE漏洞?
XXE即XML外部实体注入漏洞,当应用程序解析XML输入时,没有禁用外部实体的加载,导致可以加载恶意外部文件,造成命令执行、SQL注入、信息泄露、带外执行等。
PHP反序列化?
攻击者根据类和序列化字符串,构造恶意对象,当反序列化之后,就会调用魔术方法,从而导致RCE、信息泄露、getshell等
PHP反序列化通常都会使用魔术方法,当序列化字符串进行反序列化时,就会调用相应的魔术方法,从而导致RCE等。
如何构造?从源码中找到类,修改属性,通过PHP的serialize方法来产生序列化字符串。
Java反序列化?
Java中的ObjectOutputStream类的writeObject()方法可以实现序列化,其
作用把对象转换成字节流,便于保存或者传输,而ObjectInputStream类的
readObject()方法用于反序列化,作用就是把字节流还原成对象。
Shiro反序列化?
shiro反序列化主要是Apache shiro提供了一个remember的一个功能,用户登录成功后会生成经过加密并编码的cookie,保存在浏览器中方便用户的日常使用,而服务器对cookie的处理流程就是先获取浏览器上保存的cookie,然后将其bs64解码,再进行AES解密,再将其反序列化进行校验,而漏洞就是出现在这里,我们都知道AES它是一个硬编码,他是有默认密钥的,如果程序员没有去修改或者过于简单,那我们就可以进行cookie重构,先构造我们的恶意代码,然后将恶意代码进行序列化,然后AES加密(密钥我们已经爆破出来了),再进行bs64编码,形成我们新的cookie,而服务器在处理时就会按照刚才的处理流程,就会在服务端触发我们构造的恶意代码。
如何发现某系统采用了Shiro框架?
手工:
尝试去登录,如果登录失败发现返回包存在rememberMe=deleteMe字段,那么就基本可以判断是Shiro框架。
工具:
goby
网络引擎
shiroscan
插件
原理:
未登陆的情况下,请求包的cookie中没有rememberMe字段,返回包setCookie里也没有deleteMe字段
登陆失败的话,不管勾选RememberMe字段没有,返回包都会有rememberMe=deleteMe字段
不勾选RememberMe字段,登陆成功的话,返回包set-Cookie会有rememberMe=deleteMe字段。但是之后的所有请求中Cookie都不会有rememberMe字段
勾选RememberMe字段,登陆成功的话,返回包set-Cookie会有rememberMe=deleteMe字段,还会有rememberMe字段,之后的所有请求中Cookie都会有rememberMe字段
业务逻辑漏洞的种类?
越权
未授权
支付金额修改
条件竞争
任意用户注册
任意用户登录
短信轰炸机
…
给你一个登录框,思路?
SQL注入
XSS
任意用户注册
任意用户登录
js分析,查看代码逻辑,查看是否存在信息泄露?
抓包
验证码爆破、轰炸、重用
弱口令,构造社工字典,爆破
未授权访问
看返回包返回的数据,是否存在信息泄露?
社会工程学
…
CDN和DNS区别?
CDN:内容分发网络,主要作用就是让用户就近访问网络资源,提高响应速度,降低网络拥堵。
DNS:主要作用就是将域名翻译成ip地址。
CDN检测和绕过思路?
检测?
超级ping
查看返回包,是否存在域名为cdn.xxx的文件,如果存在就是从CDN节点所请求的缓存资源。
绕过?
子域名绕过
国外ping
采用CDN脚本进行全网扫描
内部邮件泄露(反向连接的手段)
…
常见的中间件漏洞?
IIS:PUT漏洞、短文件名漏洞
Apache:解析漏洞、目录遍历等
Redis:未授权访问漏洞等
Nginx:解析漏洞、目录遍历、目录穿越等
Shiro:反序列化漏洞等
Tomcat:RCE漏洞、war后门文件部署等
JBoss:反序列化漏洞、war后门文件部署等
WebLogic:反序列化漏洞、war后门文件部署等
…
WAF绕过的手法?
信息搜集:
延迟,防止CC攻击检测
代理池
修改UA头等绕过黑名单,符合白名单
漏洞发现:
同上
漏洞利用:
参考各种Web漏洞的利用绕过方式
权限控制:
代码方面的免杀
传参绕过
变量覆盖
源码加密
异或绕过
…
行为方面的免杀
根据工具的流量特征,进行二次开发,从而达到免杀
命令无回显怎么办?
延时判断
DNSLog外带
监听http请求
写webshell
…
3389端口无法连接的情况?
端口改了
超过了服务器最大连接数
服务器在内网
端口关了
管理员设置权限,只允许指定用户登录
防火墙
常问的端口信息
21:FTP文件传输协议
22:SSH远程连接
23:TELNET远程登录
25:SMTP邮件服务
53:DNS域名系统
80:HTTP超文本传输协议
443:HTTPS安全超文本传输协议
1433:MSSQL
3306:MYSQL
3389:windows远程桌面服务端口
7701:weblogic
8080:TCP,HTTP协议代理服务器:Apache-tomcat默认端口号
6379:redis
…
什么是业务逻辑漏洞?说出至少三种业务逻辑漏洞。
逻辑漏洞是指由于程序逻辑不严或逻辑太复杂,导致一些逻辑分支不能够正常处理或处理错误。挖掘业务逻辑漏洞,需要对业务有深刻的理解。
拿支付漏洞来说,简单思路有价格修改,支付状态修改,数量最大值溢出,订单替换,支付接口替换,四舍五入,越权支付等等。
拿登录来说,修改状态信息,密码修改跳过验证等等。
密码找回漏洞中存在:1)密码允许暴力破解、2)存在通用型找回凭证、3)可以跳过验证步骤、4)找回凭证可以拦包获取。
身份认证漏洞中最常见的是:1)会话固定攻击、2)Cookie 仿冒。只要得到Session 或 Cookie 即可伪造用户身份。
验证码漏洞中存在:1)验证码允许暴力破解、2)验证码可以通过Javascript 或者改包的方法来进行绕过。
拿到webshell不出网情况下怎么办?
探测出网协议、如dns带外,icmp等
PHP代码执行/命令执行的危险函数
代码执行:eval()、call_user_func()等
命令执行:system()、shell_exec()、exec()、passthru()等
SSRF禁用 127.0.0.1 后如何绕过,支持哪些协议?
缩写绕过
进制绕过
dns重绑定
301重定向
…
.SVN/GIT源代码泄露?
在使用SVN管理本地代码过程中,会自动生成一个名为.svn的隐藏文件夹,其中包含重要的源代码信息
使用git进行版本控制,对站点自动部署。如果配置不当,可能会将.git文件夹直接部署到线上环境。这就引起了git泄露漏洞。
为何一个mysql数据库的站,只有一个80端口开放?
3306端口已经更改
站库分离,3306端口不对外开放。
注入时可以不使用and 或or 或xor,直接order by开始注入吗?
and/or/xor,前面的1=1、1=2步骤只是为了判断是否为注入点,如果已经确定是注入点那就可以省去这个步骤。
在有shell的情况下,如何使用xss实现对目标站的长久控制?
在后台的首页文件加一段js代码,将管理员的cookie发送到攻击者的服务器当中。这样的话,只要管理员不登出,那么攻击者就可以以管理员身份登录。
或者在登录界面加一段js代码,如果用户登录成功,那么就将用户名和密码发送到恶意服务器当中。(表单劫持)
目标站无防护,上传图片可以正常访问,上传脚本格式访问则403.什么原因?
原因很多,有可能web服务器配置把上传目录写死了不执行相应脚本,尝试改后缀名绕过。
access 扫出后缀为asp的数据库文件,访问乱码。如何实现到本地利用?
迅雷下载,直接改后缀为.mdb。
文件包含Getshell思路?
伪协议绕过
日志包含绕过
远程包含绕过
…
文件上传Getshell思路
前端绕过
短标签绕过
Content-Type值绕过
.user.ini绕过
日志包含绕过
…