什么是反向代理

这里我找了一段比较官方的解释。

反向代理(Reverse Proxy)是指以代理服务器来接受 Internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外就表现为一个服务器。我自己的理解 代理服务器就是充当了一个“中间人”。如果理解的不恰当还请师傅们指出来哈。

Nginx反向代理实例

这里拿我的一台vps做演示 ip:39.xxx.xxx.x。因为vps上装了宝塔 而且 又在宝塔里装了Nginx。

首先找到Nginx的目录。在我的vps上 目录是/www/server/nginx/

找到/www/server/nginx/config/nginx.conf文件

反向代理 https://www.xxx.com/

location / {  
 #如果后端的服务器返回 502、504、执行超时等错误,自动将请求转发到 upstream 负载均衡池中的
另一台服务器,实现故障转移。
      proxy_next_upstream http_502 http_504 error timeout invalid_header; 
   proxy_pass https://www.xxx.com/; 
   proxy_set_header Host 39.xxx.xxx.9; 
   proxy_set_header X-Forwarded-For $remote_addr;
  }

proxy_set_header 指令用于在向反向代理的后端 Web 服务器发起请求时添加指定的 Header头信息。

当后端 Web 服务器上有多个基于域名的虚拟主机时,要通过添加 Header 头信息 Host,用于指定请求的域名,这样后端 Web 服务器才能识别该反向代理访问请求由哪一个虚拟主机来处理。(39.xxx.xxx.9是我的vps地址。www.xxx.com是要反向代理的目标)

最后我们还需要制定以下 访问日志需要获取的内容 也是在nginx.conf里修改.在http下

log_format TestLog escape=json '$request_filename $http_x_forwarded_for $fastcgi_script_name $document_root $request_body' $http_cookie;

TestLog 要和上面的access_log对应不然日志不会起作用。

重点是$request_body(获取post数据),$http_cookie(获取cookie数据)这就是我们钓鱼的核心了。当有人访问并登陆我们反向代理的网站以后 我们点开日志就可以看到他的cookie和post提交的用户名和密码了。

反向代理钓鱼实例

这里我用我们学校的一个测试系统举例子 按照上面步骤反向代理学校的测试系统

之后看到一个一模一样的界面。为了怕学校领导找上门来我把css都撤了 哈哈哈。

这时候叫上万能的舍友来登陆一波康康。

根据Nginx.conf确定日志路径在/www/wwwlogs/access.log。讲道理舍友登陆了以后应该记录了 他登陆时提交的post 里面应该包含账号密码。和登录后的cookie信息。访问日志后看到登陆时的账号密码。目标站为https 不过问题不大JSESSIONID后面的是获取到舍友登陆后的cookie。直接替换cookie即可登陆舍友的账号。burp进行正则匹配cookie后进行替换。最后成功登陆。

写在最后

本文更多的是根据自己的理解去写的 如果哪里理解或是操作有问题 ,麻烦各位大佬指出来。感谢感谢。最后如果有对Nginx不太了解的,可以去看一下《实战Nginx:取代Apache的高性能Web服务器》这本书,当时也是国光大佬推荐我的,很不错。

本文作者:Sch0lar, 转自FreeBuf