一、专业问题
(1) 怎么搭建一个环境:20 台主机(2 个 VLAN)访问外网
搭建一个环境需要知道具体的需求,如果要两个 VLAN 的话。一个 VLAN 属于财务部,一个
VLAN 属于研发部,这两个 VLAN 是否可以相互通信,用二层交换机相连,将连接不同端口
的 PC 划分进不同的 VLAN,需要访问外网就使用路由器(或者使用 AF),配置 NAT,节省
IP 地址。
(2) WEB 攻击举例,取其中了解的一个阐述
1.
SQL 注入攻击是由于 web 应用程序开发中,没有对用户输入数据的合法性进行判断,
攻击者可以通过互联网的输入区域(如 URL、表单等),利用某些特殊结构的 SQL 语句
插入 SQL 的特殊字符和指令,提交一段数据库查询代码,操纵并获得本不为用户所知
的数据。
sql 注入预防手段:
使用预编译语句:这样攻击者没办法改变 sql 语句的结构,其实是预编译 sql 中特殊字
符被转义了
使用 orm 框架:防止 sql 注入的关键是对关键字符进行转义,而常见的 orm 框架都支持
对相应的关键字或特殊符号转义
避免密码明文存放:对存储密码单向 hash,入 md5,防止用户信息泄露(拖库),黑
客无法直接获取用户密码,只能得到 hash 码
处理好相应的异常:后台异常,很可能包含服务器版本,数据库版本,编译语言等信息,
甚至是数据库连接的地址与用户密码,防止错误信息直接输出到页面上
2. 跨站脚本攻击(XSS)是由于 web 开发者在编写应用程序时没有对用户提交的语句和变
量中进行过滤或限制,攻击者通过 web 页面向数据库或 HTML 页面提交恶意的 html 代
码,当用户打开有恶意代码的连接或页面时,恶意代码会自动执行,从而到达攻击的目
的。
1. 反射型 XSS 攻击反射型 XSS 一般是攻击者通过特定手法(如电子邮件),诱使用户去访
问一个包含恶意代码的 URL,当受害者点击这些专门设计的链接的时候,恶意代码会直接
在受害者主机上的浏览器执行。反射型 XSS 通常出现在网站的搜索栏、用户登录口等地方,
常用来窃取客户端 Cookies 或进行钓鱼欺骗。
2. 存储型 XSS 攻击也叫持久型 XSS,主要将 XSS 代码提交存储在服务器端(数据库,内存,
文件系统等),下次请求目标页面时不用再提交 XSS 代码。当目标用户访问该页面获取数据
时,XSS 代码会从服务器解析之后加载出来,返回到浏览器做正常的 HTML 和 JS 解析执行,
XSS 攻击就发生了。存储型 XSS 一般出现在网站留言、评论、博客日志等交互处,恶意脚
本存储到客户端或者服务端的数据库中。
3.DOM-based 型 XSS 攻击基于 DOM 的 XSS 攻击是指通过恶意脚本修改页面的 DOM 结
构,是纯粹发生在客户端的攻击。DOM 型 XSS 攻击中,取出和执行恶意代码由浏览器端
完成,属于前端 JavaScript 自身的安全漏洞。
防范手段:发生是因为用户把输入数据变成了代码,对用户输入的数据进行 html 转义处理,
比如尖括号、单引号、双引号等转义
3. 网页木马实际上是一个经过黑客精心设计的 HTML 网页。当用户访问该页面时,嵌入该
网页中的脚本利用浏览器漏洞,让浏览器自动下载黑客放置在网络上的木马并运行这个
1 木马。
4. 网站扫描是对 web 站点扫描,对 web 站点的结构、漏洞进行扫描。
5. Webshell 是 web 入侵的一种脚本工具,通常情况下,是一个 ASP、PHP 或者 JSP 程序页
面,也叫做网站后门木马,在入侵一个网站后,常常将这些木马放置在服务器 web 目
录中,与正常网页混在一起。通过 webshell,长期操纵和控制受害者网站。
6. 跨站请求伪造(CSRF)通过伪装来自受信任用户的请求来利用受信任的网站。是对网
站的一种恶意利用,和 XSS 差别很大,XSS 利用的是站点内的信任用户,而 CSRF 则是
通过伪装来自受信用户的请求来利用受信的网站,通俗 CSRF 是攻击者盗用了你的身份,
以你的名义向第三方网站发送恶意请求。CSRF 能做的事情包括利用你的身份发邮件、
发短信、进行交易转账,甚至盗取你的账号。
防御手段:
CRSF 攻击很大程度是利用了浏览器的 cookie,为防止站内的 XSS 漏洞盗取 cookie,需要
将 cookie 设置为 http only,这样通过 java script 脚本等无法读取到 cookie 了
增加 token,服务端随机生成 token,在请求中放入攻击者所不能伪造的信息,该信息
不存在 cookie 中,系统开发人员可以在 http 请求中以参数的形式加入一个随机 token,
并在服务端进行 token 的校验
通过 referrer 识别
7. 系统命令注入 操纵系统命令攻击是攻击者提交特殊字符或者操作系统命令,web 程序
程序没有检测或者绕过 web 应用程序过滤,把用户提交的请求作为指令进行解析,导
致操作系统命令执行。
8. 文件包含漏洞攻击是针对 PHP 站点特有的一种恶意攻击。当 PHP 中变量过滤不严,没
有判断参数是本地的还是远程主机上的时,我们就可以指定远程主机上的文件作为参数
来提交给变量执行,而如果提交的这个文件中存在恶意代码甚至干脆就是一个 PHP 木
马的话,文件中心的代码或 PHP 木马就会以 web 权限被成功执行。
9. 目录遍历漏洞就是通过浏览器向 web 服务器任意目录附加“../”,或者是在有特殊意义
的目录附件“../”,或者是附加“../”的一些变形,编码,访问 web 服务器根目录之外
的目录。
10. 信息泄漏漏洞是由于 web 服务器配置或者本身存在安全漏洞,导致一些系统文件或者
配置文件直接暴露在互联网中,泄漏 web 服务器的一些敏感信息,如用户名、密码、
源代码、服务器信息、配置信息等。
常见的信息泄漏有:
1、应用错误信息泄露;
2、备份文件信息泄露;
3、web 服务器缺省页面信息泄露;
4、敏感文件信息泄露;
5、目录信息泄露。
信息泄露的几种原因:
1、web 服务器配置存在问题
2、web 服务器本身存在漏洞
3、web 网站的脚本编写存在问题
4、人员问题
(3) OSPF, RIP: 两者应用场景的区别,怎么保证 OSPF 无环
相同点
1. OSPF 有两个版本 ospf-1(还未正式发布就夭折)和 ospf-2,RIP 也是有两个版本 RIP-1 和
RIP-2;
2. OSPF-2 与 RIP-2 一样是一种无类路由协议,支持 VLSM、CIDR 等特性;
3. OSPF-2 与 RIP-2 一样都支持认证功能;
4. RIP 封装在 UDP 报文中,OSPF 封装在 IP 报文中,UDP 和 IP 都是一种无连接、不可靠的通
信方式;
5. RIP 和 OSPF 协议报文的安全传输都是靠协议本身;
不同点
1. OSPF 是基于链路状态(Link-State)的路由协议,而 RIP 是基于距离矢量路与协议(二者
的根本性差别);
2. RIP 是一种“传话”的方式来传递路由有关的路由信息,OSPF 是以一种“宣告”的方式,
OSPF 的收敛时间明显小于 RIP;
3. RIP 是一种“嘈杂”的路由协议,路由收敛后仍然周期性地持续地存在大量的 RIP 协议报
文流量;OSPF 是一种“安静”的路由协议,路由收敛后,OSPF 网络中只存在一小部分 OSPF
报文;
4. RIP 协议是以 UDP 作为其传输层协议的,RIP 是封装在 UDP 报文中,端口号是 520;OSPF
没有传输层协议,OSPF 是直接封装在 IP 报文中的;
5. RIP 报文有两种:请求报文和响应报文;OSPF 有五种:hello 报文、数据库描述报文(DD)、
链路状态请求报文(LSR)、链路状态更新报文(LSU)和链路状态确认报文(LSAck);
6. RIP 以“跳数”来作为路由开销的定义,OSPF 理论上可以采取任何参量作为开销定义,最
常见的就是采用链路带宽来定义路由开销;
7. OSPF 具有区域化结构,RIP 没有;
8. OSPF 网路中路由器有角色之分,不同路由器有着不同的功能和作用,RIP 没有角色之分;
9. OSPF 每台路由器都有独一无二的路由器身份号(Router-ID),在 RIP 网络中是没有 Router-ID
的;
(4) NAT:分类,PNAT 源端口转换还是?
静态 NAT、动态 NAT、NAPT(端口复用)。
SNAT(源地址转换):内网用户要上网
DNAT(目标地址转换):外网需要访问内网服务器
(5) ARP 表 MAC 表 路由表是什么?
1、交换机工作在数据链路层
2、路由器工作在网络层
3、交换机有 MAC 地址表,无 ARP 表,MAC 地址表一般存在在交换机中
4、一般情况下,计算机和路由器既有 ARP 表,也有路由表
MAC 地址表详解
MAC 地址表:在交换机中,存有一张记录局域网主机 MAC 地址与交换机接口的对应关系
的表,交换机就是依据这张表将数据帧转发到指定的目标主机上。通过下面的阐述,你会对
mac 地址表有所了解。
1、主机 A 将一个数据帧发送给交换机,其中源 MAC 地址为 MAC_A,目标 MAC 地址为 MAC_B。
2、交换机收到此数据帧后,首先将数据帧中的源 MAC 地址 MAC_A 和对应的接口(接口 1) 记
录到 MAC 地址表中。
3、然后,交换机会检查自己的 MAC 地址表中是否有 MAC_B 的信息。如果有,则从 MAC 地址
表记录的接口 2 发送出去;如果没有,则会将此数据帧从非接收接口(接口 1)的所有接口发
送出去。
4、这时,局域网中所有主机都会收到此数据帧,但是只有主机 B 收到此数据帧时会响应这
个广播,并回应一个数据帧,此数据帧中包含主机 B 的 MAC 地址 MAC_B。
5、当交换机收到主机 B 回应的数据帧后,也会记录数据帧中的源 MAC 地址(也就是 MAC_B)
和对应接口到 MAC 表中,此时,交换机就可以把主机 A 发过来的数据帧发送给主机 B 了。数
据帧的源 MAC 地址为交换机的 MAC 地址,目标 MAC 地址是 MAC_B。
ARP 缓存表详解
上面我们讲解了交换机的工作原理,知道交换机是通过 MAC 地址通信的,但是我们是如
何获得目标主机的 MAC 地址呢?这时我们就需要使用 ARP 协议了。ARP 协议是工作在网络层
的协议,它负责将 IP 地址解析为 MAC 地址。在每台主机中都有一张 ARP 表,它记录着主机
的 IP 地址和 MAC 地址的对应关系。还是利用上面的图来进行阐述。
1、如果主机 A 想发送数据给主机 B,主机 A 首先会检查自己的 ARP 缓存表,查看是否有主
机 B 的 IP 地址和 MAC 地址的对应关系。如果有,则会将主机 B 的 MAC 地址作为源 MAC 地址
封装到数据帧中。如果没有,主机 A 则会发送一个 ARP 请求信息,请求的目标 IP 地址是 IP_B,
目标 MAC 地址是 MAC 地址的广播帧(即 FF-FF-FF-FF-FF-FF),源 IP 地址为 IP_A,源 MAC 地
址是 MAC_A。
2、当交换机收到此数据帧之后,发现此数据帧是广播帧,因此,会将此数据帧从非接收接
口的所有接口发送出去。
3、当主机 B 收到此数据帧后,会校对目标 IP 地址是否是自己,当发现是目标地址是自己,
会将主机 A 的 IP 地址和 MAC 地址的对应关系记录到自己的 ARP 缓存表中,同时会发送一个
ARP 应答,其中包括自己的 MAC 地址。
4、主机 A 在收到这个回应的数据帧之后,在自己的 ARP 缓存表中记录主机 B 的 IP 地址和
MAC 地址的对应关系。而此时交换机已经学习到了主机 A 和主机 B 的 MAC 地址了。
路由表详解
路由器负责不同网络之间的通信,它是当今网络中的重要设备,可以说没有路由器就没
有当今的互联网。在路由器中有一张路由表,记录着到不同网段的信息。路由表中的信息分
为直连路由和非直连路由。
直连路由:是直接连接在路由器接口的网段,由路由器自动生成。
非直连路由:不是直接连接在路由器接口上的网段,此记录需要手动添加或者是使用动态路
由生成。
路由表中记录的条目有的需要手动添加(称为静态路由),有的需要动态获取的(称为动
态路由)。直连路由属于静态路由。
路由器是工作在网络层的,在网络层可以识别逻辑地址。当路由器的某个接口收到一个
包时,路由器会读取包中相应的目标的逻辑地址的网络部分,然后在路由表中进行查找。如
果在路由表中找到目标地址的路由条目,则把包转发到路由器的相应接口,如果在路由表中
没有找到目标地址的路由条目,那么,如果路由配置默认路由,就科举默认路由的配置转发
到路由器的相应接口;如果没有配置默认路由,则将该包丢弃,并返回不可到达的信息。
这就是数据路由的过程。
(6) Raid0 Raid1 Raid5 Raid10
(7) TCP 三次握手 4 次挥手
TCP 三次握手
最开始的时候客户端和服务器都是处于 CLOSED 状态。主动打开连接的为客户端,被动打开
连接的是服务器。
第一次握手:建立连接时,客户端发送 syn 包(syn=x)到服务器,并进入 SYN_SENT 状态,
等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:服务器收到 syn 包,必须确认客户的 SYN(ack=x+1),同时自己也发送一个
SYN 包(syn=y),即 SYN+ACK 包,此时服务器 SYN_RECV 状态;
第三次握手:客户端收到服务器的 SYN+ACK 包,向服务器发送确认包 ACK(ack=y+1),此包
发送完毕,客户端和服务器进 ESTABLISHED(TCP 连接成功)状态,完成三次握手。
TCP 四次挥手
A:B 啊,我不想玩了
B:哦,你不想玩了啊,我知道了
这个时候,只是 A 不想玩了,即不再发送数据,但是 B 可能还有未发送完的数据,所以需要等待 B 也主
动关闭。
B:A 啊,好吧,我也不玩了,拜拜
A:好的,拜拜
数据传输完毕后,双方都可释放连接。最开始的时候,客户端和服务器都是处于 ESTABLISHED
状态,然后客户端主动关闭,服务器被动关闭。
1. 客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列
号为 seq=u,此时,客户端进入 FIN-WAIT-1(终止等待 1)状态。 TCP 规定,FIN 报文段即
使不携带数据,也要消耗一个序号。
2. 服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号
seq=v,此时,服务端就进入了 CLOSE-WAIT(关闭等待)状态。TCP 服务器通知高层的应用
进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要
发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是
整个 CLOSE-WAIT 状态持续的时间。
3. 客户端收到服务器的确认请求后,此时,客户端就进入 FIN-WAIT-2(终止等待 2)状态,
等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
4. 服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由
于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为 seq=w,此时,服
务器就进入了 LAST-ACK(最后确认)状态,等待客户端的确认。
5. 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列
号是 seq=u+1,此时,客户端就进入了 TIME-WAIT(时间等待)状态。注意此时 TCP 连接还