【个人用 | 更新中】信息安全面试资料整理


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

安全知识部分

OWASP TOP 10

参考链接

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

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

原理

防范

  • 尽量使用 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 的一些信息。

利用

  • 内外网的端口和服务扫描;
  • 攻击运行在内网或本地的应用程序;
  • 对内网 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、后缀检查等方式;
  • 使用白名单;
  • 使用随机数改写文件名和文件路径;
  • 单独设置文件服务器的域名;
  • 使用安全设备防御;
  • 限制上传文件的大小。