安全学习笔记之Web安全(二)

0x00 前言

在计算机世界中,一个东西习惯分成不同的层级,来模块化和解耦系统,这也就意味着一个东西有不同的层,比如计算机网络它有 OSI 七层模型和 TCP/IP 五层模型等,计算机体系结构从上到下可大致分为应用层,操作系统层,微指令架构层,硬件层等等,像其他的如操作系统和编程语言也是一样的道理,可见抽象和封装就是计算机世界的基本原则。

同样,我们在谈信息安全的时候,信息安全也是有不同的层级的。上一篇文章中我们说过了,安全的本质是数据,而随着数据的流动,就分层了不同的层级。当数据在网络中流动的时候,它是网络安全;当数据流经到了 Web 容器和 Web 应用的时候,它是 Web 安全;当数据流经到操作系统是,它是主机安全。

在了解了这些后,我们针对不同的层有不同的学习方向,而今天我记录的学习笔记是 Web 安全的学习笔记。在我们了解具体的漏洞前,需要抱着一切用户输入皆不可信的思想,很多漏洞利用本质就是把用户的输入的数据当做代码执行。

0x10 常见 Web 漏洞

0x11 XSS

原理:用户的输入被当做 js 代码执行了
分类:

  • 反射型: 恶意代码输入直接被输出执行,一般在前后端一体的架构中,服务端改变了返回的页面代码
  • 存储型: 恶意代码被提交存储在数据库中,可以被加载执行
  • DOM型: 恶意代码提交到后端服务器后,前端代码根据后端服务器返回的内容通过 js 修改了 htm 页面,达到了插入脚本的目的,常见于前后端分离的项目。
    危害:
  • 窃取 cookie
  • 钓鱼操作
  • 记录用户行为
  • 未授权操作
    防护:
  • 验证输入输出
  • 编码
  • 白名单过滤
  • CSP(Content Security Policy)

0x12 SQL注入

原理:构造恶意 SQL 语句参数,导致 SQL 语句被篡改
分类:参数类型可分为数字型和字符型,而根据回显结果可以分为回显注入,报错注入和盲注
危害:篡改窃取数据
防护:预编译语句,验证输入,使用存储过程

0x13 CSRF

原理:伪造用户操作
防护:csrf token,二次验证,防止参数被攻击者猜解

0x14 SSRF

原理:通过 url 控制服务器去访问其他服务器
防护:白名单限制,协议和资源限制,请求端限制

0x15 反序列化漏洞

原理:通过在数据中嵌入自定义代码提交到服务器,服务器反序列化过程中执行了代码,来控制整台服务器
防护:限制序列化和反序列化的类,RASP 检测

0x16 信息泄露

原理:注释、异常、返回信息或者代码泄露
防护:模糊处理,关闭异常打印和错误,监控 github 等网站

0x17 插件漏洞

原理:第三方插件存在漏洞
防护:第三方插件监控和检测

0x18 上传漏洞

原理:上传图片或者 webshell
防护:文件校验

0x20 小结

web 安全的漏洞有很多,这里也只记了个大概,总之漏洞的原理就是程序把数据当做代码执行,而我们的应对防止无非是验证数据和过滤等等,还是那句话,一切输入皆不可信。