被动信息收集

被动信息搜集主要通过搜索引擎或者社交等方式对目标资产信息进行提取,通常包括IP查询、 Whois查询、 子域名搜集等。 进行被动信息搜集时不与目标产生交互, 可以在不接触到目标系统的情况下挖掘目标信息。 主要方法包括: DNS解析、 子域名挖掘、 邮件爬取等

接下俩我们学习通过Python脚本来获取目标网站域名对应的IP地址, 以及获取注册时间、 注册人姓名、邮箱等信息


IP查询

Socket库函数中的gethostbyname() 获取域名所对应的IP值

import socket
ip = socket.gethostbyname(“www.baidu.com”)
print(ip)

运行结果

图片.png

Whois查询

from whois import whois

data = whois(“www.baidu.com”)

print(data)

图片.png

子域名挖掘

1.利用字典加载爆破查询

2.利用bing/第三方接口进行查询

这里我们先采用字典加载爆破查询

for zymz_data in open(“E:/dict.txt”):
zymz_data = zymz_data.replace(‘\n’,’’)
url =zymz_data+ “.xueersi.com”
print(url)

图片.png

对上述代码进一步优化,但需要注意下面这个错误

可以看到我们的思路并没有错误,但是却报错,因为这里我们需要进行异常处理

图片.png

import socket
import time

for zymz_data in open(“E:/dict.txt”):
zymz_data = zymz_data.replace(‘\n’,’’)
url = zymz_data+”.xueersi.com”
try:
ip = socket.gethostbyname(url)
print(url+’———>’+ip)
time.sleep(0.1)
except Exception as e :
print(“不存在”)

图片.png

为了直接显示有哪些子域名,进行如下简单修改

print(“不存在”)替换为pass

图片.png

为了方便用户使用,这里继续进行优化,即让用户输入网址后进行子域名查询


import socket
import time

def zym_check(url):
urls = url.replace(“www.”, ‘.’)
for zymz_data in open(“E:/dict.txt”):
url = urls
zymz_data = zymz_data.replace(‘\n’,’’)
newurl = zymz_data+url
try:
ip = socket.gethostbyname(newurl)
print(newurl+’———>’+ip)
time.sleep(0.1)
except Exception as e:
pass

if name == ‘main‘:

  1. zym_check('www.xueersi.com')

图片.png

CDN判断

思路:

  1. 利用nslookup执行结果进行返回IP解析数目判断
  2. 利用python去调用执行系统命令

import os

cdn_data = os.popen(“nslookup www.baidu.com”)

print(cdn_data.read())

图片.png
通过分析,我们去计算返回小点数来判断是否有CDN

import os

cdn_data = os.popen(“nslookup www.baidu.com”)

cdn_datas = cdn_data.read()

diannumber = cdn_datas.count(“.”)

if(diannumber>10):
print(“存在CDN”)
else:print(“不存在CDN”)

图片.png

主动信息收集

在内网中, 好的信息搜集能力能够帮助开发者更快地拿到权限及达成目标。内网里数据多种多样, 需要根据需求寻找任何能对下一步渗透行动有所帮助的信息。 信息搜集能力是渗透过程中不可或缺的重要一步。 下面将介绍各类搜集信息的方法

端口扫描

  1. 自定义socket协议tcp,udp扫描(自己去写原生态代码)
  2. 调用第三方masscan,nmap等扫描(轻松简单,他人提前写好)

import socket

port_num = {22,23,443,80}
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
for port in port_num:
result = server.connect_ex(‘39.106.226.142’,int(port))
if result == 0:
print(int(port)+’|open’)
else :
print(int(port)+’|close’)

课程代码是这样写的,但是我没有运行成功