netsh、ssf、proxychains、netsh端口转发
端口转发
1 本地端口转发(正向代理)
实验
kali:192.168.9.16
ubuntu: 192.168.9.15
ubuntu2 :192.168.9.10
首先就是主机安装ssh工具,用ssh做端口转发
kali开启ssh服务,需要下载openssh-server
apt-get install openssh-server
然后开启ssh服务
service ssh start
然后配置可使用密码进行ssh连接
配置文件在
/etc/ssh/sshd_config
然后将这个注释去掉并修改后面的值为yes
查看ssh服务是否开启
也可以通过查看端口进行判断
netstat -anpt
到此kali就开启了ssh服务
2.ubuntu开启ssh服务
Ubuntu开启ssh服务也是和kali一样的,编辑sshd_config然后修改为yes即可
然后进行端口转发实验
搭建实验环境
A主机:kali 192.168.9.16
B主机: ubuntu 192.168.9.15
C主机: ubuntu2 192.168.9.10
A主机----》C主机 无法通信
A主机-----》B主机------》C主机 可以通信
开始是可以ping通C主机的
使用iptables限制A主机访问C主机
// 这个规则就是在本机的防火墙中添加一条规则,-A参数就是添加,INPUT代表流入的数据 -s指定规则对应的IP -j
iptables -A INPUT -s 192.168.9.16 -j REJECT
就无法连接了
之后就使用ssh进行端口转发通过A主机本地的6666端口访问C主机的80端口的服务,利用跳板机B
// 这个命令就是开启本地转发 -L就是本地转发命令 这里的意思就是开启本地转发功能,创建一个ssh隧道,将本地的6666端口与主机192.168.9.10的80端口进行绑定,然后连接9.15主机,这里就实现了如果访问本地的6666端口就会将数据发送到15主机然后利用15主机去访问10主机80端口,将数据返回客户端。
A主机:ssh -L 6666:192.168.9.10:80 -NF 192.168.9.15
没有设置规则可以直接访问
然后设置规则后
之后使用ssh进行端口转发
// 这个命令就是通过本地的6666端口然后访问80主机C的80端口,利用的是B主机作为跳板
这条命令在A主机进行执行
ssh -L 6666:192.168.9.10:80 -NF 192.168.9.15
然后输入B主机的密码
之后就代理成功了
然后使用访问192.168.9.16:6666就能直接访问到10的资源
tips:这里有一个问题得注意,就是在代理的时候如果不写本机的ip就仅仅如下是不能代理成功的,查询资料知道,这个会去在ipv6地址进行绑定,导致失败,所以有两种方法,一种就是禁用ipv6
文件
/etc/default/grub
把GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
修改为
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash ipv6.disable=1"
就能这样请求
ssh -L 6666:192.168.9.10:80 -NF 192.168.9.15
第二种就是写上127.0.0.1或者本机IP,建议写本机IP,因为127.0.0.1其他机器无法通过这个进行访问。
清除规则的命令就是把-A换成-D即可
2 远程端口转发 (反向代理)
环境搭建
A主机:kali 192.168.9.16
B主机: ubuntu 192.168.9.15
C主机: ubuntu2 192.168.9.10
主机A---->主机C 不能通信
实现:
A--->B--->C 能通信
在主机C中设置不接收主机A的请求
iptables -A INPUT -s 192.168.9.16 -j REJECT
A访问C
然后在B主机建立隧道,使用远程端口转发
原理:这条命令详细解释,这条命令是在B主机上面进行执行的,-R就是用来指定远程端口转发的参数,然后整个的逻辑就是在A主机也就是kali主机上面监听一个6666端口,然后他的映射就是C主机也就没法和他通信的那台主机的80端口,使用的是B主机作为跳板进行访问
传输:首先就是如果有主机访问了主机A的6666端口,那么这些请求数据都会通过A主机和B主机建立的隧道发送给B主机,然后再由B主机向C主机80端口进行访问,之所以是远程端口转发,就是因为端口的监听是在A主机并不是在本地监听了。
这里有个问题,这里的*,应为ssh只能允许本地的端口绑定,但是我们想要的是远程绑定,就得修改配置/etc/ssh/sshd_config的这个配置修改为yes
或者直接指定*:port也可以。
B主机执行:ssh -R *:6666:192.168.9.10:80 -fN 192.168.9.16
然后打开A主机查看监听结果,这里可以看出已经成功监听了
ps -ef | grep ssh //查看ssh进程
然后windows访问A主机的6666端口就能直接访问到C主机的资源
动态端口转发
实现使用 A主机通过--socks5 代理B主机去访问C主机
-D 就是在本地创建一个socket代理,代理监听本地的端口,然后代理主机为指定的主机,实现的效果就是通过设置这个socket代理,可以实现利用代理主机通过ssh加密流量进行访问。
环境搭建:
C主机设置规则不允许A主机访问
iptables -A INPUT -s 192.168.9.16 -j REJECT
// 这条命令实现的效果就是通过代理本地的7777端口利用远程15主机进行访问
kali主机执行:ssh -D 7777 192.168.9.15
然后使用代理进行访问
验证是否成功使用了代理
使用wireshark进行抓包
可以看到流量全部都是192.168.9.15主机进行请求的,说明代理成功。
这个有个问题:默认的1080端口代理,如果使用的不是1080,那就得指定代理端口就不能直接写127.0.0.1
curl --socks5 127.0.0.1:7777 192.168.9.10/1.txt
netsh学习及端口转发实验
netsh是windows自带的网络设置管理工具,不用额外的安装
几个常用的命令
查询当前网络连接的信息
netsh interface show interface
显示路由信息
netsh interface ip show route
设置静态IP地址命令
netsh interface ip set address"以太网" static 192.168.9.1 255.225.255.255 192.168.9.1
动态IP设置
netsh interface ip set address "以太网" dhcp
禁用网络适配器
netsh interface set interface name="以太网" admin=disabled
启用网络适配器
netsh interface set interface name="以太网" admin=enable
netsh端口转发实验
环境:
server 2012 :192.168.9.11
kali: 192.168.9.16
win10 :192.168.9.13
kali--->server2012 无法访问
win10-->server2012 可以访问
实现:kali--->server2012访问效果
server 2012设置防火墙入站规则,不允许kali进行访问
netsh advfirewall firewall add rule name="Block_IP" dir=in action=block remoteip=192.168.9.23 protocol=TCP localport=80
就会一直卡住访问不了,这里我试过直接打开wf.msc进行设置,但是没有效果,直接使用命令就能成功的应用规则。
之后使用netsh进行代理
win10进行代理转发
命令
// 这个命令的意思就是将本地的TCP流量从本地端口7777传递到远程11主机的80端口,add v4tov4就是添加要给ipv4的端口代理,listenport=7777就是监听本地7777端口,后面的就是连接的远程地址
netsh interface portproxy add v4tov4 listenport=7777 connectaddress=192.168.9.11 connectport=80
命令
这一条命令可以查看现有的转发规则
interface portproxy show all
然后就能直接穿过防护墙访问到server 12的资源
还可以直接配置代理进行抓包
清除所有规则命令
netsh interface portproxy reset
ssf工具使用
正向代理
原理:就是利用ssf工具将内网端口转发到能够通信的跳板机,然后跳板机开启端口,攻击机器跳板机然后监听本地端口将流量进行转发,之后使用代理工具进行代理就能直接访问到内网主机服务。
实验:
win10 192.168.9.13 无法访问ubuntu 192.168.9.10主机apahce服务
目标:
利用ssf将内网流量转发到跳板机,攻击机进行连接并实现访问ubuntu服务
ubuntun 主机iptables 设置规则
iptables -A INPUT -s 192.168.9.13 -j REJECT
之后上传ssf工具至server 2008,开启端口
问题:使用ssf工具进行连接,连接失败
解决:关闭所有的防火墙或者使用命令设置防火墙规则开放特定端口,设置为允许,出战和入站规则都要设置,最直接的方法就是直接关闭所有的防火墙
跳板机开放端口
ssfd.exe -p 8889 # 下载ssf工具的时候会有很多的exe文件和certs文件,但是端口转发只用到certs和ssfd和ssf工具
上传certs和ssfd.exe至跳板机
然后开启端口
看到这样的界面说明就开启成功
然后攻击机进行连接
ssf.exe -D 6666 -p 8889 192.168.9.11 #这个命令就是使用ssf.exe监听6666端口然后连接11主机的8889端口
看到这里攻击机变成ok然后跳板机这里显示了我们监听的端口就代表已经成功的进行了端口转发
然后浏览器设置代理或者使用代理工具设置代理为127.0.0.1:6666即可访问内网主机服务
问题:设置代理后无法访问
解决,这里开启的是sockets代理而不是http代理,直接修改成socket代理即可访问
这个也可以使用在代理外网的场景,直接在外网服务器设置转发,本地机器进行连接,然后设置socket代理就能访问外网了。
反向代理就是在攻击机开放端口然后目标进行连接。这个适用于防火墙只允许出不允许进入的情况。
proxychains工具使用
这个工具适用于linux,在进行内网渗透的时候修改配置文件,使用proxychains xxx 就能实现使用代理去访问内网资产,比如目标上线到cs,然后利用cs做一个端口转发,之后在配置文件里面设置好cs的ip和端口就能实现对目标内网的探测和渗透测试
实验:
kali主机通过windows server 2012访问ubuntu内网,windows server 2012充当跳板机,然后使用ssf进行端口转发,kali通过设置proxychains配置进行ubuntu的内网访问
ubuntu iptables设置规则让kali无法访问
iptables -A INPUT -s 192.168.9.13 -j REJECT
proxychains工具不支持ping命令,这里使用ping命令是测试iptables的规则是否生效
之后kali下载proxychains
apt-get install proxychains
然后在跳板机使用ssf开放端口
ssfd.exe -p 8889
下载linux版本的ssf
然后执行
./ssf -D 6666 -p 8889 192.168.9.11
之后修改proxychains代理配置文件
然后保存使用proxychains进行测试是否能访问内网服务
先不使用proxychains进行访问
使用proxychains进行访问
代理成功,并返回内容。这个也可以直接在浏览器设置也可以访问,设置方法和burpsuit设置方法一样,只是协议和端口得修改正确,协议是socket。