漏洞描述:

扫描漏洞如下:

代码:

// In IE6, the hash fragment and search params are incorrect if the

// fragment contains `?`.

getSearch: function() {

var match = this.location.href.replace(/#.*/, '').match(/\?.+/);

return match ? match[0] : '';

},

// Update the hash location, either replacing the current entry, or adding

// a new one to the browser history.

_updateHash: function(location, fragment, replace) {

if (replace) {

var href = location.href.replace(/(javascript:|#).*$/, '');

location.replace(href + '#' + fragment);

} else {

// Some browsers require that `hash` contains a leading #.

location.hash = '#' + fragment;

}

}

ReDoS(Regularexpression Denial of Service)正则表达式拒绝服务攻击。开发人员使用了正则表达式来对用户输入的数据进行有效性校验,当编写校验的正则表达式存在缺陷或者不严谨时, 攻击者可以构造特殊的字符串来大量消耗服务器的系统资源,造成服务器的服务中断或停止。

每个恶意的正则表达式模式应该包含:使用重复分组构造、在重复组内会出现、重复、交替重叠。

有缺陷的正则表达式会包含如下部分。

(a+)+
([a-zA-Z]+)*
(a|aa)+
(a|a?)+
(.*a){x} | for x > 10
注意: 这里的a是个泛指。

一些实际业务场景中会用到的缺陷正则:

英文的个人名字
Regex: ^[a-zA-Z]+(([\'\,\.\-][a-zA-Z ])?[a-zA-Z]*)*$
Payload: aaaaaaaaaaaaaaaaaaaaaaaaaaaa!

Java类名
Regex: ^(([a-z])+.)+[A-Z]([a-z])+$
Payload: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!

Email格式验证
Regex: ^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@(([0-9a-zA-Z])+([-\w]*[0-9a-zA-Z])*\.)+[a-zA-Z]{2,9})$
Payload: a@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!

多个邮箱地址验证
Regex: ^[a-zA-Z]+(([\'\,\.\-][a-zA-Z ])?[a-zA-Z]*)*\s+<(\w[-._\w]*\w@\w[-._\w]*\w\.\w{2,3})>$|^(\w[-._\w]*\w@\w[-._\w]*\w\.\w{2,3})$
Payload: aaaaaaaaaaaaaaaaaaaaaaaa!

复数验证
Regex: ^\d*[0-9](|.\d*[0-9]|)*$
Payload: 1111111111111111111111111!

模式匹配
Regex: ^([a-z0-9]+([\-a-z0-9]*[a-z0-9]+)?\.){0,}([a-z0-9]+([\-a-z0-9]*[a-z0-9]+)?){1,63}(\.[a-z0-9]{2,7})+$
Payload: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!

使用python来进行测试有缺陷的正则示例
$ python -c "import re;re.match('^[a-zA-Z]+(([\'\,\.\-][a-zA-Z ])?[a-zA-Z]*)*$', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaa!')"

解决方案:

防范手段只能降低风险而不能百分百消除ReDoS这种威胁。

1.  降低正则表达式的复杂度, 尽量少用分组;

2.  严格限制用户输入的字符串长度(特定情况下)。

对本次测试漏洞进行分析,似乎并不存在重复分组或嵌套分组的正则表达式,为了应对安全测试,建议解决方案如下:

方案1

使用{m, n}替代“*”、“+”等,限制匹配的字符数量,如:

var href = location.href.replace(/(javascript:|#).*$/, '');

修改为

var href = location.href.replace(/(javascript:|#).{0, 1000}$/, '');

方案2

使用字符串截取函数slice()或substring(),替代replace()函数,如:

var href = location.href.replace(/(javascript:|#).*$/, '');

修改为

var lochref = location.href;

var idxnum = lochref.indexof(“javascript:”);

if(idxnum == -1) idxnum = lochref.indexof(“#”);

var href = idxnum == -1? lochref : lochref.slice(0, idxnum + 1);

参考资料:

Regular expression Denial of Service - ReDoS

浅析ReDoS的原理与实践

Location 对象

正则表达式基础

js字符串截取函数slice()、substring()、substr()

漏洞:Client ReDos From Regex Injection相关推荐

  1. checkmarx检测js中的jQuery安全漏洞

    checkmarx安全漏洞检测问题(javascript)处理 漏洞 主要是接口数据.storage.输入内容转换为js.html代码 window.eval().document.innerHTML ...

  2. 浅谈XXE漏洞攻击与防御——本质上就是注入,盗取数据用

    浅谈XXE漏洞攻击与防御 from:https://thief.one/2017/06/20/1/ XML基础 在介绍xxe漏洞前,先学习温顾一下XML的基础知识.XML被设计为传输和存储数据,其焦点 ...

  3. Web安全手册(漏洞理解、漏洞利用总结)

    0x01 漏洞理解篇(Vulnerability) 前端 跨域安全 后端逻辑 0x02 漏洞利用篇(Exploit) SQL injection - MySQL XSS CSRF SSRF XXE S ...

  4. sql 整改措施 注入_SQL注入的漏洞及解决方案

    一.sql注入漏洞 1. SQL注入漏洞 SQL注入攻击(SQL Injection),简称为注入攻击,SQL注入,被广泛用于非法获取网站控制权.这是在应用程序的数据库层中发生的安全漏洞.在设计程序中 ...

  5. 渗透笔记之web漏洞概述

    文章目录 1.敏感信息泄露 风险等级 敏感信息泄露描述 敏感信息泄露的危害 敏感信息泄露修复方式 2.SQL注入 风险等级 SQL注入漏洞描述 SQL注入漏洞危害 SQL注入分类 SQL注入工具 SQ ...

  6. mysql服务攻击检测_3款SQL INJECTION攻击检测工具_MySQL

    SQLinjection 随着 SQL INJECTION 攻击的明显增多,微软近日发布了三个免费的攻击检测工具,可帮助网站管理员和检测存在的风险并对可能的攻击进行拦截. 工具一: Scrawlr 下 ...

  7. WEB 漏洞-XXEXML 之利用检测绕过

    WEB 漏洞-XXE&XML 之利用检测绕过 XXE&XML DTD 内部DOCTYPE 声明 外部DOCTYPE声明 内部实体声明 外部实体声明 为什么使用 DTD pikachu ...

  8. 【web安全原理分析】-XEE漏洞入门

    前言 XXE漏洞 XXE漏洞全称(XML External Entity Injection)即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意 ...

  9. 文件包含和命令注入漏洞

    文件包含和命令注入漏洞 文件包含漏洞 介绍 文件包含漏洞是代码注入的一种.其原理就是注入一段用户能控制的脚本或代码,让服务器端执行,代码注入的典型代表就是文件包含file inclusion.文件包含 ...

最新文章

  1. SQL语句小tips(持续更新)
  2. springboot使用HttpSessionListener监听器统计在线用户数
  3. mysql 实时备份_MySQL实现实时备份[转]
  4. iOS之常用的正则表达式
  5. 连接postgresql
  6. python 非线性多项式拟合_用python进行非线性回归-有什么简单的方法可以更好地拟合这些数据?...
  7. TextView跑步灯效果及在特殊情况下无效的解决方式
  8. 解压ubi文件_请问为什么AM3352 NAND FLASH UBI文件系统挂载失败?
  9. HDU2022 海选女主角【最值】
  10. LINUX文件处理命令
  11. 微信公号“架构师之路”学习笔记(一)-无限容量数据库架构设计(数据库分组、分片架构等)
  12. 2014最新开源微信源码 支持二次开发,微信对接公众平台多用户程序 全面体验
  13. 备考计算机三级数据库——SQL 案例
  14. 全网最详细ENSP安装教程,零基础网工小白必看!
  15. redis 复制功能测试(转阿辉的百度空间)
  16. python如何读取文件数据恢复_如何找回丢失的文件数据
  17. 不能设置一个python sdk_【君奉天|开发日记】Python SDK换唤醒词及设置服务配置
  18. Recylerview刷新图片闪烁
  19. SpringMVC视图及如何在域对象中共享数据
  20. 啊哈 , 算法 !--深度优先搜索( C语言版 )

热门文章

  1. Centos7 Apache 2.4.18编译安装
  2. Java中间件:淘宝网系统高性能利器
  3. discuzX 帖子 有的图片没输出 [attach]12323[/attach]的解决办法
  4. 机器学习的一些注意事项
  5. 计算机应用于材料组织结构检测,计算机在材料检测中的应用
  6. java web.xml 监听器_【JAVA 核心技术】java web 中的监听器
  7. java线程池怎么创建_java中的线程池,如何创建?
  8. 自动打包linux,Linux环境下Springboot自动打包发布功能
  9. php仿微信上传图片压缩,PHP仿微信多图片预览上传实例代码
  10. netlify支持php吗,hexo netlify 搭建简易博客