攻击篇
Cross-Site Scripting(XSS)
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>` ❗没有过滤!
复制代码
1、Stored XSS
2、Reflected XSS
- 不涉及数据库
- 从URL上攻击
3、DOM-based XSS
- 不需要服务器的参与
- 恶意攻击的发起 + 执行,全在浏览器完成
Reflected vs DOM-based
4、Mutation-based XSS
- 利用浏览器渲染DOM的特性(独特优化)
- 不同浏览器,会有区别(按浏览器进行攻击)
👻❗❗❗没人比我更懂浏览器
Cross-site request forgery(CSRF)
- 在用户不知情的前提下
- 利用用户权限(cookie)
- 构造指定HTTP请求,窃取或修改用户敏感信息
CSRF demo
在邮箱中点击恶意链接
CSRF–GET 最常见
Injection
SQL Injection
injection demo1
injection demo2
injection demo2-执行
injection demo2–读取+修改
Denial of Service(Dos)
通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及响应更多请求,导致请求挤压,进而雪崩效益
基于正则表达式的Dos
正则表达式一一贪婪模式
ReDos:基于正则表达式的 DOS
DDos
短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩,无法响应新请求,主要是消耗带宽 (不搞复杂,量大)
不会限制在域名访问,更多直接访问ip。不区分接口,主要消耗带宽
- 耗时的同步操作
- 数据库写入
- SQL join
- 文件备份
- 循环执行逻辑
三次握手无法完成