Python安全开发

  • 学习的意义
  • 一、外网信息收集
  • 1.1域名反查ip
  • 1.2cdn判断
  • 1.3端口扫描
  • 1.4 whois查询
  • 1.5子域名查询
  • 1.6交互式
  • 1.7主函数
  • 二、全部代码


学习的意义

学习相关安全工具原理
掌握自定义工具拓展开发
解决实战中无工具或者手工麻烦批量化等情况
在二次开发bypass,日常任务,批量测试等方面均有帮助
如src批量收集并利用,awd批量利用获取flag,ctf加密脚本等

一、外网信息收集

1.1域名反查ip

import socket,os,time,sys
from whois import whois

def ip_check(url):
    ip = socket.gethostbyname('www.youthbelief.club')
    print(ip)

1.2cdn判断

#识别目标是否存在CDN
#1.采用nslookup 执行结果 进行返回ip解析数目判断
#相当于 利用python 系统命令 os.system()
#调用cmd中文乱码 先执行一次 os.system(‘chcp 65001’)
#2. 根据返回结果存在的.数 判断是否存在cdn 如果超过10个 就解析出多个ip 存在cdn。

import os
os.system('chcp 65001')
#cdn_data = os.system('nslookup www.youthbelief.club')
cdn_data = os.popen('nslookup www.youthbelief.club')
cdn_datas = cdn_data.read()
#print(cdn_datas)
nums = cdn_datas.count('.')
print(nums)
if nums>10:
    print("cdn存在")
else:
    print("cdn不存在")

1.3端口扫描

#端口扫描
#1.原生自写socket协议 tcp udp 扫描
#2.调用第三方模块nmap masscan 等扫描
#3.调用系统工具脚本执行
下边用第一种

def port_check(url):
    ip = socket.gethostbyname(url)

    ports={'21','22','3389'}
    server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    for port in ports:
        result = server.connect_ex((ip,int(port)))
        #print(result)
        if result ==0:
            print(port+'|开放')
        else:
            print(port+'|未开放')

1.4 whois查询

#whois查询
#第三方库进行whois查询也可以利用网上接口查询

下方代码用第三方库
需要先cmd下载库
pip install python-whois
第三方库 不如网上站长之家接口全
尽量用网上结果

def whois_check(url):
    data = whois(url)
    print(data)

1.5子域名查询

#子域名查询
#1.利用字典爆破进行查询
#2.利用bing或第三方接口进行查询

def subdomain_check(url):
    url = url.replace('www.','')
    print(url)
    for zym_data in open('dic2.txt'):
        zym_data = zym_data.replace('\n','')
        url2 = zym_data+'.'+url
        #print(url2)
        try:
            ip=socket.gethostbyname(url2)
            print(url2+'->'+ip)
            time.sleep(0.1)
        except Exception as e:
            pass

1.6交互式

def start():
    print('运行示例:python 1.py all xxx.com'  )
    url = sys.argv[2]
    check = sys.argv[1]
    if check == 'ip':
        ip_check(url)
    elif check=="cdn":
        cdn_check(url)
    elif check=="whois":
        whois_check(url)
    elif check=='sub':
        subdomain_check(url)
    elif check=='all':
        ip_check(url)
        cdn_check(url)
        whois_check(url)
        subdomain_check(url)

1.7主函数

if __name__ == "__main__":
    start()

二、全部代码

# -*- coding:utf-8 -*-

import socket,os,time,sys
from whois import whois

#域名反查ip

def ip_check(url):
    ip = socket.gethostbyname('www.youthbelief.club')
    print(url+'域名反查ip结果为'+ip)


#识别目标是否存在CDN
#1.采用nslookup 执行结果 进行返回ip解析数目判断
#  相当于  利用python 系统命令  os.system()
# 调用cmd中文乱码 先执行一次 os.system('chcp 65001')

def cdn_check(url):
    os.system('chcp 65001')
    #cdn_data = os.system('nslookup www.youthbelief.club')
    cdn_data = os.popen('nslookup www.youthbelief.club')
    cdn_datas = cdn_data.read()
    #print(cdn_datas)
    nums = cdn_datas.count('.')
    if nums>10:
        print("cdn存在")
    else:
        print("cdn不存在")


# 端口扫描
#1.原生自写socket协议 tcp  udp 扫描
#2.调用第三方模块nmap  masscan 等扫描
#3.调用系统工具脚本执行

def port_check(url):
    ip = socket.gethostbyname(url)

    ports={'21','22','3389'}
    server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    for port in ports:
        result = server.connect_ex((ip,int(port)))
        #print(result)
        if result ==0:
            print(port+'|开放')
        else:
            print(port+'|未开放')

#whois查询
#第三方库进行whois查询也可以利用网上接口查询
def whois_check(url):
    data = whois(url)
    print(data)

#子域名查询
#1.利用字典爆破进行查询
#2.利用bing或第三方接口进行查询
def subdomain_check(url):
    url = url.replace('www.','')
    print(url)
    for zym_data in open('dic2.txt'):
        zym_data = zym_data.replace('\n','')
        url2 = zym_data+'.'+url
        #print(url2)
        try:
            ip=socket.gethostbyname(url2)
            print(url2+'->'+ip)
            time.sleep(0.1)
        except Exception as e:
            pass


def start():
    print('运行示例:python 1.py all xxx.com'  )
    url = sys.argv[2]
    check = sys.argv[1]
    if check == 'ip':
        ip_check(url)
    elif check=="cdn":
        cdn_check(url)
    elif check=="whois":
        whois_check(url)
    elif check=='sub':
        subdomain_check(url)
    elif check=='all':
        ip_check(url)
        cdn_check(url)
        whois_check(url)
        subdomain_check(url)

if __name__ == "__main__":
    start()