内外网收集Socket&子域名&DNS

8ca5d9399042cb51f89e4d7bbd1f60c1

python开发学习的意义

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

外网信息收集-IP查询&whois查询&CDN判断&端口扫描&子域名查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#导入模块

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不存在")


# 这种方法存在一个问题,就是有的域名不止www.xx.com这样的形式,而是bbs.xx.xx.com这样的形式,那么这样进行判断cdn就不是适应

# 端口扫描
# 1.自写socket协议tcp,udp扫描
# 2.调用第三方模块masscan,nmap等扫描
# 3.调用系统工具脚本执行
def port_check(url):
ip = socket.gethostbyname(url)#将主机名翻译成IPv4地址,不支持IPv6的域名解析
ports = {21, 22, 135, 443, 445, 80, 1433, 3306, 3389, 1521, 8888, 8080, 7002, 7001, 9090, 8089, 4848}#设置端口,如果这里想要遍历所有端口,这里搞一个循环就可以了
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)#创建TCP Socket
for port in ports:
result = server.connect_ex((ip, port))
#connect_ex() 方法也是用于连接到远程主机,但是它会返回一个错误码,而不是抛出异常。如果连接成功,则返回 0。否则,返回一个非零的错误码。
if result == 0:
print(str(port) + '|open')
else:
print(str(port) + '|close')


# 子域名查询
# 1.利用字典加载爆破进行查询
# 2.利用bing或第三方接口进行查询
def zym_check(url):
urls = url.replace('www.', '')
#将域名的www去掉
for zym_data in open('dic.txt'):
#载入字典
zym_data = zym_data.replace('\n', '')
#将换行符去掉
url = zym_data + '.xueersi.com'
#拼接url
try:
ip = socket.gethostbyname(url)
#这里的作用就是将域名转换成ip,如果成功说明这个子域名存在
print(url + '->' + ip)
#输出域名和ip
time.sleep(0.1)
except Exception as e:
pass


if __name__ == '__main__':
check = sys.argv[1]
url = sys.argv[2]
#sys.argv 参考https://www.cnblogs.com/aland-1415/p/6613449.html
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

需要安装python-whois

Snipaste_2023-08-16_08-37-44

运行:

Snipaste_2023-08-16_08-40-40

内网信息收集-系统判断&存活主机&端口扫描

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 导入模块
import os
from nmap import nmap # 需要安装python-nmap模块


# 系统判断
# 1.基于TTL值进行判断
# 2.基于第三方脚本进行判断
def os_check(url):
data = os.popen("nmap -O " + url, "r").read()#-O:激活系统探测
print(data)


# 内网主机信息探针
# 1.原生利用ping进行获取
# 2.原生利用icmp,tcp,udp等协议获取
# 3.利用第三方模块库nmap等加载扫描获取
def nmap_scan(url):
nm = nmap.PortScanner()
#portScanner()类用于实现对指定主机进行端口扫描 实例化
try:

# data = nm.scan(url, '80,8080','-sV')
data = nm.scan(hosts='192.168.70.0/24', arguments='-T4 -F')
print(nm.all_hosts()) #返回被扫描的主机列表给host
print(nm.csv())#将CSV输出作为文本返回
print(data)
except Exception as err:
print("error")


if __name__ == '__main__':
url = 'www.xiaodi8.com'
os_check(url)
#nmap_scan(url)

Snipaste_2023-08-16_09-37-18

Snipaste_2023-08-16_09-33-26

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

4c6ba77a62016f0da6416a27bb052179