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()