0×01背景

现在的很多远控/后门因为目前主流防火墙规则的限制,基本上都采用TCP/UDP反弹回连的通讯形式;但是在较高安全环境下,尤其负责web相关业务的环境,因为安防设备(防火墙,IDS,IPS等)规则的严格限制,TCP/UDP(HTTP/HTTPS/DNS)甚至ICMP等隧道都不能很轻易从内网访问Internet,只接受外部的请求。在这种场景下,攻击者在拿到了webshell的前提下,考虑植入除webshell以外的后门就需要考虑如何来绕过防火墙等安防设备的限制了。

实际上关于端口复用这一古老的后门技术,一直研究者众多,也提出了一些卓有成效的方法和工具,其中很多的解决方案都是通过劫持web服务器相关进程/服务的内存空间、系统API甚至劫持网络驱动去达到目的,手法相当精妙,不过因为动作较大在不经意间就会触发主动防御。本文将从IIS 6.0以后的微软提供的原生机制出发,讨论一种较自然的端口复用的技术:Net.tcp Port Sharing,直译是为“端口共享”。

本文将通过分析Net.TCP Port Sharing这个机制,最后实现一个基于端口复用的正向后门,目的是分享一些攻防技术的研究成果,请勿作为非法用途。

0×02 Net.TCP Port Sharing 机制

在以前的Web应用中,一个Web应用绑定一个端口,若有其他应用则需要绑定其他的端口才能是西安监听。如下图所示,Web Application 1绑定了80端口后,Web Application 2再去绑定80端口会出错。

现在使用微软提供的NET.TCP Port Sharing服务,只要遵循相关的开发接口规则,就可以实现不同的应用共享相同的web服务器端口。如下图中Web Application1 和Web Application2同时绑定在80端口。

Net.TCP Port Sharing服务是WCF(Windows Communication Foundation)中的一个新的系统组件,这个服务会开启net.tcp 端口共享功能以达到在用户的不同进程之间实现端口共享。这个机制的最终是在HTTP.sys中实现的,目前将许多不同HTTP应用程序的流量复用到单个TCP端口上的HTTP.SYS模型已经成为Windows平台上的标准配置。这为防火墙管理员提供了一个共同的控制点,同时允许应用程序开发人员最小化构建可利用网络新应用程序的部署成本。跨多个 HTTP应用程序共享端口的功能一直是Internet信息服务(IIS)的一项功能。实际上,HTTP.SYS允许任意用户进程共享专用于HTTP流量的TCP端口。

HTTP.sys是在Windows Server 2003最开始引进的,这个驱动监听HTTP流量,然后根据URL注册的情况去分发,这样多个进程可以在同一个端口监听HTTP流量了。微软公开了HTTP Server API库,像httpcfg,netsh.exe等都是基于它的。如下图。

整个过程描述如下:

(1)当IIS或者其他的应用使用HTTP Server API去监听请求路径的时候,这些应用需要在HTTP.SYS上面注册url prefix ,关于注册URL的规则,可以参考MSDN: https://msdn.microsoft.com/en-us/library/windows/desktop/aa364698(v=vs.85).aspx 。这是注册的过程。

(2)当一个请求到来并被http.sys获取到,它需要分发这个请求给注册当前url对应的应用,这是路由的过程。

0×03 后门实现方式研究

微软提供了HTTP Server API库用于构建在Windows上的Web服务器,原生支持基于Net.tcp Port Sharing的Web Application 开发。目前HTTP Server API有两个版本,推荐使用HTTP Server API 2.0。微软提供了HTTP Server API 1.0的一个demo,地址在: https://msdn.microsoft.com/en-us/library/windows/desktop/aa364640(v=vs.85).aspx。

这是一个简单的基于HTTP Server API 1.0的web server 例子,通过修改可以实现远程命令执行的功能。

开发的应用只需要注册与当前系统不冲突的URL(绑定的地址是一致的,只是URL路径有差别),就可以实现URL注册,浏览器(或者自定义开发的客户端网络程序)访问对应的URL,服务端网络程序会根据自身注册的URL去解析执行客户端的命令。基于此,完全可以通过服务器注册一些特殊URL与客户端访问这些URL来达到一个HTTP一问一答的访问模式的正向后门。

0×04 功能演示

环境:Windows 2008 R2 x64

IIS 7.0(默认设置)

防火墙状态默认开启

权限要求:功能需要Adminstrator用户的完整性级别,即使没有启用Administrator,通过UAC提高程序完整性级别即可运行程序。

达到的目的:与Web服务器绑定同一端口,自身程序不监听端口,通过注册回调函数等待系统服务分发流量。服务器通过解析客户端发送的请求(GET/POST或者其它方法)载荷,解析执行命令,然后以HTTP Response 的形式返回给客户端。

(1)在部署IIS的服务器上,后门程序注册一个URL

  当前编写的只是一个demo,若是要做用户态Rootkit,就需要做自身隐藏的功能,请读者朋友们自由发挥,在这个过程中需要注意权限的控制。

(2)使用控制器连接目标机器的URL

当前控制器作为一个demo实现了一个交互式的CMD SHELL,代码优化后会开源出来。

0×05 缓解措施与对抗策略研究

(1)防火墙/IDS/IPS与web服务器配合使用,在其规则中采用白名单机制去判断是否属于web服务器当前允许的ACL URL。

(2)请大家提出更多的建议。

0×06 参考文献

https://www.codeproject.com/Articles/437733/Demystify-http-sys-with-HttpSysManager

https://msdn.microsoft.com/en-us/library/windows/desktop/aa364510(v=vs.85).aspx

转载于:https://www.cnblogs.com/h2zZhou/p/7283192.html

Web端口复用正向后门研究实现与防御相关推荐

  1. linux端口复用隐藏后门

    之前听前辈门说利用端口复用可以绕过服务端端口防护规则+进程审计,今天决定复现一下,划划水.水文一篇,表哥莫怪! 首先检查实验主机 192.168.246.131 端口,可以看到22端口是开着的,80端 ...

  2. linux 端口复用后门,一条命令实现端口复用后门

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

  3. 管理端口_内网渗透 | 红蓝对抗:Windows利用WinRM实现端口复用打造隐蔽后门

    目录 WinRM端口复用原理 端口复用配置 新增80端口监听 修改WinRM默认监听的端口 远程连接WinRM WinRM端口复用原理 该端口复用的原理是使用Windows的远程管理服务WinRM,结 ...

  4. php开启端口复用,WebServer端口复用后门

    0x00 有朋友问到了我一个关于"无端口可用"的问题.说在如下图所示的内网环境中,firewall只允许Web Server的80端口建立网络连接,并且Web Server上的80 ...

  5. 安全之路 —— 利用端口复用技术隐藏后门端口

    简介 前面我们介绍到我们可以用进程注入的方法,借用其他应用的端口收发信息,从而达到穿墙的效果,那么今天介绍一种新的方法,叫做端口复用技术,他能够与其他应用绑定同一个端口,但同时进行端口复用的程序会接管 ...

  6. iptables实现端口复用

    iptables实现端口复用 1.端口复用的概念 2.基于iptables的端口复用 2.0 前置概念 2.0.1 iptables自定义链 2.0.2 iptables recent模块使用 2.1 ...

  7. python监听多个udp端口_Python的Socket编程过程中实现UDP端口复用的实例分享

    关于端口复用 一个套接字不能同时绑定多个端口,如果客户端想绑定端口号,一定要调用发送信息函数之前绑定( bind )端口,因为在发送信息函数( sendto, 或 write ),系统会自动给当前网络 ...

  8. iptables端口复用

    环境: 攻击主机:Kali -- 192.168.218.135 目标主机:RHEL8 -- 192.168.218.129 什么是端口复用 端口复用是指不同的应用程序使用相同端口使用相同端口进行通讯 ...

  9. 利用Nginx反向代理解决80端口复用(内网域名转发)问题

    公司多台服务器,但只有一个公网IP,80端口只好给公司网站使用 那么访问其他业务系统只能用反向代理做域名转发去实现 即:利用web服务器的80端口代理其它服务器的非80端口,实现80端口复用 反向代理 ...

最新文章

  1. Delphi基础必记-快捷键
  2. html语言表格背景颜色,HTML_HTML表格标记教程(36):表头的背景色属性BGCOLOR,TH标记用于设定表格中某 - phpStudy...
  3. sqlserver 类似oracle的rownum功能: row_number
  4. python面试-Python面试中常见的3个问题
  5. MySQL索引相关的数据结构和算法
  6. Unity3D - UGUI的手动搭建
  7. zxing二维码的生成与解码(C#)
  8. quill鼠标悬浮 出现提示_CHERRY MC8.1鼠标评测:超前设计延续军火箱信仰
  9. org.springframework.boot:type=Admin,name=SpringApplication异常
  10. linux学习-使用DHCP动态管理主机地址
  11. 五年前,跳槽涨薪,你笑了,五年后,跳槽降薪,请接受
  12. 如何运用机器学习预测供应链需求,时间序列数据如何处理?
  13. ffmpeg处理RTMP流媒体的命令大全
  14. 用ODBC方式操作dbf文件
  15. h5页面如何切图_HTML5自助切图
  16. javascript代码混淆的原理
  17. Ember Route
  18. 汉英词典python
  19. ElasticSearch for GIS应用
  20. mysql navicat导入sql文件 报错 [Err] 1046 - No database selected

热门文章

  1. 斯坦福2019秋季课程:图机器学习资料全公开
  2. mysql存储过程split_mysql存储过程实现split示例
  3. ENVI5.3安装教程|带资源
  4. mysql 查询视图是否存在_sql server判断数据库、表、列、视图是否存在
  5. 730阵列卡支持多大硬盘_730元/瓶的光瓶李渡酒销售过亿后,李渡还有哪些大招?...
  6. r语言legend_R语言画热图时图例(legend)过多超出画图边界
  7. 基于PyQt的扫雷游戏实现_上篇
  8. Android自定义滑动进度条,Android自定义View实现圆形水波进度条
  9. hibernate mysql 配置文件_hibernate 框架的配置文件和映射文件以及详解
  10. mpmath.psi python_【Python Package】mpmath学习笔记(2)