由于在红日靶场03中遇到了反向代理这个知识点,特此将反向代理进行讲解。
如果我们对如何配置nginx反向代理都不熟悉,就更别提渗透了,所以从头到尾来搭建一遍吧。
渗透测试过程中常说的挂代理,其实是省略了两个字:正向,也就是挂正向代理。
客户端A由于某些原因不能直接访问服务端C,但是B可以直接访问C。所以我们就将发送给C的请求,先给B,B收到后**代替**A请求C,再将结果返回给我们。
所以相对于C来说,它一直以为是B请求的C,而不知道客户端真正的ip地址。
生活中有很多例子,例如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来说是没有感觉的。
那么反向代理怎么在渗透测试过程中识别出来呢?我们来搭建环境测试一下。
环境准备工作可能时间较长,我会以最简便快速的方式介绍。
先将两台机器上安装好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
curl -sSL https://get.daocloud.io/docker | sh
service docker start && docker -v
如果下图遇到此情况,执行rm -f /var/run/yum.pid
后再次运行即可
原版docker 拉取的tomcat 中, webapps 这个目录里面是空的,没有任何内容。所以需要将其删除之后,将webapps.dist 改成webapps才能够成功,未免有些bug,我们使用别人制作好的一个无bug的镜像即可,很安全放心。
docker pull billygoo/tomcat8-jdk8
docker run -d -p 8080:8080 --name tomcat8 billygoo/tomcat8-jdk8
docker pull nginx
docker images
docker run --name nginx -d -p 80:80 niginx
打开hosts文件添加一条语句,将kali的ip与域名进行对应。如果修改不了可能是hosts文件是只读的,去掉只读的勾选框即可。
==因为centos7是仅主机内网机器,我们这里就不做防火墙配置了,假设物理机无法直接访问内网centos7的tomcat。==
我们可以直接访问kali的nginx,也就是www.nginx.com,我们想要达到的效果是:访问www.nginx.com,会自动跳转到内网centos7机器的tomcat上。
docker ps -n 2
docker exec -it nginx /bin/bash
apt update #在容器里运行
apt -y install vim #在容器里运行
下面的命令均在docker nginx容器中运行
cd /etc/nginx/conf.d
vim default.conf
在下图位置添加一句话,随后保存退出default.conf
文件。
proxy_pass http://192.168.111.5:8080
使用nginx -t
验证有无配置错误
确认无误后重新加载nginx的配置,或者重启docker容器
#容器内运行
nginx -s reload
#重启docker容器,在容器外运行
docker restart <容器ID>
随后我们再次访问www.nginx.com
,就会发现跳转到了tomcat
的页面(火狐浏览器需要清理浏览器缓存)
对比一下,配置反向代理的前后使用火狐wappalyzer插件的信息收集效果
实现效果:访问www.nginx.com
是tomcat页面,也就是centos7的8080端口;
而访问www.nginx.com/XSS
,则是访问的centos7的80端口下的XSS目录
我们给centos7添加个网卡,安装一下apache服务,并在网站根目录放点东西。
如法炮制,我在这里再添加一个location
,后面跟了个XSS
。因为在location
字段后的路径不能重复。
测试nginx配置和刷新nginx配置后,访问www.nginx.com/XSS
,可以看到成功访问到了内网centos7
的XSS
目录
那么我在centos7的XSS目录下放入一个shell.php
,并修改kali
的hosts
文件
使用蚁剑链接,
可以看到,我们看到的信息中,上方为反向代理服务器的ip,而收集到的都是内网centos7的信息。
思考一下,我们是直接获得到的内网一台被反向代理的centos7机器的webshell,我们的kali无法直连centos7,centos7也不无法直连kali,也就是说我们无论使用msf或者cs生成正反向木马都不能让机器上线。
而想要上线,就必须通过反向代理服务器这台边界机。
拿到边界机后,进行端口转发或者代理隧道等,实现内网穿透,从而让被反向代理的机器上线。