Web开发的安全之旅之攻击篇

Web开发的安全之旅之攻击篇

Cross-Site Scripting(XSS)

  • Cross-Site Scripting(XSS) 跨站脚本攻击是最常见的一种攻击方式
  • 攻击者会在我们开发维护页面中,通过一种方式把其恶意脚本注入进来

image.png

后果

  • 用户隐私泄漏
  • 用户机器成为一台挖矿的机器

XSS主要利用

  • 开发者盲目信任用户的提交内容 + 直接将字符串转换成为DOM

image.png

XSS的特点

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

XXS的分类

  • XSS按照它的性质可以分为Stored XSSReflected XSSDOM-based XSSMutation-based XSS 四类

Stored XSS

  • 恶意脚本被存放在数据库中
  • 访问页面 -> 读取数据 == 被攻击
  • 这种危害最大, 对全部用户可见

Reflected XSS

  • 不涉及数据库
  • 从URL上攻击
    例如下面带码,通过给URL携带恶意参数,当用户访问界面时,就会受到攻击

image.png

DOM-based XSS

  • 不需要服务器的参与
  • 恶意攻击的发起 + 执行,全在浏览器完成
    例如下面例子,相同URL,但是更换执行环境,攻击者通过浏览器中相应的API,读取浏览器的参数,然后将参数对应的值写到页面的body中也就完成了一次XSS攻击

image.png

Mutation-based XSS

  • 利用了浏览器渲染DOM的特性(独特优化)
  • 不同浏览器,会有区别(按浏览器进行攻击)
  • 最难防范的一种XSS攻击手段
    例如下面例子中通过一段看似合法的tilte字符串属性,实际上将这一段代码拿到浏览器中渲染,比如Chrome中就会得到一段带有onerror的回调,回调触发则完成一次XSS攻击

image.png

Cross-site request forgery(CSRF)

Cross-site request forgery(CSRF),跨站请求伪造

  • 用户不知情的前提下
  • 利用用户权限(cookie)
  • 构造指定HTTP请求,窃取或修改用户敏感信息
    例如下面例子中用户收到一封未知名的邮箱,并且打开了恶意页面,然后攻击者在这个恶意页面中构造了一个HTTP请求,向银行发起了转账,银行收到这个请求,发现有用户的cookie 并且还验证成功了,就认为该请求时合法用户的合法的请求,于是就发起转账

image.png

GET是跨站最常见的HTTP请求,例如下面代码
a标签中请求

image.png
img标签中的请求

image.png

通过表单方式构造POST跨站请求:

image.png

Injection(注入)

  • SQL Injection是最常见的注入攻击
  • 在请求中携带(恶意注入的)SQL参数,然后服务器运行这段代码时,攻击者就可以获取其他数据、修改数据等

image.png

Injection demo1

  • 读取请求字段直接以字符串的形式拼接SQL语句

image.png

image.png
这样就恭喜完成被动删库跑路成就

Injection 不局限于SQL语句

  • CLI injecion:命令行界面注入
  • OS command injection :OS 命令注入(也称为shell 注入)
  • Server-Side Request Forgery(SSRF),服务端伪造请求(严格而言,SSRF不是injection,但是原理类似)
    Injection demo2
    image.png
    这里接收到用户的options参数没有进行任何过滤,服务器执行这段代码,就有可能会得到下面的结果

image.png

Injection demo3

  • 攻击者通过读取修改重要文件,把本站的流量转发到真实第三方网站
  • 第三方服务器因扛不住新增流量而挂掉
  • 第三方服务下线

image.png

SSRF demo

攻击者通过用户自定义callback URL发起请求
服务器接收这个请求的时候访问这个 callback就有可能暴露内外信息

image.png

Denial of Service(DoS)

DoS是Denial of Service的简称,即拒绝服务

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

ReDos:基于正则表达式的DOS

正则表达式----贪婪模式

重复匹配是 ? vs no?:满足“一个即可”vs“尽量多”

const nonGreedyRegExp = /a+?/; //有一个就行
const greedyRegExp = /a+/ //又多少个匹配多少
const str = 'aaaaaaa';
console.log(str.match(nonGreedyRegExp)[0]); //a
console.log(str.match(greedyRegExp)[0]); // aaaaaaa

贪婪:n次不行?n-1次再试试?——回溯
攻击者传入一个可以回溯的字符串,这样导致的效果就是服务器端响应的时间大大的延长,导致接口吞吐量明显降低,响应用户的次数大大下降
image.png

Distributed Dos (DDoS)

  • 段时间内,来自大量的僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩效应,无法响应新的请求
    不搞复杂的,量大就完事了

攻击特点

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

DDoS demo

SYN Flood 洪水攻击
TCP有三次握手,攻击者会构建大量的TCP请求,发送大量的SYN给服务器,服务器会按照规范返回ACK+SYN进入等待状态,但是攻击者此时不会返回第三次ACK,就导致第三次握手没有完成,服务器连接次数不能被释放,当服务器达到最大连接数,新的请求就通通不能响应,这样就完成了一次洪水攻击

image.png

中间人攻击

  • 攻击者在浏览器和服务器之间插入,让浏览器认为自己在和服务器之间通信,服务器认为自己在给浏览器传输数据,实际上它们都是和中间人进行交流沟通,中间人就可以在中间窃取信息,修改请求等
  • 中间人可以由很多角色扮演,例如一个恶意的浏览器,路由器等

中间人攻击成功的原因

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

image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值