Web 开发的安全之旅 | 青训营笔记

62 阅读4分钟
这是我参与「第四届青训营」笔记创作活动的第2天

一、XSS 跨站脚本攻击 Cross-Site Scripting

image.png XSS就是攻击者往页面中插入攻击脚本,对页面进行攻击

  • 攻击者使用XSS,主要是利用了
  1. 开发者盲目信任用户提交的内容(比如带有恶意的字符串)
  2. 开发者直接把字符串生成DOM
  • XSS的一些特点
  1. 通常难以从UI上感知(暗地执行脚本)
  2. 窃取用户的敏感信息(cookie/token)
  3. 绘制UI(比如弹窗),诱骗用户点击/填写表单

例子: image.png

  • 服务端的两个接口:

    • submit会接收请求,将请求中的参数存入数据库中
    • render会从数据库中读取内容,写在HTML里,然后返回给用户

这里没有对用户提交的内容做任何过滤,如果我们是攻击者,可以这样进行攻击:数据使用一个script标签包裹,然后在里面写一些恶意脚本提交给服务器,之后服务器就会返回到页面,脚本就会被执行

image.png

常见XSS攻击方式

  • 存储型 Stored XSS
    • 恶意脚本被存在数据库中

    • 访问页面 -> 读数据 === 被攻击

    • 危害最大,对全部用户可见

  • 反射型 Reflected XSS
    • 不涉及数据库

    • 从URL上攻击

  • DOM型 Dom-based XSS
    • 不需要服务器的参与

    • 恶意攻击的发起 + 执行,都是在浏览器完成的

  • Mutation-based XSS
    • 利用了浏览器渲染DOM的特性(独特优化)
    • 不同浏览器,会有区别(按浏览器进行攻击)

二、CSRF 跨站请求伪造

特点:

  • 在用户不知情的前提下
  • 利用用户的权限(cookie)
  • 构造指定HTTP请求,窃取或修改用户敏感信息

image.png

三、注入 Injection

SQL注入

SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息

image.png 例子: image.png

image.png 如果这些字符串是恶意的,SQL语句随便删点东西,那就对我们的数据库进行了很大的损害了~ image.png

其他注入

1. cli

2. OS command

你的服务端暴露了一些敏感的重要文件,导致被攻击者读取和修改

比如,通过nginx的配置,将访问流量转发到第三方网站,让他们的服务器不堪重负,直接下线

image.png

3. Server-Side Request Forgery(SSRF)

服务端伪造请求(严格而言,SSRF 不是 injection,但是原理类似)

这样可能回将内网的信息暴露给外部,导致外部可能会对内网的一些配置进行攻击 image.png

四、DoS

通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及响应更多请求,导致请求挤压,进⽽雪崩效应。

回顾一下:正则表达式——贪婪模式

重复匹配时「?」 vs 「no ?」:满⾜“⼀个” 即可 vs 尽量多 image.png

ReDoS 基于正则表达式的Dos

贪婪:n 次不⾏?n – 1 次再试试?——回溯

暴力回溯,会导致系统的响应时间边长,接口的吞吐量下降 image.png

Distributed DoS DDoS 分布式DoS

短时间内,来⾃⼤量僵⼫设备的请求流量,服务器不能及时完成 全部请求,导致请求堆积,进⽽雪崩效应,⽆法响应新请求

攻击的特点

  • 直接访问IP
  • 任意API
  • 消耗大量带宽(耗尽)

举一个例子,我们知道TCP连接需要三次握手,如果攻击者发很多次一个次的SYN不完成第三次的握手,导致大量连接未得到释放,当达到最大连接数的时候,新请求就无法进来了!! image.png

中间人攻击

当双方在进行通信的时候,可能以为对方是方,但是如果有一个中间人进行的拦截,中间加了一层,双方可能无法意识到中间人的存在,他可能会进行一些攻击 image.png 中间人攻击的前提是什么呢?

  • 明文传输
  • 信息篡改不可知
  • 对方身份未验证