News:禁止使用本博客的技术文章、源码、工具等用于非法用途,否则后果自负。

dns劫持配合nginx反代钓鱼

jasonx 1239 0 条

免责声明:

注意:所谓知己知彼 百战百胜,只有了解攻击者的方法,我们才有相对的防御措施。
本教程为了直观演示,模拟黑客进行渗透测试,请勿在未取得对方授权的情况下使用本教程方法进行渗透测试。
否则产生的一切后果自负。

前言:

最近在研究nginx反代和dns相关的技术,由于喜欢折腾就自己走了一遍流程,记录了整个过程。

反代后能做什么?

能做的就很多了,比如你可以作为中间人,插入个js钓鱼,或者抓包获取敏感信息等等。

0x00 环境要求:

  1. nginx服务器一台(境外)
  2. dns服务器一台
  3. 目标dns修改权限

0x01 反代服务器搭建:

首先nginx的服务器最好是境外的,系统为centos7。
ssh登录上去以后,运行以下代码安装宝塔控制面板。

yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && bash install.sh

安装完成以后,登录宝塔控制面板,首次登录时会提醒你安装环境套件。
选择安装nginx套件

01.png

安装完成以后,新建一个站点,输入你的钓鱼域名,其他不用设置,直接保存。

02.png

设置反向代理,填写反代的目标ip或者域名。
我这里是随便在fofa上搜索了一个ecshop的演示站点。

0.png

03.png

设置好了以后,我们访问下钓鱼域名看看是否成功。

b0.png

无法访问,这里我自己排查了是因为host的问题,我们去修改下配置文件就行了。
因为宝塔的编辑器有点问题,我们直接按下f12,然后点击配置文件看看路径吧。

b1.png

b2.png

把返回包里面的路径复制到这里打开就能找到反代配置文件

b3.png

把配置文件里面的$host修改成反代的ip地址就行了。

proxy_set_header Host $host;
修改后
proxy_set_header Host "116.62.147.*";

b4.png

我们再次刷新看看,发现css和js等都挂了。
这是因为我们反代的目标调用了第三方文件导致的。

b5.png

解决方法就是继续修改配置文件,在底部添加如下代码。

 location ~ .*\.(js|css|png|gif|jpg)$ {
             proxy_pass http://116.62.147.*;#解决反代的目标无法加载第三方css和图片等等
         }

b6.png

重新刷新访问看看,已经正常了。

b7.png

现在我们尝试中间人攻击,加入一个js试试。
后面我会附上完整的反代配置文件。

b8.png

可以看到我们的js代码已经成功替换了进去。

b9.png

这里就可以发挥你的想象啦,劫持表单或者挂个广告,xss等等都可以。
也可以替换网页内的其他内容,比如我们要替换他的导航条上的 “首页”

b10.png

首页被替换前:

b11.png

替换后:

b12.png

0x02 反代获取敏感信息:

反代后获取敏感信息的方法有很多。

  1. 劫持表单
  2. XSS
  3. 在反代服务器上抓包

第一种比较简单,但是也有一定的局限性。
详见这里:传送门

第二种方法我想不用说了,如我前面所说,替换一个xss payload上去就行了。

第三种方法网络上很少提到这种方法,我个人脑子一热想出来的骚姿势。
操作如下:

首先ssh登陆你的反代服务器
安装必备库

yum install flex
yum install bison
yum install gcc

安装tcpdump

yum install tcpdump

安装好了以后执行以下命令开始抓包。

tcpdump -i eth0 port 80  -t -w /home/tcpdump.pcap

现在我们模拟受害者去登录下看看

b13.png

登录以后,ssh可以停止抓包了,去宝塔的文件管理下,找到我们的抓包文件。
如果文件太大的话,点下后面的压缩 然后下载回来。

b14.png

下载到本地后,用Wireshark打开抓包文件。
通过数据包抓包记录里面发现已经抓到了刚刚登录的账号密码。
如果对方是个管理员的话,已经拿到了管理员账号密码啦。

b15.png

0x03 DNS代理服务器搭建

在很多情况下,我们拿到了路由器控制权,但是无法拿到内网的一点信息。
这时候修改dns然后劫持到钓鱼网站就派上用场了。

这里我使用的是win 2008 r2来搭建dns。
首先打开 服务器管理器
添加角色,添加dns服务器

1.png

这里因为我服务器是动态ip,所以有这个提示,不用理会。

2.png

然后一路下一步就行了,安装好了以后,在正向查找区域上右键。
新建区域

3.png

下一步

4.png

输入你要劫持的域名,以我博客为例。

5.png

一直保持默认,下一步就行了。

6.png

然后在你劫持的域名上右键,新建主机A记录。

7.png

名称输入* ip地址输入我们的nginx反代服务器ip。

8.png

现在我们修改下本机的dns来测试下。
打开本地连接 修改dns为我们刚刚搭建好的dns服务器ip。

s2.png

改完以后访问我的博客测试,发现无法访问。

s1.png

这是因为我们的反代服务器上没有绑定jasonx.cc这个域名。
去宝塔里面绑定下就行了。

s3.png

再次刷新发现已经被劫持到反代服务器上了,接下来可以使用上面提到的几种方法来做中间人攻击。
当然你可以发挥想象,想怎么玩都可以了。

s4.png

s5.png

s6.png

后记:

针对dns劫持,我们可以定期检查路由器的dns是否被修改,检查dhcp的dns设置。
针对反代,可以给自己的网站上ssl。

附上Nginx配置文件

#PROXY-START/
location /
{
    expires 12h;
    if ($request_uri ~* "(php|jsp|cgi|asp|aspx|htm|html)")
    {
         expires 0;
    }
    proxy_pass http://116.62.147.*;#目标域名或者ip
    proxy_set_header Host "116.62.147.*";
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;
    
    #持久化连接相关配置
    #proxy_connect_timeout 30s;
    #proxy_read_timeout 86400s;
    #proxy_send_timeout 30s;
    #proxy_http_version 1.1;
    #proxy_set_header Upgrade $http_upgrade;
    #proxy_set_header Connection "upgrade";

    proxy_set_header Accept-Encoding "";
    sub_filter_types text/html;
    sub_filter "首页" "我靠 首页被替换了<script>alert('我博客被劫持到这里来了')</script>";#这是替换内容
    sub_filter_once off;

    proxy_cache cache_one;
    proxy_cache_key $host$uri$is_args$args;
    proxy_cache_valid 200 304 301 302 1m;

    add_header X-Cache $upstream_cache_status;
 
    
}
 location ~ .*\.(js|css|png|gif|jpg)$ {
             proxy_pass http://116.62.147.*;#解决反代的目标无法加载第三方css和图片等等
         }
#PROXY-END/

与本文相关的文章

发表我的评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址