‍‍0x01开场白

‍‍‍‍这个议题呢,主要是教大家一个思路,而不是把现成准备好的代码放给大家。

‍‍可能在大家眼中WAF(Web应用防火墙)就是“不要脸”的代名词。如果没有他,我们的“世界”可能会更加美好。但是事与愿违。没有它,你让各大网站怎么活。但是呢,我是站在你们的这一边的,所以,今天我们就来谈谈如何绕过WAF吧。之所以叫做“杂谈”,是因为我在本次演讲里,会涉及到webkit、nginx&apache等。下面正式开始:)‍‍‍‍

‍‍0x02直视WAF:

‍‍‍‍作为第一节,我先为大家简单的说下一些绕过WAF的方法。‍‍

‍‍一:大小写转换法:‍‍

‍‍看字面就知道是什么意思了,就是把大写的小写,小写的大写。比如:

‍‍SQL:sEleCt vERsIoN();

‍‍XSS:

‍‍‍‍出现原因:在waf里,使用的正则不完善或者是没有用大小写转换函数‍‍‍‍

‍‍二:干扰字符污染法:

‍‍空字符、空格、TAB换行、注释、特殊的函数等等都可以。比如下面的:‍‍‍‍

‍‍SQL:sEleCt+1-1+vERsIoN   /*!*/       ();`yohehe‍‍

‍‍SQL2:select/*!*/`version`();

‍‍‍‍XSS:下面一节会仔细的介绍

‍‍‍‍出现原因:利用网站使用的语言函数特性来绕过waf的规则或者使用会无视的字符

‍‍‍‍三:字符编码法:

‍‍‍‍就是对一些字符进行编码,常见的SQL编码有unicode、HEX、URL、ascll、base64等,XSS编码有:HTML、URL、ASCII、JS编码、base64等等

‍‍‍‍SQL:load_file(0x633A2F77696E646F77732F6D792E696E69)

‍‍‍‍XSS:

‍‍‍‍出现原因:利用浏览器上的进制转换或者语言编码规则来绕过waf

‍‍‍‍四:拼凑法:

‍‍‍‍如果过滤了某些字符串,我们可以在他们两边加上“原有字符串”的一部分。

‍‍‍‍SQL:selselectect verversionsion();

‍‍‍‍XSS:rip>alalertertrip>

‍‍‍‍出现原因:利用waf的不完整性,只验证一次字符串或者过滤的字符串并不完整。

‍‍‍‍本节是告诉大家,waf总会有自己缺陷的,任何事物都不可能完美。

‍‍

‍‍0x03站在webkit角度来说绕过WAF:

‍‍‍‍可能这时会有人问到,说绕过WAF,怎么跑到webkit上去了。嗯,你没有看错,我也没有疯。之说以站在webkit角度来讲绕过WAF,是因为各个代码的功能是由浏览器来解析的。那浏览器中谁又负责解析呢?那就是webkit,既然要说到webkit,那就不得不提webkit下的解析器——词法分析器,因为我们在绕过的时候,就是利用解析器中的词法分析器来完成。

‍‍‍‍就比如一个简单的绕过WAF的XSS代码:

script:alert(1)" height=0 width=0 />

‍‍他可以弹窗,可以为什么他可以弹窗呢?这里面有回车、换行符啊。想要理解,我们来看看webkit下的Source/javascriptcore/parser/lexer.cpp是怎么声明的吧。while (m_current != stringQuoteCharacter) {        if (UNLIKELY(m_current =='\\')) {            if (stringStart != currentSourcePtr() && shouldBuildStrings)                append8(stringStart, currentSourcePtr() - stringStart);            shift();             LChar escape = singleEscape(m_current);             // Most common escape sequences first            if (escape) {                if (shouldBuildStrings)                    record8(escape);                shift();            } else if (UNLIKELY(isLineTerminator(m_current)))                shiftLineTerminator();

‍‍注意倒数第二行里的isLineTerminator函数。这里我来说说大致的意思:所有的内容都在一个字符串里,用while逐字解析,遇到换行就跳过。然后在拼成一个没有分割符的字符串,所以这时的XSS代码成功弹窗了。

‍‍‍‍Webkit里的词法分析器里除了跳过换行符,还会跳过什么字符呢?

‍‍‍‍子曰:还有回车等分隔符。

‍‍‍‍根据webkit词法分析器的机制,我们就可以写更多的猥琐xss代码。

‍‍‍‍下面再说说这个注意事项:

script:alert(1)" height=0 width=0 />

script:alert(1); height=0 width=0 />

‍‍因为在webkit的词法分析器里,跳过回车、换行等分隔符时有个前提,那就是必须用单/双引号围住,不然不会跳过。因为如果不使用引号,词法分析器会认为 回车、换行就是结束了,如果你运行上面这段代码,webkit会把java当做地址传给src。词法分析器跳过的前提就是建立在引号里的,切记。

‍‍‍‍这里在说一个:

‍‍‍‍回车、换行只在属性中引号里才会起作用。如果你对标签或者属性用 回车、换行,这时你大可放心,决对不会弹窗。而且在属

‍‍‍‍性值里 回车、换行随便用。如果空格出现在xss代码里并不会弹窗,但是如果出现在字符和符号之前,就可以弹了。如图:

‍‍

‍‍注意事项:

‍‍‍‍跳过回车和换行,不支持on事件。例如下面的代码

‍‍‍‍xss会弹窗,但是下面的代码就不行了

‍‍‍‍s可见加了Tab换行,就无法弹窗了。但是还是支持字符和符号之间加入空格的。

‍‍‍‍本节就是告诉大家,想要玩的更好,最好追溯到底层,从底层来看攻击手法,你会发现很多问题迎刃而解。

‍‍

‍‍0x04 利用Nginx&Apache环境 BUG来绕过waf:

‍‍‍‍这个bug比较鸡肋,需要在nginx&apache环境,而且管理员较大意。

‍‍‍‍这是一个不是bug的bug。

‍‍‍‍当网站采用前端Nginx,后端Apache时,需要在conf配置,当遇到PHP后缀的时候,把请求交给Apache处理。但是Nginx判断后缀是否为PHP的原理是根据URL的。也就是说如果当URL的后缀不是PHP的时候,他并不会把PHP教给Apache处理。

‍‍‍‍配置:

‍‍

‍‍乍一看,没什么问题。但是这里隐藏一个漏洞。

‍‍‍‍我在test目录建立一个index.php:

‍‍

‍‍利用nginx&apache这个bug,再加上浏览器默认会隐藏index.php文件名,那么漏洞就来了。

‍‍访问a.cn/test/?text=会弹窗,没有被waf.conf给拦截,因为nginx根据URL判断这不是php文件,并没有交给apache处理,也就没有走第三个location流程。

‍‍

‍‍本节是告诉大家,绕过WAF不用一直针对WAF,也可以利用环境/第三方的缺陷来绕过。

‍‍

‍‍0x05 从HTTP数据包开始说起:

‍‍‍‍一:现在有一部分网站waf是部署在客户端上的,利用burp、fiddler就可以轻松绕过。

‍‍‍‍很多时候我们遇到的情况就像这段代码一样:

‍‍‍‍

‍‍‍‍

‍‍‍‍把waf规则放到js里。我们可以提交一个woaini字符串,然后用burp、fiddler抓包、改包、提交,轻轻松松的绕过了客服端的WAF机制。

‍‍‍‍二:有的网站,他们对百度、google、soso、360等爬虫请求并不过滤,这时我们就可以在USER-Agent伪造自己是搜索引擎的爬虫,就可以绕过waf

‍‍‍‍三:有的网站使用的是$_REQUEST来接受get post cookie参数的,这时如果waf只对GET POST参数过滤了,那么久可以在数据包里对cookie进行构造攻击代码,来实现绕过waf。

‍‍‍‍四:有的waf对GET POST COOKIE都过滤了,还可以进行绕过。怎么绕过呢?

‍‍‍‍假设网站会显示你的IP或者你使用的浏览器,那么你就可以对IP、user-agent进行构造,在PHP里X_FORWARDED_FOR和HTTP_CLIENT_IP两个获取IP的函数都可以被修改。

本节告诉我们waf是死的,人是活的,思想放开。不要跟着WAF的思路走,走出自己的思路,才是最正确的。

‍‍0x06 WAF你算个屌:

‍‍‍‍很多人认为绕过WAF需要根据WAF的规则来绕过。但是我们可以忽视他,进行攻击。

‍‍‍‍我们利用第三方插件来进行攻击,因为第三方插件的权限非常大,而且他有一个特殊的性质,就是他可以跨域。

‍‍‍‍我们可以事先在插件里调用一个js代码,对方安装之后浏览任何网站都可以被XSS。

‍‍‍‍我们现在来看段Maxthon插件的源码:

‍‍‍‍def.Json:‍‍

‍‍test.js:‍‍

‍‍统一放在一个文件夹里,再用Mxpacke.exe生成一个遨游插件。

‍‍

双击就可以安装这个插件。

这不算是一个漏洞,因为插件必须要运行js代码,而XSS的宗旨就是 在网站里运行你所指定的js代码。所以,这个xss没办法修复,而且chrome火狐 等浏览器都存在。

‍‍资料下载

‍[作者/blackhole,本文属FreeBuf黑客与极客(Freebuf.COM)独家发布,未经允许禁止转载]‍

waf怎么读_技术分享:杂谈如何绕过WAF(Web应用防火墙)相关推荐

  1. [转]杂谈如何绕过WAF(Web应用防火墙)

    技术分享:杂谈如何绕过WAF(Web应用防火墙) 0×01开场白 这个议题呢,主要是教大家一个思路,而不是把现成准备好的代码放给大家. 可能在大家眼中WAF(Web应用防火墙)就是"不要脸& ...

  2. python个人博客搭建说明书_技术分享|利用Python Django一步步搭建个人博客(二)...

    原标题:技术分享|利用Python Django一步步搭建个人博客(二) Hello,欢迎来到我们的"利用Python Django一步步搭建个人博客"系列的第二部分.在第一部分中 ...

  3. 对称加密算法_技术分享丨这是一篇简单的小科普——什么是对称加密算法?(下)...

    大家好~我是贾正经,又到了干货满满的技术分享趴啦~ 上期我们讲解了对称加密算法的小知识,并介绍了国密算法中SM4算法的原理.(上集回顾) 本期带大家了解一下分组密码的五个模式. 分组密码的模式 首先了 ...

  4. mysql优化说出九条_技术分享 | MySQL 优化:为什么 SQL 走索引还那么慢?

    原标题:技术分享 | MySQL 优化:为什么 SQL 走索引还那么慢? 背景 2019-01-11 9:00-10:00 一个 MySQL 数据库把 CPU 打满了. 硬件配置:256G 内存,48 ...

  5. 干涉测量技术的应用_技术分享 | 石化行业测量仪表应用在线答疑

    众所周知,在化工和石化这类流程行业当中,稳定性和持续性是至关重要的生产"命脉",对于生产过程中使用的测量仪表有着极其严格的要求. 不仅所有测量仪表都必须满足严苛的国际标准,如PED ...

  6. 大表与大表join数据倾斜_技术分享|大数据技术初探之Spark数据倾斜调优

    侯亚南 数据技术处 支宸啸 数据技术处 在大数据计算中,我们可能会遇到一个很棘手的问题--数据倾斜,此时spark任务的性能会比预期要差很多:绝大多数task都很快执行完成,但个别task执行极慢或者 ...

  7. java生成sm4算法的对称密钥_技术分享丨这是一篇简单的小科普——什么是对称加密算法?(下)...

    原标题:技术分享丨这是一篇简单的小科普--什么是对称加密算法?(下) 大家好~我是贾正经,又到了干货满满的技术分享趴啦~ 上期我们讲解了对称加密算法的小知识,并介绍了国密算法中SM4算法的原理. 本期 ...

  8. hive中字段长度函数_技术分享:hive常用内部函数

    原标题:技术分享:hive常用内部函数 hive常用内部函数 hive是一种典型的数据仓库分析工具,常用语编写hql语句进行指标分析.在编写hql的过程中无疑会用到很多的函数,哪本章来编写一些常见的函 ...

  9. 这70个Java必背英语单词不会_技术分享 |这70个Java必背英语单词不会,就别说你是Java程序员!...

    对于刚开始学习Java编程的童鞋来说,会看到很多陌生的英语单词,甚至会因为这些英语单词对Java编程望而却步,应众多童鞋的要求,整理出一份Java最常用的英语单词: 播放GIF Compile:编绎 ...

最新文章

  1. cisco路由器基本实验之三 动态路由之RIP协议的配置(Boson NetSim)
  2. pdf转换成html python,在Python中将pdf转换为html
  3. 复习之 c实现 通讯录
  4. 使用Jedis出现Connection refused的解决方案
  5. 5g时代计算机网络过时,5g云电脑 取代主机(5g时代云电脑会普及吗)
  6. 云端研发新基建:Serverless与持续架构服务落地实践
  7. java tld 方法重载_自定义标签
  8. 计算机的配置以及简单的操作
  9. 解决iphone横屏时字体变大问题或者内容大小不一样等...
  10. java 复杂表达式计算_我的计算器. 用java实现的. 可以支持复杂表达式
  11. 土地利用转移矩阵图怎么做_土地利用转移矩阵怎么分析excel?
  12. java百度云盘,看完直呼内行
  13. 【解决方案】SkeyeARS及SkeyeIVMS技术助力地铁安防视频监控系统建设
  14. 【U3D方向专职猎头】 大厂、高薪职位资源多 非U3D资深勿扰 工作地点北京、深圳、上海、杭州、广州、成都、加微信17512088053
  15. 怎么识别自己的眼型?眼型图片参照
  16. python迭代遍历_迭代遍历思维
  17. Gitee生成公钥详细教程
  18. 有没有讲python模块的书_python - 模块,包
  19. 我写了一套SpringBoot微信小程序电商全栈就业实战课程,免费分享给CSDN的朋友们
  20. Teen Readers【青少年读者】

热门文章

  1. 【机器学习】K-Means 聚类是特殊的矩阵分解问题
  2. 基本IO函数的使用(open,write,read)(一)
  3. 宠物粮赛道拥挤,波奇、中宠、佩蒂、三只松鼠们如何赶风口?
  4. 为什么我从iOS返回Android
  5. 如何查看谷歌网页端保存的密码以及查看xshell连接中的密码
  6. CVPR2022论文速递(2022.4.20)!共13篇!
  7. 那些我们不知道的事儿!——Final Cut Pro for Mac
  8. 怎么把视频里的音乐提取成音频?
  9. 项目规范之husky lint-stated
  10. husky的仿真建图和导航