【个人用】信息安全面试资料整理

这篇博客是个人用于面试的资料整理,方便个人查阅使用。

漏洞原理和常用工具

OWASP TOP 10

参考链接

https://www.jianshu.com/p/ba20f5f8f878
https://zhuanlan.zhihu.com/p/393635352

image

SQL 注入

原理

Web 应用程序对用户输入数据的合法性没有判断,攻击者可以在 Web 应用程序中事先定义好的查询语句的结尾上添加额外的 SQL 语句,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

利用

这里以一道 SQL 注入的 CTF 题目为例。

判断回显字段个数:

1' order by 4#

确定回显位置:

-1' union select 1, 2, 3, 4#

获取表名:

-1' union select 1, group_concat(table_name), 3, 4 from information_schema.tables where table_schema=database()#

查询表中字段名:

-1' union select 1, group_concat(column_name), 3, 4 from information_schema.columns where table_name='fl4g'#

查询字段内容:

-1' union select 1, skctf_flag, 3, 4 from fl4g#

绕过姿势

空格绕过
  • 用注释替换空格,例如:select/**/user, password/**/from /**/users
  • 空格 URL 编码 %20
  • 两个空格代替一个空格
  • 如果空格被过滤,括号没有被过滤,可以用括号绕过:select(user())from dual where(1=1)and(2=2)
  • 回车

单引号绕过
  • 使用十六进制
  • 单引号 URL 编码 %27

关键字绕过
  • 大小写混合
  • 双写关键字

防范

  • 在服务端正式处理之前,对提交数据的合法性进行检查
  • 封装客户端提交信息
  • 替换或删除敏感字符和字符串
  • 屏蔽出错信息

XSS 跨站脚本攻击

参考链接

http://blog.nsfocus.net/xss-advance/

原理

恶意攻击者往 Web 页面里插入恶意 JavaScript 代码,当用户浏览该页之时,嵌入其中 Web 里面的 JavaScript 代码会被执行,从而达到恶意攻击用户的目的

分类

反射型 XSS 攻击者事先制作好攻击链接,需要欺骗用户自己去点击链接才能触发 XSS 代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。

存储型 XSS 代码是存储在服务器中的,如在个人信息或发表文章等地方加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种 XSS 非常危险,容易造成蠕虫,大量盗窃 Cookie。

DOM 型 XSS 基于 DOM 的 XSS 是通过修改页面 DOM 节点数据信息而形成的跨站脚本攻击。不同于反射型 XSS 和存储型 XSS,基于 DOM 的 XSS 往往需要针对具体的 JavaScript DOM 代码进行分析,并根据实际情况进行跨站脚本攻击。

防范

  • 特殊字符进行HTML实体转码,如''""<>\:#& 等;
  • 设置标签事件属性的黑白名单,过滤输入的特殊字符;
  • 在服务器端设置 Cookie 的时候设置 HTTP-ONLY,防止用户通过 JS 获取 Cookie;
  • 将不可信数据作为 URL 参数值时需要对参数进行 URL 编码。

CSRF 跨站请求伪造

参考链接

https://www.jianshu.com/p/67408d73c66d

原理

image

防范

  • 尽量使用 POST,少用 GET;
  • 将 Cookie 设置为 HTTP-ONLY;
  • 在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务端进行 token 校验;
  • 验证 HTTP Referer 字段。

SSRF 服务器端跨站请求伪造

参考链接

https://zhuanlan.zhihu.com/p/91819069

原理

攻击者想要访问主机 B 上的服务,但是由于存在防火墙或者主机B是属于内网主机等原因导致攻击者无法直接访问主机 B。而服务器 A 存在 SSRF 漏洞,这时攻击者可以借助服务器 A 来发起 SSRF 攻击,通过服务器 A 向主机 B 发起请求,从而获取主机 B 的一些信息。

image

利用

  • 内外网的端口和服务扫描;
  • 攻击运行在内网或本地的应用程序;
  • 对内网 Web 应用进行指纹识别,识别企业内部的资产信息;
  • 攻击内网的 Web 应用,主要是使用 GET 参数就可以实现的攻击(比如 Struts2 漏洞利用,SQL 注入等);
  • 利用 file:/// 协议读取本地敏感数据文件等。

防范

  • 过滤返回的信息,如果 Web 应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准;
  • 统一错误信息,避免用户可以根据错误信息来判断远程服务器的端口状态;
  • 限制请求的端口;
  • 禁止不常用的协议,仅仅允许 HTTP 和 HTTPS 请求。可以防止类似于 file:///gopher://ftp:// 等引起的问题;
  • 使用 DNS 缓存或者 HOST 白名单的方式。

文件上传

原理

服务端脚本语言未对上传的文件进行严格验证和过滤,导致恶意用户上传恶意的脚本文件,从而获取执行服务端命令的能力。

常见触发点 相册、头像上传、视频、照片分享、附件上传

绕过姿势

客户端检测绕过(JS 检测) 利用 firebug 禁用 JS 或使用 Burp 代理工具可轻易突破。

服务端 MIME 检测绕过(Content-Type 检测) 使用 Burp 代理,修改 Content-Type 的参数。

服务端扩展名检测绕过
  • 文件名大小写绕过,例如 Php,AsP 等类似的文件名;
  • 后缀名字双写嵌套,例如 pphphp,asaspp 等;
  • 可以利用系统会对一些特殊文件名做默认修改的系统特性绕过;
  • 可以利用 asp 程序中的漏洞,使用截断字符绕过;
  • 可以利用不在黑名单列表中却能够成功执行的同义后缀名绕过黑名单的限制;
  • 可以利用解析 / 包含漏洞配合上传一个代码注入过的白名单文件绕过。

防范

  • 文件上传的目录设置为不可执行;
  • 在判断文件类型时,可以结合使用 MIME Type、后缀检查等方式;
  • 使用白名单;
  • 使用随机数改写文件名和文件路径;
  • 单独设置文件服务器的域名;
  • 使用安全设备防御;
  • 限制上传文件的大小。

DoS 和 DDoS 攻击

参考链接

https://zhidao.baidu.com/question/466301367.html
https://blog.csdn.net/huanhuanq1209/article/details/82669046

DoS:Deny of Service 拒绝服务攻击
DDoS:Distribute Deny of Service 分布式拒绝服务攻击

区别 DoS 攻击的效果是使得计算机或网络无法提供正常的服务。常见的 DoS 攻击有针对计算机网络带宽和连通性的攻击。DoS 是单机与单机之间的攻击。

DDoS 攻击指借助于客户 / 服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动 DDoS 攻击,从而成倍地提高拒绝服务攻击的威力。

原理

首先攻击者向被攻击的服务器发送大量的虚假 IP 请求,被攻击者在收到请求后返回确认信息,等待攻击者进行确认,该过程需要 TCP 的三次握手,由于攻击者发送的请求信息是虚假的,所以服务器接收不到返回的确认信息,在一段时间内服务器会处与等待状态,而分配给这次请求的资源却被有被释放。当被攻击者等待一定的时间后,会因连接超时而断开,这时攻击者在次发送新的虚假信息请求,这样最终服务器资源被耗尽,直到瘫痪。

防范

  • 在时间段内,限制 SYN 的半连接数(time_wait);
  • 缩短 timeout 的超时时间,针对已经进行 SYN 半连接的过程;
  • 针对不常用的服务或者端口进行关闭。

反序列化

参考链接

https://blog.csdn.net/cldimd/article/details/104999404
https://www.cnblogs.com/bonelee/p/14257929.html

原理

程序没有对用户输入的反序列化字符串进行检测,导致反序列化过程可以被恶意控制,进而造成代码执行、getshell 等一系列不可控的后果。
反序列化漏洞并不是 PHP 特有,也存在于 Java、Python 等语言之中,但其原理基本相通。

防范

  • 不要把用户的输入或者是用户可控的参数直接放进反序列化的操作中去;
  • 业务需要使用反序列化时,尽量避免反序列化数据可被用户控制,如无法避免建议尽量使用白名单校验的修复方式。

sqlmap

常用命令

判断是否存在注入
sqlmap -u URL地址

查询所有数据库
sqlmap -u URL地址 --dbs

查询当前数据库下所有表
sqlmap -u URL地址 -D 数据库名 --tables

查询表中所有字段
sqlmap -u URL地址 -D 数据库名 -T 表名 --columns

查询字段内容
sqlmap -u URL地址 -D 数据库名 -T 表名 -C 字段名 --dump

获取数据库所有用户
sqlmap -u URL地址 --users

获取数据库用户的密码
sqlmap -u URL地址 --password

获取当前网站数据库的名称
sqlmap -u URL地址 --current-db

获取当前网站数据库的用户
sqlmap -u URL地址 --current-user

nmap

参考链接

https://www.jianshu.com/p/874405b0a6ae

简单扫描

nmap 默认发送一个 ARP 的 PING 数据包,来探测目标主机 1-10000 范围内所开放的所有端口。

命令语法:
nmap <target ip address>
其中:target ip address 是扫描的目标主机的ip地址

例子:

nmap 173.22.90.10

扫描出开放的端口。

简单扫描,并对结果返回详细的描述输出

命令语法:
namp -vv <target ip address>

例子:

nmap -vv 173.22.90.10

自定义扫描

命令语法:
nmap -p(range) <target IP>

其中 range 为端口范围。

例子:扫描目标主机 20-120 范围内的端口

nmap -p20-120 173.22.90.10

指定端口扫描

命令语法:
nmap -p(port1,port2,...) <target IP>

格式与上面类似。

例子:扫描目标主机的 22 和 80 端口

nmap -p22,80 173.22.90.10

ping 扫描

利用类似 Windows / Linux 系统下的 ping 方式进行扫描。

命令语法:
nmap -sP <target ip>

例子:

nmap -sP 10.1.112.89

路由跟踪

追踪电脑所在地到目的地之间所经过的网络节点,以及通过各个节点所花费的时间。

命令语法:
nmap –traceroute <target IP>

例子:

namp –traceroute 8.8.8.8

网段扫描

扫描一个网段下的 IP。

命令语法:
nmap -sP <network address> </CIDR>

其中 </CIDR> 为子网掩码对应的前缀长度。

例子:

nmap -sP 10.1.1.0 /24

探测操作系统类型

命令语法:
nmap -O <target IP>

例子:

nmap -O 10.1.112.89

BurpSuite 的 Intruder 功能

参考链接

https://www.cnblogs.com/yufusec/p/9179625.html
https://blog.csdn.net/ai_64/article/details/91351364

该功能常用于爆破,有四种攻击模式:

image

Sniper 使用同一组数据对每一个位置都测试一遍,不同位置相互独立。

Battering ram 对所有的位置同时使用一组测试数据。

Pitchfork 每一个变量标记对应一个字典,字典中取值一一对应。

举例:变量 A 用字典 A 爆破,其中的值为 1,2,3;变量 B 用字典 B 爆破,其中的值为 4,5,6。那么该模式就只有 3 种取值,分别为 (1, 4)、(2, 5)、(3, 6)。


Cluster bomb 每一个变量标记对应一个字典,最终取值为每个字典的笛卡尔积。

举例:变量 A 用字典 A 爆破,其中的值为 1,2,3;变量 B 用字典 B 爆破,其中的值为 4,5,6。那么该模式就会有 9 种取值,分别为 (1, 4)、(1, 5)、(1, 6)、(2, 4)、(2, 5)、(2, 6)、(3, 4)、(3, 5)、(3, 6)。

应急响应

应急响应的流程

参考链接

https://wenku.baidu.com/view/3e9cd5aabb0d6c85ec3a87c24028915f814d8478.html
image

https://www.doc88.com/p-3562174445083.html?r=1
image

计算机网络及相关协议

OSI 七层模型和 TCP/IP 五层模型

参考链接

https://blog.csdn.net/mestryas/article/details/81629218

image

image

ARP 协议

原理

ARP(Address Resolution Protocol)协议,即地址解析协议,其功能为将 IP 地址解析成 MAC 地址。

在 TCP/IP 模型中,ARP 协议属于网络层;在 OSI 模型中,ARP 协议属于数据链路层。

ARP 协议工作流程

主机 PC1 的 IP 地址为 209.0.0.5,主机 PC2 的 IP 地址为 209.0.0.6。当 PC1 和 PC2 通信时,地址解析协议可以将 PC2 的 IP 地址解析成 MAC 地址。


当 PC1 想发送数据给 PC2 时,首先在自己的本地 ARP 缓存表中检查 PC2 匹配的 MAC 地址。


如果 PC1 在缓存中没有找到相应的条目,它将询问 PC2 的 MAC 地址,从而将 ARP 请求帧广播到本地网络上的所有主机。该帧中包括源主机 PC1 的 IP 地址和 MAC 地址。本地网络上的每台主机都接收到 ARP 请求并且检查是否与自己的IP地址匹配。

image

如果主机发现请求的 IP 地址与自己的 IP 地址不匹配,它将会丢弃 ARP 请求。


PC2 确定 ARP 请求中的 IP 地址与自己的 IP 地址匹配,则将 PC1 的地址和 MAC 地址添加到本地缓存表。


PC2 将包含其 MAC 地址的 ARP 回复消息直接发送回 PC1 (这个数据帧是单播)。

image

当 PC1 收到从 PC2 发来的 ARP 回复消息时,会将 PC2 的 IP 和 MAC 地址添加到自己的 ARP 缓存表。本机缓存是有生存期的,默认 ARP 缓存表的有效期是 120s。


当超过该有效期后,将再次重复上面的过程。PC2 的 MAC 地址一旦确定,PC1 就能向 PC2 发送 IP 信息了。

查看 ARP 缓存记录

使用 arp -a 命令可以查看本机的 ARP 缓存条目:

image

添加 ARP 缓存记录

使用 arp -a <IP address> <MAC address> 可以将 IP 地址对应的 MAC 地址添加到 ARP 缓存记录当中。

删除 ARP 缓存记录

使用 arp -d <IP address> 可以删除该 IP 地址对应的 MAC 地址。

如果想要清空全部的话,可以直接使用 arp -d 或者是 arp -d *

注意:在 Linux 系统中,删除 ARP 记录的时候必须指定接口地址,否则会报错。

如何捕获 ARP 数据包

直接用 Wireshark 抓,等一会儿然后筛选一下就能看到 ARP 包:

image

UDP 协议

简介

UDP(User Datagram Protocol)协议,即用户数据报协议,提供不可靠的、面向报文的、无连接的传输服务。

如何捕获 UDP 数据包

在正常网络连接条件下,可以尝试登录 QQ,然后直接使用 Wireshark 抓包,然后筛选就能看到大量 UDP 数据包:

image

TCP 协议

简介

TCP(Transmission Control Protocol)协议,即传输控制协议,是一种面向连接的、可靠的、基于 IP 的传输层协议。

TCP 三次握手过程

第一次握手,建立连接时,客户端向服务器发送 SYN 报文(Seq = x,SYN = 1),并进入 SYN_SENT 状态,等待服务器确认。

image

第二次握手,实际上是分两部分来完成的,即 SYN + ACK(请求和确认)报文。

服务器收到了客户端的请求,向客户端回复一个确认信息(Ack = x + 1)。

服务器再向客户端发送一个 SYN 包(Seq = y)建立连接的请求,此时服务器进入 SYN_RECV 状态。

image

第三次握手,客户端收到服务器的回复(SYN + ACK 报文)。此时,客户端也要向服务器发送确认包(ACK)。此包发送完毕,客户端和服务器进入 ESTABLISHED 状态,完成三次握手。

image

posted @ 2021-11-22 12:20  --Kisaragi--  阅读(172)  评论(0编辑  收藏  举报