© Bohua Xu

Web开发安全

Feb 7, 2023 · 10min

攻击篇

Cross-Site Scripting(XSS)

image-20230206223325825.png

XSS主要利用了

  • 盲目相信用户的提交内容
  • 直接将用户传入字符串转化为DOM string->DOM

document.write

element.innerHTML=anyString

SSR(user_data) //伪代码

XSS的一些特点

  • 通常难以从UI上感知(暗地里执行脚本)
  • 窃取用户信息(cookie/token)
  • 绘制UI(例如弹窗),诱骗用户进行点击/填写表单

XSS demo

public async submit(ctx) {   //写数据
    const { content, id } = ctx.request.body;
    // 没有对 content 过滤
    await db.save({
        content,
        id
    J);
public async render(ctx) {   //读数据
    const { content } = await db.query({
        id: ctx.query.id
    });
  // 没有对 content 过滤 
  ctx.body`<div>${content}</div>`没有过滤!

复制代码
public async submit(ctx) {   //写数据
    const { content, id } = ctx.request.body;
    // 没有对 content 过滤
    await db.save({
        content,
        id
    J);
public async render(ctx) {   //读数据
    const { content } = await db.query({
        id: ctx.query.id
    });
  // 没有对 content 过滤 
  ctx.body`<div>${content}</div>`没有过滤!

复制代码

image-20230206224452395.png

1、Stored XSS

image-20230206224713019.png

2、Reflected XSS

  • 不涉及数据库
  • 从URL上攻击

image-20230206224841800.png

3、DOM-based XSS

  • 不需要服务器的参与
  • 恶意攻击的发起 + 执行,全在浏览器完成

image-20230206225002366.png

Reflected vs DOM-based

image-20230206225144103.png

4、Mutation-based XSS

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

👻❗❗❗没人比我更懂浏览器

image-20230206225254621.png

Cross-site request forgery(CSRF)

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

CSRF demo

image-20230206225432158.png 在邮箱中点击恶意链接

CSRF–GET 最常见

image-20230206225542577.png

Injection

SQL Injection

image-20230206225745410.png

injection demo1

image-20230206225829954.png

image-20230206225929008.png

injection demo2

image-20230206230021631.png

injection demo2-执行

image-20230206230034102.png

image-20230206230841506.png

injection demo2–读取+修改

image-20230206230631777.png

image-20230206230939870.png

Denial of Service(Dos)

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

基于正则表达式的Dos

正则表达式一一贪婪模式

image-20230206231248474.png

ReDos:基于正则表达式的 DOS

image-20230206231441886.png

DDos

短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩,无法响应新请求,主要是消耗带宽 (不搞复杂,量大)

不会限制在域名访问,更多直接访问ip。不区分接口,主要消耗带宽

  • 耗时的同步操作
  • 数据库写入
  • SQL join
  • 文件备份
  • 循环执行逻辑

image-20230206232152273.png

三次握手无法完成

基于传输层的攻击

中间人攻击

image-20230206232313707.png

CC BY-NC-SA 4.0 2021-PRESENT © Bohua Xu