76 Python开发-内外网收集Socket子域名DNS

news2025/1/13 0:19:35

目录

    • Python开发相关知识点
    • 本篇文章涉及知识点
    • 演示案例:
      • IP&Whois&系统指纹获取代码段-外网
      • CDN&子域名&端口扫描&交互代码段-外网
      • IP&计算机名&存活主机&端口扫描代码段-内网
      • Py格式解析环境与可执行程序格式转换-Pyinstaller
    • 涉及资源:

在这里插入图片描述
网上有一些渗透框架,网上经常有些平台,它上面有在线的插件,加载进去可以扫描,我们学会这些东西之后,就可以在上面按照它的格式去书写exp,然后在工具框架里面把这个功能导入进去,相当于丰富自己的漏洞库

Python开发相关知识点

1.开发基础环境配置说明
Windows10+Pycharm

2.Python开发学习的意义
学习相关安全工具原理
掌握自定义工具及拓展开发
解决实战中无工具或手工麻烦批量化等情况
在二次开发Bypass,日常任务,批量测试利用等方面均有帮助
如:WAF上面的绕过,免杀里面也涉及到python,可以用python生成一些免杀的payload,SRC批量收集并利用,AWD批量利用获取FLAG,CTF加解密脚本等

3.本篇文章涉及的技术方向
Socket,爬虫,正则表达式,框架开发等

本篇文章涉及知识点

Socket部分技术,进程命令执行,交互参数执行,NMAP工具模块使用,异常处理等

我们先目标爬取,爬取我们要测试的目标,把这个目标进行域名和IP的收集,会涉及到子域名和端口信息,子域名有很多,但是有些子域名它服务是没有的,看它端口有没有开放,来判定它服务有没有,把符合要求的WEB服务和中间件放到漏洞检测工具里面

批量扫和批量提交可以用python开发出来
在这里插入图片描述
我们要写出优化脚本出来,漏洞检测技术也是耗时间的,因为大部分是HTTP在请求,不会涉及到底层的,所以大部分漏洞检测工具都能写出来,只要你明白漏洞怎么检测和利用,没有任何问题

爬虫请求,带入数据,登录进去,然后打开相应页面,写入相关数据,都是可以帮你实现的

python能解决手工批量问题

演示案例:

IP&Whois&系统指纹获取代码段-外网

一般有些模块是自带的,有的需要你第三方去下载,就是你安装好py,它就有socket,os,time,sys,还有一些第三方的就需要你单独去安装,例如whois
在这里插入图片描述
使用pip去安装库文件,我们找到开发环境的地方,python解析器那里,script目录下是有个pip文件的
在这里插入图片描述
我们这边也可以更换源,提高下载的速度,有了库之后,我们就可以使用相关的功能
在这里插入图片描述
搜索关键字,域名指向IP,网上都有相应思路的
在这里插入图片描述

import socket

#域名反查IP功能
ip=socket.gethostbyname('www.xiaodi8.com')
print(ip)

我们攻击网站一般获取目标,然后判断CDN信息

判断CDN信息经常使用nslookup命令,这个命令是windows和linux通用的,像这种的就是没有使用cdn的,这里解析的IP地址只有一个
在这里插入图片描述
我们换一个有cdn的网站看一下,它对应的IP地址就多了很多
在这里插入图片描述
这个就是有cdn的,域名指向的都不一样
在这里插入图片描述
使用nslookup域名解析地址,发现非权威应答有多个解析IP地址,说明有cdn

有信息收集脚本,才会有漏洞利用

多地ping判断是否有cdn,涉及到爬虫技术,请求官方服务器是否有多个IP,通过点数进行判断,超过10个点,说明解析出多个IP地址
在这里插入图片描述

"""
2、识别目标是否存在CDN(内容分发网络)
   采用nslookup执行结果进行返回IP解析数目判断“.”的数量
   利用python去调用系统命令
"""
#  使用 os.system 方法执行的返回结果是不能进行操作的
# cdn_data = os.system('nslookup www.xiaodi8.com')  # nslookup 手工解析域名
# 使用os.popen() 方法执行系统命令
import os
cdn_data = os.popen('nslookup www.xiaodi8.com')
cdn_datas =cdn_data.read() # read()读取返回的结果
x = cdn_datas.count('.')   # count()方法统计某个字符串出现的数量,统计有多少的点来判断有多少个ip如果有多个ip都是不同的那这个域名就是开启了CDN
print(cdn_datas)
print(x)
if x > 10:                 # CDN 不存在的一般是10个点以内,大于这个数就是存在(服务器有两这个点,这里的服务器是未知所以少了两个点)
    print("CDN存在")
else:
    print("CDN不存在")

我们得到IP地址之后,要进行IP端口扫描
端口扫描的三种方法:
1.原生自写socket协议tcp,udp扫描,优点啥都不用干,不用装库,也不用干啥,就直接写,缺点是复杂,要一个个写

2.调用第三方模块等扫描,优点写法比第一种相对简单,写起来也比较方便,内网里面采用第二种

3.调用系统工具脚本执行,要打包工具到脚本同级目录,执行的时候脚本才能找到,而且对方在使用脚本的时候,不知道有没有装这个工具,优点是一个工具命令执行就完事了,缺点就是工具要打包到脚本里面去

先获取到网站域名的IP地址,使用socket,网络编程跟对方建立连接,再发送数据探针到端口是否存在

# 1.原生自写socket协议tcp,udp扫描
# 创建一个socket对象
import socket    # 网络编程模块
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 常见的计算机端口
ports={'21','22','135','443','445','80','1433','3306',"3389",'1521','8000','8888','7002','7001','8080',"9090",'8089',"4848"}
for i in ports:
    # 连接到服务端
    result = server.connect_ex(('47.75.212.155',int(i))) # 这里面一般是IP地址,也可以写域名,如果他有自带域名识别IP地址就可以。指定ip 和连接端口,int()把字符转换成整数
    if result == 0:
        print(f'连接成功,端口:{i}|open开启')
    else:
        print(f'连接失败,端口:{i}|close关闭')

端口扫描肯定是扫描一些有意义的,不可能每个端口都有意义,有些端口服务压根没有意义,推荐扫描常见端口,保持效率并且有用

扫描的速度问题,可以优化代码,然后多线程去测试的

它是在和脚本建立连接,然后全部请求,再返回结果,所以有点慢

whois查询是自带的,可以利用第三方库进whois查询也可以利用网上接口查询
在这里插入图片描述

from whois import whois  # 第三方的域名查询模块  安装:pip install python-whois
# 2. 调用第三方模块等进行扫描
# whois 查询
# 第三方库whois查询也可以利用网上接口查询:https://whois.chinaz.com/
# def whois_check(url):
data = whois("www.xiaodi8.com")
print(data)

第三方库信息是不如网上接口whois查询全的,所以我们要获取whois信息的话,尽量用网上接口

CDN&子域名&端口扫描&交互代码段-外网

我们渗透测试里面经常做的一件事,就是子域名查询:

1.利用字典加载爆破进行查询,只要你字典够大,那就没有找不到的域名,所以我们用那种方式都可以,两种方式都用都行

2.利用 bing 或第三方接口进行查询,优点是查询的速度较快,但是数据没有字典爆破的好,因为字典多,因为有些接口网上查不到,网上域名没有爬取到这个接口,所以你用这个接口去查可能查不到

#子域名查询
import time    # 时间模块
for zym_data in open('./子域名字典/dic.txt'):   # open() 方法读取文件
    zym_data = zym_data.replace('\n','')      # replace() 字符串的替换 将 \n 替换为空,就是把换行干掉(因为打印出来的数据多了很多空行)
    url = zym_data +'.xueersi.com'            # 拼接成完整的域名,就是查询xueersi.com的子域名
    try:                                      # 异常处理,因为如果子域名不存在gethostbyname() 查询会报错
        ip = socket.gethostbyname(url)        # socket.gethostbyname() 查询指定域名的ip地址,如果能查到就说明这里子域名是存在的
        print(f"{url} -> {ip}")
        time.sleep(0.1)                       # time.sleep() 延迟方法,单位:秒 这个不是必须的,是为了脚本运行的更好,把这个time模块载入进去
    except Exception as e:
        pass                                  # pass 没啥特殊的意义就是用来补全语法不让这里是空报错的
        # print(f"error,{url}子域名不存在")

我们把脚本写好,肯定是让别人用的,你自己写肯定知道怎么用,但是别人不知道,所以我们一般需要对代码优化一下

import os
import socket
import time
from whois import whois
import sys               # sys模块提供了一系列有关Python运行环境的变量和函数,如:如sys.argv函数实现从程序外部向程序传递参数;sys.platform函数用于获取当前系统平台。

def ip_check(url):
    ip = socket.gethostbyname(url)
    print(ip)  # 47.75.212.155
def cdn_check(url):
    cdn_data = os.popen(f'nslookup {url}')
    cdn_datas =cdn_data.read()
    x = cdn_datas.count('.')
    print(cdn_datas)
    print(x)
    if x > 10:
        print("CDN存在")
    else:
        print("CDN不存在")
 
"""
3、端口扫描
   1.原生自写socket协议tcp,udp扫描
   2.调用第三方模块等进行扫描
   3.调用系统工具脚本执行扫描
"""
# 1.原生自写socket协议tcp,udp扫描
# 创建一个socket对象
def port_check(url,ports=['21','22','135','443','445','80','1433','3306',"3389",'1521','8000','8888','7002','7001','8080',"9090",'8089',"4848"]):
    server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    for i in ports:
        result = server.connect_ex((url,int(i)))
        if result == 0:
            print(f'连接成功,端口:{i}|open开启')
        else:
            print(f'连接失败,端口:{i}|close关闭')
    data = whois(url)
    print(data)
    
def zym_check(url):
    urls = url.replace('www.','')                 
    for zym_data in open('./子域名字典/dic.txt'):
        zym_data = zym_data.replace('\n','')
        url = zym_data + urls
        try:                                      
            ip = socket.gethostbyname(url)        
            print(f"{url} -> {ip}")
            time.sleep(0.1)
        except Exception as e:
            pass
            # print(f"error,{url}子域名不存在")
 
if __name__ == '__main__':   # 这里里面的代码是模块内部的测试代码,外部调用是不会执行的
    # port_check('www.xiaodi8.com')      # 查询开放的端口
    # ip_check('www.xiaodi8.com')      # 域名反查ip
    # cdn_check('www.xiaodi8.com')     # cdn查询
    # whois_check('www.xiaodi8.com')   # 域名信息查询
    # zym_check('www.xueersi.com')     # 调用子域名查询函数,把要查询的域名传入
    """
     使用sys模块让我们写的脚本在程序外部也可以调用
    """
    # 使用了sys模块的argv方法后我们就可以在程序外部给程序传参:如在cmd命令提示符中输入:python.exe的路径 当前的程序路径  参数1 参数2
    # sys.argv[0]   # 表示程序自身的文件路径
    # sys.argv[1]   # 表示程序的第一个参数
    # sys.argv[2]   # 表示程序的第二个参数
    try:
        check = sys.argv[1]
        urls = sys.argv[2]
        print("程序运行中...")
        if check == 'all':
            port_check(urls)  # 查询开放的端口
            ip_check(urls)  # 域名反查ip
            cdn_check(urls)  # cdn查询
            whois_check(urls)  # 域名信息查询
            zym_check(urls)  # 调用子域名查询函数,把要查询的域名传入
    except Exception as e:
        print("请在程序外部传入两个参数")

这个脚本是单线程,不是多线程

IP&计算机名&存活主机&端口扫描代码段-内网

在内网里面,我们会扫描内网存活主机、端口情况、操作系统等信息,就不能不提到python的nmap模块

下面的代码相当于调用当前的nmap工具对内网进行探针,这种不是我们想要的,因为nmap工具很大,虽然它很简单,一条命令就解决,完全是说核心功能在工具上面,不是在你的脚本代码上
在这里插入图片描述
python集成有nmap、msf,还有各种各样安全工具的模块,它都集成有,所以你用python想写什么功能,就可以把这个模块加载进去写

nmap工具的功能,它在python里面有模块用的,直接用这个模块,相当于你调用了这个工具,就不需要我们把工具的整个目录搬进去了

内网主机信息探针有三种扫描方式:

1.原生利用ping进行获取

2.原生利用icmp,tcp,udp等协议获取

3.利用第三方模块库nmap等加载扫描获取

import nmap
nm = nmap.PortScanner()
data=nm.scan('www.xiaodi8.com','80,8888','-sV')
print(data)
 """
 使用nmap模块进行扫描
"""
import nmap
def nmappascan():
    nm = nmap.PortScanner(nmap_search_path=('nmap', r"F:\网安软件\Nmap\nmap.exe"))
    try:
        # -T4指定扫描过程中使用的时序模板,总共6个等级(0 - 5),等级越高,扫描速度越快,但是容易被防火墙和入侵检测设备发现。在扫描中应选择合适的等级。
        # 使用-f 选项可以对 nmap 发送的探测数据包进行分段。这样将原来的数据包分成几个部分,目标网络的防御机制例如包过滤、防火墙等在对这些数据包进行检测的时候就会变得更加困难
        data = nm.scan(hosts='192.168.100.0/24',arguments='-T4 -F')
        # print(nm.all_hosts())  # all_hosts()#扫描的所有主机
        print(nm.csv())  # csv()函数:返回值是一个CSV(逗号分隔文件格式)的输出。如果想看的更清楚一点,可以使用print输出csv()的内容。
        # print(data)
 
    except Exception as err:
        print("error")
 
if __name__ == '__main__':
    nmappascan()

Py格式解析环境与可执行程序格式转换-Pyinstaller

Pyinstaller安装与介绍:https://blog.csdn.net/qq_62789540/article/details/122482723

安装:pip install pyinstaller
更新:pip install --upgrade pyinstaller

然后在pthon项目文件的根目录打开cmd,运行命令

pyinstaller.exe -F test_neiwang.py

在这里插入图片描述
生成的文件在这个目录
在这里插入图片描述
执行以下,跟python代码执行是一样的
在这里插入图片描述
所以这里解决了执行环境的问题,在linux上安装完Pyinstaller之后,它会自己识别格式的

涉及资源:

pycharm工具包:https://www.jb51.net/softs/598504.html

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

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

相关文章

我的NPI项目之行业黑话 -- 电子/机构/软件/认证

因为最近的NPI项目,参加了很多项目的会议,有电子/机构/软件/认证相关的各方面的专业词汇就出现了。这里我将之称为黑话,就是对我(纯软件) 来说是黑盒的话。这里简单记录并用于理解。 EE有关: Layout,一直…

详解全志R128 RTOS安全方案功能

介绍 R128 下安全方案的功能。安全完整的方案基于标准方案扩展&#xff0c;覆盖硬件安全、硬件加解密引擎、安全启动、安全系统、安全存储等方面。 配置文件相关 本文涉及到一些配置文件&#xff0c;在此进行说明。 env*.cfg配置文件路径&#xff1a; board/<chip>/&…

树莓派界面改成中文

安装完树莓派系统(Raspberry Pi OS with Desktop)&#xff0c;第一次启动时&#xff0c;时会有如下面二个图所示&#xff0c;让你选择区域时区和语言。 树莓派默认的语言为英文&#xff0c;如果你在安装时没有选择的话&#xff0c;默认的区域为英国&#xff0c;语言为英国英文&…

Translation翻译插件

Translation插件是为IntelliJ IDEA开发的&#xff0c;因此只能在IntelliJ IDEA中使用。但是&#xff0c;如果你需要在其他软件中进行翻译&#xff0c;可以考虑使用其他的翻译工具或服务。例如&#xff0c;一些在线翻译网站&#xff08;如Google翻译、百度翻译等&#xff09;提供…

hosts文件、DNS、删除浏览器域名安全策略、浏览器代理

文章目录 1. hosts文件2. DNS3. 删除浏览器域名安全策略4. 浏览器代理服务器 1. hosts文件 位置 C:\Windows\System32\drivers\etc\hosts 没有后缀名 内容 ip 一个空格 域名 定义 hosts就是系统的一个配置文件&#xff0c;主要配置ip和域名的映射关系&#xff0c;相当于是本地…

低信噪比环境下的语音端点检测

端点检测技术 是 语音信号处理 的关键技术之一为提高低信噪比环境下端点检测的准确率和稳健性&#xff0c;提出了一种非平稳噪声抑制和调制域谱减结合功率 归一化 倒谱距离的端点检测算法 1 端点检测 1-1 定义 定义&#xff1a;在 存在背景噪声 的情况下检测出 语音的起始点和…

记录 Docker 中安装 ROS2

目录 1 安装 Docker 2 安装 ROS2 3 启动 Docker 4 测试 ROS2 环境 1 安装 Docker 1. 更新软件包sudo apt updatesudo apt upgrade2. 安装 docker 依赖sudo apt-get install ca-certificates curl gnupg lsb-release3. 添加 docker 官方 GPG 密钥curl -fsSL http://mirror…

小米路由器2(R2D) 安装 MIXBOX

1. 先刷开发版 ROM http://www1.miwifi.com/miwifi_download.html 进入上述网页&#xff0c;找到 R2D 点击下载 开发版 ROM 教程 看 下载按钮上边的 “刷机教程” 刷机教程 2. 开启SSH工具 登录自己的小米账号后&#xff0c;里面会显示出 自己的 root密码&#xff1b; 默认…

9_js_dom编程进阶3

Dom节点删除和复制操作事件加强讲解 1. 节点操作 1.1 删除节点 Node.removeChild() 方法从 DOM 中删除一个子节点。返回删除的节点。 child 是要移除的那个子节点。 node 是child的父节点。 PS&#xff1a;只能由父节点删除子节点 课堂案例&#xff1a;1.节点操作之删除节…

酷我音乐逆向 请求头 参数解密(js逆向)

免责声明&#xff1a;     本篇博文的初衷是分享自己学习逆向分析时的个人感悟&#xff0c;所涉及的内容仅供学习、交流&#xff0c;请勿将其用于非法用途&#xff01;&#xff01;&#xff01;任何由此引发的法律纠纷均与作者本人无关&#xff0c;请自行负责&#xff01;&…

使用Rust发送邮件

SMTP协议与MIME协议 SMTP&#xff08;简单邮件传输协议,Simple Mail Transfer Protocol&#xff09;是一种用于发送和接收电子邮件的互联网标准通信协议。它定义了电子邮件服务器如何相互发送、接收和中继邮件。SMTP 通常用于发送邮件&#xff0c;而邮件的接收通常由 POP&#…

通过C++程序实现光驱的自动化刻录和读取

文章目录 ISO文件格式光盘的基本概念光盘种类特点DVDR光盘使用windows调用Linux调用Linux平台下用到的C库:读取设备驱动列表向光驱中写文件 数字存储媒体快速发展的今天&#xff0c;光驱的使用已经不像以前那样普及了。但是在数据备份、安装软件和操作系统、旧设备兼容等领域还…

redis的搭建及应用(三)-Redis主从配置

Redis主从配置 为提升Redis的高可用性&#xff0c;需要搭建多个Redis集群以保证高可用性。常见搭建方式有&#xff1a;主从&#xff0c;哨兵集群等&#xff0c;本节我们搭建一主二从的多Redis架构。 redis主从安装1主2从的方式配置&#xff0c;以端口号为redis的主从文件夹。 主…

Elasticsearch8.x结合OpenAI CLIP模型实现图搜图及文搜图功能

前言 在当今大数据时代&#xff0c;搜索引擎已经是许多应用的核心组件之一&#xff0c;近年随着大模型以及AI技术&#xff08;如&#xff1a;自然语言处理NLP&#xff09;的流行&#xff0c;这些技术的结合将会创造出更多的应用场景&#xff0c;比如&#xff1a;电商商品搜索、…

实习知识整理12:点击购物车渲染出购物车中的商品并实现在购物车界面对商品价格和数量的相关操作

1. 点击购物车渲染出购物车商品界面 通过userId从购物车表中查找商品的相关信息 前端&#xff1a;需要向后端传递userId 后端&#xff1a; CartMapper.java CartMapper.xml CartService.java 接口 CartServiceImpl.java 实现类 CartController.java cartIndex.html页面 …

第二十一章Java网络通信

网络通信这一章 基本分为三个部分 网络基础概念和TCP,UDP这三个部分主要如下&#xff1a; 计算机网络实现了堕胎计算机间的互联&#xff0c;使得它们彼此之间能够进行数据交流。网络应用程序就是再已连接的不同计算机上运行的程序&#xff0c;这些程序借助于网络协议&#x…

【Unity动画系统】Unity动画系统Animation详解,参数细节你是否弄清?

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

电子学会C/C++编程等级考试2023年03月(七级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:走出迷宫 当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单。 假设你已经得到了一个n*m的迷宫的图纸,请你找出从起点到出口的最短路。 时间限制:1000 内存限制…

docker学习笔记03-持久化存储

1.docker架构 2.docker持续化存储-数据卷 //以后台方式运行容器 (推荐) docker run -d -v 宿主机目录/文件的绝对路径:容器内目录/文件的绝对路径[:rw/ro] -p 主机端口:容器端口 --name容器名称 镜像ID/镜像名称[:版本号]执行下面命令 docker run -p 1122:3306 --name mysql99…

脆皮大学生“拯救”方案——智慧高校智能视频监控系统的建设

随着“脆皮大学生”的网络热梗爆火&#xff0c;大学生日常监管问题也浮出水面。虽然高校大学生作为成年人&#xff0c;可以对自己的日常行为进行自我约束&#xff0c;但由于大学生涉世未深&#xff0c;缺乏独立生活经验&#xff0c;社会关系简单&#xff0c;在校期间&#xff0…