1 B2 ?! v# t/ y) R# |! f 2 B8 f0 ^& ?5 g% Bselect * from table|---enter---|exec xp_cmdshell'xxxxxxxxxx' ' L7 g* L( v* Q6 p/ a # c B1 [8 @1 d1 r( V的语句都是可以正常执行的。而我以前竟然一直不知道!不过这个貌似跟连接数据库驱动有关系,odbc可以正常执行,sqloledb的话就会报错。有兴趣的继续研究吧? 2 o% z. [+ d8 k/ }( J6 q' h' A. C/ ]- g$ \! I" y; r
这样,以后遇到带空格过滤关键字的拦截程序,又可以发挥发挥了3 [8 V! E1 j& I9 a( k
可能大家早就知道了,不管怎么说,发在这里吧!1 j( d5 a1 b! R @ p* P( p; P- e7 a
+ t7 m6 c7 x! m d1 C: O) w/ ?
最近想起可能还有些ascii码可以用来在sql语句中代替空格,于是写个脚本测试了一下,结果在所有128个低位ascii字符中,chr(12)也可以在access里用,不过貌似chr(12)不能出现在and、or之类的关键词附近,原因不清楚。mysql中比access多一个chr(11)可以。至于mssql,挖日,直接从1到32的ascii码换成字符后都可以正常使用。* @* e6 E- c" L: `) N2 O2 x* i
e7 d% ^7 n& m, l& J; r. C. C5 K! M- _ \- J
, t! A) e4 }: v5 t8 x
对于中间应该出现空格的地方,用()进行替换,不过,对于很复杂的SQL语句就不太好用了。上面说到的是字符型的,如果是数值型,可以在id=1后加一个括号,不过这个我没有测试,1 V, q( t' i. x: M6 W3 W
比如:jmdcw.asp?id=(1)and(select.....),应该是可行的吧? " B `" O" l1 _