内网渗透 | 正向代理与nginx配置反向代理详解
2022-6-17 18:28:49 Author: www.freebuf.com(查看原文) 阅读量:5 收藏

0x00 前言

由于在红日靶场03中遇到了反向代理这个知识点,特此将反向代理进行讲解。

如果我们对如何配置nginx反向代理都不熟悉,就更别提渗透了,所以从头到尾来搭建一遍吧。

0x01 理论知识

一、正向代理

渗透测试过程中常说的挂代理,其实是省略了两个字:正向,也就是挂正向代理。

客户端A由于某些原因不能直接访问服务端C,但是B可以直接访问C。所以我们就将发送给C的请求,先给B,B收到后**代替**A请求C,再将结果返回给我们。

所以相对于C来说,它一直以为是B请求的C,而不知道客户端真正的ip地址。

image-20220508200556256

生活中有很多例子,例如A不认识中国首富,但是B认识首富,A想找首富借点钱,就会让B去找首富借钱。只要B肯保密,首富就只知道B找他借钱而不知道真正的其实是A。所以正向代理暴露的是代理服务器B的IP地址,隐藏了A的IP地址。

在渗透测试过程中,挂代理也不是百分百的安全,毕竟B可能不会替我们保密!

二、反向代理

反向代理,A想要访问C,但是其实是访问的B,B收到A的请求后会转发给C。

生活中也有很多例子,A觉着B很有钱,找B借10万,B其实是个穷光蛋,碍于面子才说有钱的,于是找首富C借10万,B再把10万给A。

说穿了A是借的首富C的钱,但是他不知道,以为就是B的钱。

所以反向代理暴露的是代理服务器B的IP地址,隐藏了真实服务器C的IP地址。对于A来说是没有感觉的。

image-20220508200833667

那么反向代理怎么在渗透测试过程中识别出来呢?我们来搭建环境测试一下。

0x02 环境准备

环境准备工作可能时间较长,我会以最简便快速的方式介绍。

一、两台虚拟机的网络配置

先将两台机器上安装好docker,再配置网络哈。

image-20220508194942260

二、kali安装docker

#添加Docker官方的GPG密钥
curl  -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
#更新源
echo 'deb https://download.docker.com/linux/debian stretch stable'> /etc/apt/sources.list.d/docker.list
#直接导入证书
apt-get -yinstall apt-transport-https  ca-certificates  curl  gnupg2  software-properties-common
#系统更新
apt-get update 
#安装docker
apt install docker.io && docker -v

三、centos7安装docker

curl -sSL https://get.daocloud.io/docker | sh

service docker start && docker -v

如果下图遇到此情况,执行rm -f /var/run/yum.pid 后再次运行即可

image-20220508194443888

四、Centos7 docker安装tomcat

原版docker 拉取的tomcat 中, webapps 这个目录里面是空的,没有任何内容。所以需要将其删除之后,将webapps.dist 改成webapps才能够成功,未免有些bug,我们使用别人制作好的一个无bug的镜像即可,很安全放心。

docker pull billygoo/tomcat8-jdk8
docker run -d -p 8080:8080 --name tomcat8 billygoo/tomcat8-jdk8

image-20220508203007577

五、Kali docker安装nginx

docker pull nginx
docker images 
docker run --name nginx -d -p 80:80 niginx

六、物理机配置hosts文件

打开hosts文件添加一条语句,将kali的ip与域名进行对应。如果修改不了可能是hosts文件是只读的,去掉只读的勾选框即可。

image-20220508210112699

image-20220508210200707

0x03 配置nginx反向代理

==因为centos7是仅主机内网机器,我们这里就不做防火墙配置了,假设物理机无法直接访问内网centos7的tomcat。==

我们可以直接访问kali的nginx,也就是www.nginx.com,我们想要达到的效果是:访问www.nginx.com,会自动跳转到内网centos7机器的tomcat上。

image-20220508211228351

一、kali docker的nginx容器安装vim编辑器

image-20220508211459340

docker ps -n 2
docker exec -it nginx /bin/bash
	apt update 			#在容器里运行
	apt -y install vim		#在容器里运行

二、配置nginx反向代理单个服务器单个端口

下面的命令均在docker nginx容器中运行

cd /etc/nginx/conf.d
vim default.conf

image-20220508211937873

在下图位置添加一句话,随后保存退出default.conf文件。

proxy_pass http://192.168.111.5:8080

image-20220508212514317

使用nginx -t验证有无配置错误

image-20220508212550568

确认无误后重新加载nginx的配置,或者重启docker容器

#容器内运行
nginx -s reload
#重启docker容器,在容器外运行
docker restart <容器ID>

随后我们再次访问www.nginx.com,就会发现跳转到了tomcat的页面(火狐浏览器需要清理浏览器缓存)

image-20220508213156607

对比一下,配置反向代理的前后使用火狐wappalyzer插件的信息收集效果

image-20220508213044555

三、配置nginx反向代理实现访问多个URL

实现效果:访问www.nginx.com是tomcat页面,也就是centos7的8080端口;

而访问www.nginx.com/XSS,则是访问的centos7的80端口下的XSS目录

image-20220508214929395

我们给centos7添加个网卡,安装一下apache服务,并在网站根目录放点东西。

image-20220508213846967

如法炮制,我在这里再添加一个location,后面跟了个XSS。因为在location字段后的路径不能重复。

image-20220508213726347

测试nginx配置和刷新nginx配置后,访问www.nginx.com/XSS,可以看到成功访问到了内网centos7XSS目录

image-20220508214149718

四、渗透测试效果

那么我在centos7的XSS目录下放入一个shell.php,并修改kalihosts文件

image-20220508215456139

使用蚁剑链接,

image-20220508215639637

可以看到,我们看到的信息中,上方为反向代理服务器的ip,而收集到的都是内网centos7的信息。

image-20220508215946727

五、关于上线被反向代理的机器

思考一下,我们是直接获得到的内网一台被反向代理的centos7机器的webshell,我们的kali无法直连centos7,centos7也不无法直连kali,也就是说我们无论使用msf或者cs生成正反向木马都不能让机器上线。

而想要上线,就必须通过反向代理服务器这台边界机。

拿到边界机后,进行端口转发或者代理隧道等,实现内网穿透,从而让被反向代理的机器上线。


文章来源: https://www.freebuf.com/articles/network/336577.html
如有侵权请联系:admin#unsafe.sh