python安全开发——内外网收集 Socket&子域名&DNS

时间:2022-10-07 14:55:14

前言:

        做渗透测试,第一步就是进行信息收集,对于具体的环境下,需要不同的测试需求,通过自己编写的脚本进行测试会有事半功倍的效果,本文主要介绍了在信息收集的时候,我们可能使用到的库函数。

        本人水平有限,

python安全开发——内外网收集 Socket&子域名&DNS

 

(一)外网信息收集


 

1、域名反查IP功能



def ip_check(url):
ip = socket.gethostbyname(url)
print(ip)

 whois查询:

def chaxun(url):
data=whois.whois(url)
print(data)

        整理一下思路,我们进行信息收集的时候,会遇到CDN,使用nslookup找到该url下的IP数目信息,进行判断

2、识别目标是否存在CDN


import os
def cdn_check(url):
    ns = 'nslookup'+url
   # cdn_data = os.system(ns)
   # print(cdn_data) 对执行后的语句不会读取,只能输出
   #执行系统命令,将执行后返回的os对象进行read方法读取,将读取出来的结果存入变量
    cdn_data = os.popen(ns,'r').read()
   #通过正则表达式进行筛选
    count=cdn_data.count('.')
    if count>8:
        print("CDN 存在")
    else:
        print("CDN不存在")

Python os.popen() 方法 | 菜鸟教程

3、端口扫描


Python 网络编程 | 菜鸟教程

0x01 自写socket协议tcp,udp扫描

import socket
import os
def port_check(url):
    #gethostbyname找到域名对应的ip
    ip = socket.gethostbyname(url)
    #常用端口,也可以导入字典
    ports = {21, 22, 135, 443, 445, 80, 1433, 3306, 3389, 1521, 8000, 8080, 7002, 7001, 9090, 8089, 4848}
    for port in ports:
        #socket.AF_INET用于服务器与服务器之间的网络通信,此处是ipv4进行通信
        #socket.SOCK_STREAM 基于TCP的流行socket通信
        server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#创建对象
        #有的需要设置延迟
        server.settimeout(1)
        #循环通过connect_ex对ip的端口进行访问,如果端口存在则返回0
        state = server.connect_ex((ip,port))
        if state==0:
            print("port:{} is open".format(port))
        else:
            print('close')
        server.close()

0x02 调用第三方模块masscan,nmap等扫描

Nmap配合Masscan实现高效率扫描资产_墨痕诉清风的博客-程序员宅基地 - 程序员宅基地

0x03 .调用系统工具脚本执行

后续具体展开

4、子域名查询


0x01 利用字典加载爆破

Python 文件I/O | 菜鸟教程

for zym_data in open('dic.txt'):
    zym_data = zym_data.replace("\n",'')#将换行字符替换为空
    url = zym_data+".aliyun.com"
    try:
        ip = socket.gethostbyname(url)#获得子域名下的ip值
        print(url+'——>'+ip)
        time.sleep(0.8)
    except Exception as e:
        pass

0x02 利用bing或第三方接口进行查询

        后续具体展开。

Python 模块 | 菜鸟教程

总结:

Python 中的 if __name__ == __main__

# Author:Xiao wei
import socket,os,time
import sys
 
from whois import  whois  #需要安装python-whois模块
 
#IP查询:域名反查IP功能
def ip_check(url):
    ip=socket.gethostbyname(url)
    print(ip)
 
#whois查询
#第三方库进行whois查询,也可以利用网上接口查询
def whois_check(url):
    whois_data=whois(url)
    print(whois_data)
 
#CDN判断-利用返回IP条数进行判断
#识别目标是否存在CDN
def cdn_check(url):
    # 采用nslookup执行结果进行返回IP解析数目判断:如果非权威应答地址只有一个,那么这个网站无cnd,否则有cdn
    # 利用python去调用执行系统命令
    ns="nslookup "+url
 
    # 方法1:缺点是结果无法读取操作
    # cdn_data=os.system(ns)
    # print(data)
 
    # 方法2:
    cdn_data = os.popen(ns,'r').read()
    count=cdn_data.count('.')
    if count>8:
        print("CDN 存在")
    else:
        print("CDN不存在")
 
#端口扫描
#1.自写socket协议tcp,udp扫描
#2.调用第三方模块masscan,nmap等扫描
#3.调用系统工具脚本执行
def port_check(url):
    ip = socket.gethostbyname(url)
    ports={21,22,135,443,445,80,1433,3306,3389,1521,8000,8080,7002,7001,9090,8089,4848}
    server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    for port in ports:
        result = server.connect_ex((ip,port))
        if result == 0:
            print(str(port)+'|open')
        else:
            print(str(port)+'|close')
 
#子域名查询
#1.利用字典加载爆破进行查询
#2.利用bing或第三方接口进行查询
def zym_check(url):
    urls=url.replace('www.','')
    for zym_data  in open('dic.txt'):
        zym_data = zym_data.replace('\n','')
        url = zym_data + '.xueersi.com'
        try:
            ip = socket.gethostbyname(url)
            print(url + '->' + ip)
            time.sleep(0.1)
        except Exception as e:
            pass
 
if __name__ == '__main__':
    check = sys.argv[1]#sys.argv从0开始,是指定执行的脚本,[1]是指定参数
    url = sys.argv[2]  #接收第二个指定参数
    print(check)
    if check =='all':
        ip_check(url)
        whois_check(url)
        cdn_check(url)
        port_check(url)
        zym_check(url)
 
# 示例:python3 test.py all www.xiaodi8.com

(二)内网信息收集


nmap使用

首先python通过pip install python-nmap命令去安装nmap模块
将本地的nmap配置到环境变量中
python通过nmap模块去调用本地的nmap

Author:xiao wei
import os
from nmap import nmap #需要安装python-nmap模块
 
#系统判断
#1.基于TTL值进行判断
#2.基于第三方脚本进行判断
def os_check(url):
    data = os.popen("nmap -O " + url,"r").read()
    print(data)
 
#内网主机信息探针
#1.原生利用ping进行获取
#2.原生利用icmp,tcp,udp等协议获取
#3.利用第三方模块库nmap等加载扫描获取
def nmap_scan(url):
    nm = nmap.PortScanner()
    try:
        # data = nm.scan(url, '80,8080','-sV')
        data = nm.scan(hosts='192.168.73.0/24', arguments='-T4 -F')
        print(nm.all_hosts())
        print(nm.csv())
        print(data)
    except Exception as err:
        print("error")
 
if __name__ == '__main__':
    url = 'www.xiaodi8.com'
    os_check(url)
    # nmap_scan(url)

主机存活

import nmap
nm=nmap.PortScanner()
try:
nm.scan(hosts='192.168.2.0/24',arguments='-T4 -F')
#查看当前存活主机
print(nm.all_hosts())
#查看当前存活主机的详细信息
print(nm.csv())
except Exception as err:
print('errpr')

端口扫描

import nmap
nm=nmap.PortScanner()
data=nm.scan('ip.......','80,8888','-sV')
print(data)

总结:

        今天整理的不是很全面,后续继续完善。