被动信息搜集

 

 

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

 

 

 

 

 

 

4.1.1    DNS解析

DNS(Domain Name System ,域名系统)是一种分布式网络目录服务,主要 用于域名与IP地址的相互转换,能够使用户更方便地访问互联网,而不用去记住 一长串数字(能够被机器直接读取的IP)。就像拜访朋友要先知道别人家怎么走 一样,当Internet上的一台主机要访问另外一台主机时,必须首先知道其地址,

TCP/IP中的IP地址是由四段以“ .”分开的数字组成,记起来总是不如名字那么方 便,所以采用了域名系统来管理名字和IP的对应关系。本节将介绍如何通过

Python脚本获取目标网站域名对应的IP地址,以及获取注册时间、注册人姓名、 邮箱等信息。

1.IP查询

IP查询是通过当前所获取到的URL去查询对应IP地址的过程。可以应用 Socket库函数中的gethostbyname() 获取域名所对应的IP值。

例如,查询域名www.baidu.com所对应的IP值,代码如下:

>>> import socket

>>> ip = socket.gethostbyname( 'www .baidu .com ')

>>> print(ip)

输出结果:

2.Whois查询

Whois是用来查询域名的IP以及所有者信息的传输协议。简单地说,Whois就 是一个数据库,用来查询域名是否已经被注册,以及注册域名的详细信息(如域 名所有人、域名注册商等)。Python中的模块python-whois可用于Whois 的查询。

首先通过pip安装python-whois模块:

   pip install python-whois                                                                    

例如,通过Python 自带的whois模块查询域名www.baidu.com的注册信息,代 码如下:

 

 

 

 

 

>>> data = whois( 'www .baidu .com ')

>>>print(data)

输出结果如下所示:

3b949171caa8408a9bb2645f7d54f295.png bc8ee294617e4925a215f210b8c80878.png

 

 

 

 

 

4.1.2    子域名挖掘

域名可以分为顶级域名、一级域名、二级域名等。子域名(subdomain )是顶 级域名( 一级域名或父域名)的下一级。例如,mail.example.com和

calendar.example.com是example.com的两个子域,而example.com则是顶级域.com  的子域。在测试过程中,测试目标主站时如果未发现任何相关漏洞,此时通常会 考虑挖掘目标系统的子域名。子域名挖掘方法有很多种,例如,搜索引擎、子域 名破解、字典查询等。

下面将向大家介绍如何通过Python写一个简单的子域名挖掘工具。此处是通 过Bing搜索引擎(网址为必应)进行子域名搜集。代码如下:

#! /usr/bin/env python

#   *   coding:utf-8   *  

import requests

from bs4 import BeautifulSoup

from urllib.parse import urlparse

import sys

def bing_search(site, pages) :

Subdomain = []

headers = { 'User-Agent ' : 'Mozilla/5 .0 (X11; Linux x86_64; rv:60 .0) Gecko/ 20100101 Firefox/60 .0 ',

'Accept ' : '*/* ',

'Accept-Language ' : 'en-US,en;q=0 .5 ',

'Accept-Encoding ' : 'gzip,deflate ',

'referer ' : "http://cn .bing .com/search?q=email+site%3abaidu .

com&qs=n&sp=-1&pq=emailsite%3abaidu .com&first=2&FORM=PERE1"

}

for i in range(1,in t(pages)+1) :

url = "https://cn .bing .com/search?q=site%3a"+site+"&go=Search&qs=ds&

first="+ str((in t(i)-1)*10) +"&FORM=PERE"

conn = requests .session()

conn.get('必应 ', headers=headers)

html = conn .get(url, stream=True, headers=headers, timeout=8)

soup = BeautifulSoup(html.content, 'html.parser ')

job_bt = soup .findAll( 'h2 ')

for i in job_bt :

link = i.a .get( 'href ')

domain = str(urlparse(link) .scheme + " ://" + urlparse(link) .netloc) if domain in Subdomain:

pass

else:

Subdomain .append(domain)

print(domain)

if __name__ == '__main__ ' :

# site=baidu .com

if len(sys .argv) == 3:

site = sys .argv[1]

page = sys .argv[2]

else:

print ("usage: %s baidu .com 10" % sys .argv[0])

sys .exit(-1)

Subdomain = bing_search(site, page)

打开Linux系统终端,并执行命令Python3 subdomain.py baidu.com 15 ,输入

 

 

 

 

baidu.com ,表示对该域名进行子域名收集,数字15表示获取Ping搜索引擎页数, 运行效果如下所示:

 

dbde5d1978a341e7897c12f24ebf4171.png

 

14f85b19f47e4b21aba49d63242404de.png

 

 

4.1.3    邮件爬取

 

在针对目标系统进行渗透的过程中,如果目标服务器安全性很高,通过服务 器很难获取目标权限时,通常会采用社工的方式对目标服务进行进一步攻击。邮 件钓鱼攻击是常见的攻击方式之一。在进行钓鱼之前,需要针对目标相关人员的 邮件信息进行全面采集。下面将带领大家一起编写一个邮件采集工具。

此处邮件采集工具主要通过国内常见的搜索引擎(百度、Bing等)进行搜   集。针对搜索界面的相关邮件信息进行爬取、处理等操作之后。利用获得的邮箱 账号批量发送钓鱼邮件,诱骗、欺诈目标用户或者管理员进行账号登录或者点击 执行,进而获取目标系统的权限。该邮件采集工具所用到的相关库函数如下所

示:

 

sys

getopt

requests

1)在程序的起始部分,当执行过程中没有发生异常时,则执行定义的

start() 函数。通过sys.argv[]实现外部指令的接收。其中,sys.argv[0]表示代码本 身的文件路径,sys.argv[1:]表示从第一个命令行参数到输入的最后一个命令行  参数,存储形式为list类型:

if __name__ == '__main__ ' :

#定义异常

try:

start(sys .argv[1:])

except Keyboard Interrupt :

print("interrupted by user, killing all threads . . .")

2)编写命令行参数处理功能。此处主要应用getopt.getopt() 函数处理命令  行参数,该函数目前有短选项和长选项两种格式。短选项格式为“-”加上单个字母 选项;长选项格式为“--”加上一个单词选项。opts为一个两元组列表,每个元素形 式为“(选项串,附加参数)” 。当没有附加参数时,则为空串。之后通过for语句 循环输出opts列表中的数值并赋值给自定义的变量:

#主函数,传入用户输入的参数

def start(argv) :

url = ""

pages = ""

if len(sys .argv) < 2:

print("-h 帮助信息;\n")

sys .exit()

#定义异常处理

try:

banner()

 

 

 

 

 

opts,args = getopt.getopt(argv,"-u:-p:-h")

except getopt.GetoptError:

print( 'Error an argument! ')

sys .exit()

for opt,arg in opts:

if opt == "-u" :

url = arg

elif opt == "-p" :

pages = arg

elif opt == "-h" :

print(usage())

launcher(url,pages)

 

3)输出帮助信息,增加代码工具的可读性和易用性。为了使输出信息更加  美观简洁,可以通过转义字符设置输出字体颜色,从而实现需要的效果。开头部 分包含三个参数:显示方式、前景色、背景色。这三个参数是可选的,可以只写 其中的某一个参数。结尾部分可以省略,但是为了书写规范,建议以“\033[0m” 结 尾。其具体的输出格式如下所示:

开头:\033[显示方式;前景色;背景色m

结尾部分:\033[0m

示例代码如下:

print( '\033[0;30;41m print( '\033[0;31;42m print( '\033[0;32;43m print( '\033[0;33;44m print( '\033[0;34;45m print( '\033[0;35;46m print( '\033[0;36;47m

ms08067实验室欢迎你 \033[0m ')

ms08067实验室欢迎你 \033[0m ')

ms08067实验室欢迎你 \033[0m ')

ms08067实验室欢迎你 \033[0m ')

ms08067实验室欢迎你 \033[0m ')

ms08067实验室欢迎你 \033[0m ')

ms08067实验室欢迎你 \033[0m ')

示例的输出效果如下所示:

685242cd25e34f108302df989a9d1e6b.png

该部分主要代码如下所示,先以图案的形式输出脚本出自MS08067实验室, 然后输出有关该脚本使用的帮助信息,即可执行参数指令以及对应的功能简介。 代码如下:

#banner信息

def banner() :

print( '\033[1;34m######################################################### ###############################\033[0m\n '

 

 

 

 

 

'\033[1;34m######################################\033[1;32MMS08067实验室 \033[1;34m#####################################\033[0m\n '

'\033[1;34m######################################################### ###############################\033[0m\n ')

#使用规则

def usage() :

print( '-h : --help 帮助; ')

print( '-u: --url  域名; ')

print( '-p: --pages 页数; ')

print( 'eg: python -u "www .baidu .com" -p 100 '+ '\n ')

sys .exit()

##未授权函数检测

 

输出效果如下所示:

b57fb2445d3c40999240a1840b238c87.png

当然,此处也可以根据自己的喜好设置输出不同类型的字体颜色或者图案。

4)确定搜索邮件的关键字,并调用bing_search() 和baidu_search() 两个 函数,返回Bing与百度两大搜索引擎的查询结果。由获取到的结果进行列表合  并,去重之后,循环输出。代码如下:

#漏洞回调函数

def launcher(url,pages) :

email_num = []

key_words = [ 'email ', 'mail ', 'mailbox ', '邮件 ', '邮箱 ', 'postbox ']

for page in range(1,in t(pages)+1) :

for key_word in key_words:

bing_emails = bing_search(url,page,key_word)

baidu_emails = baidu_search(url,page,key_word)

sum_emails =  bing_emails + baidu_emails

for email in sum_emails:

if email in email_num:

pass

else:

print(email)

with open( 'data .txt ', 'a+ ') as f :

f.write(email + '\n ')

email_num .append(email)

5)用Bing搜索引擎进行邮件爬取。Bing引擎具有反爬防护,会通过限定

referer 、cookie等信息来确定是否是网页爬取操作。可以通过指定referer与

requests.session() 函数自动获取cookie信息,绕过Bing搜索引擎的防爬防护。代 码如下:

 

 

 

 

 

 

def bing_search(url,page,key_word) :

referer = "http://cn .bing .com/search?q=email+site%3abaidu .com&qs=n&sp=-1& pq=emailsite%3abaidu .com&first=1&FORM=PERE1"

conn = requests .session()

bing_url = "http://cn .bing .com/search?q=" + key_word + "+site%3a" + url + "&qs=n&sp=-1&pq=" + key_word + "site%3a" + url + "&first=" + str(

(page-1)*10) + "&FORM=PERE1"

conn.get('必应 ', headers=headers(referer))

r = conn .get(bing_url, stream=True, headers=headers(referer), timeout=8) emails = search_email(r .text)

return emails

 

6)用百度搜索引擎进行邮件爬取。百度搜索引擎同样设定了反爬防护,相  对于Bing搜索引擎来说,百度搜索引擎不仅对referer和cookie进行校验,还同时在 页面中通过JavaScript语句进行动态请求链接,从而导致不能动态获取页面中的信 息。可以通过对链接的提取,再进行request请求,从而绕过百度搜索引擎的反爬 设置,具体代码如下所示:

def baidu_search(url,page,key_word) :

email_list = []

emails = []

referer = "https://www .baidu .com/s?wd=email+site%3Abaidu .com&pn=1"

baidu_url = "https://www .baidu .com/s?wd="+key_word+"+site%3A"+url+"&pn= "+str((page-1)*10)

conn = requests .session()

conn .get(referer,headers=headers(referer))

r = conn .get(baidu_url, headers=headers(referer))

soup = BeautifulSoup(r .text, 'lxml ')

tagh3 = soup .find_all( 'h3 ')

for h3 in tagh3:

href = h3 .find( 'a ') .get( 'href ')

try:

r = requests .get(href, headers=headers(referer),timeout=8)

emails = search_email(r .text)

except Exception as e:

pass

for email in emails:

email_list.append(email)

return email_list

7)通过正则表达式获取邮箱号码。此处也可换成目标企业邮箱的正则表达 式,代码如下:

def search_email(html) :

emails = re .findall(r"[a-z0-9\ .\-+_]+@[a-z0-9\ .\-+_]+\ .[a-z]+",html,re .I) return emails

def headers(referer) :

headers = { 'User-Agent ' : 'Mozilla/5 .0 (X11; Linux x86_64; rv:60 .0) Gecko/ 20100101 Firefox/60 .0 ',

'Accept ' : '*/* ',

'Accept-Language ' : 'en-US,en;q=0 .5 ',

'Accept-Encoding ' : 'gzip,deflate ',

'Referer ' : referer

}

return headers

通过Python 3执行刚刚写完的脚本并通过-u参数指定域名,-p参数表示搜索引

 

 

 

 

 

擎的页数,其输出效果如下所示:

此处也可以指定其他域名,并将爬取结果打印到页面中

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/353421.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity中创建Ultraleap 3Di交互项目

首先&#xff0c;创建新的场景 1、创建一个空物体&#xff0c;重命名为【XP Leap Provider Manager】&#xff0c;并在这个空物体上添加【XR Leap Provider Manager】 在物体XP Leap Provider Manager下&#xff0c;创建两个子物体Service Provider(XR)和Service Provider(…

随机点名--好玩哦

大屏滚动&#xff0c;随机点名&#xff0c;可刺激哦 想屏幕名字滚动得快一点&#xff0c;sleep时间就小一点 效果图 代码 #!/bin/bash namefile"/opt/name.txt" linenum$(sed -n $ $namefile) while : docleartmp$(sed -n "$[RANDOM%linenum1]p" $namefi…

文件上传之大文件分块上传

原则&#xff1a;合久必分&#xff0c;分久必合 优势部分&#xff1a;减少了内存占用&#xff0c;可实现断点续传&#xff0c;并发处理&#xff0c;利用带宽&#xff0c;提高效率 不足之处&#xff1a;增加复杂性&#xff0c;增加额外计算存储 应用场景&#xff1a;云存储大文件…

Springboot的 Lombok全部关联注解以及核心注解@Data详解

目录 工具安装 依赖注入 注解类别 1. Getter / Setter 2. ToString 3. EqualsAndHashCode 4. NoArgsConstructor / RequiredArgsConstructor / AllArgsConstructor 5. Data 示例 注意事项 6. Value 7. Builder 8. Slf4j / Log / Log4j / Log4j2 / XSlf4j 9. NonN…

03.领域驱动设计:了解实体和值对象以及它们的区别

目录 1、概述 2、实体 1.实体的业务形态 2.实体的代码形态 3.实体的运行形态 4.实体的数据库形态 3、值对象 1.值对象的业务形态 2.值对象的代码形态 3.值对象的运行形态 4.值对象的数据库形态 5.值对象的优势和局限 4、实体和值对象的区别 5、总结 1、概述 DDD战…

企业虚拟机服务器中了lockbit3.0勒索病毒怎么办,lockbit3.0勒索病毒解密处理流程

对于企业来说&#xff0c;企业的数据是企业的核心命脉&#xff0c;关乎着企业的生产与运营的所有工作。随着网络技术的不断发展&#xff0c;网络安全威胁也在不断增加。近期&#xff0c;云天数据恢复中心接到了很多企业的求助&#xff0c;企业的虚拟机服务器遭到了lockbit3.0勒…

vue的pinia环境搭建

一、 pinia是什么&#xff1f; Pinia是Vue的新一代轻量级状态管理库&#xff0c;它允许您跨组件/页面共享状态。Pinia由Vue.js官方成员重新设计&#xff0c;旨在提供更直观、更易于学习的状态管理解决方案。 Pinia的主要特点包括&#xff1a; 对Vue2和Vue3提供良好的支持&#…

机器学习之pandas库学习

这里写目录标题 pandas介绍pandas核心数据结构SeriesDataFrameDataFrame的创建列访问列添加列删除行访问行添加行删除数据修改 pandas介绍 pandas是基于NumPy 的一种工具&#xff0c;该工具是为了解决数据分析任务而创建的。Pandas 纳入 了大量库和一些标准的数据模型&#xff…

C#学习(十一)——Array和Collection

一、集合 集合重要且常用 孤立的数据是没有意义的&#xff0c;集合可以作为大量数据的处理&#xff0c;可进行数据的搜索、迭代、添加、删除。 C#中&#xff0c;所有集合都必须实现ICollection接口&#xff08;数组Array除外&#xff09; 集合说明Array数组&#xff0c;固定长…

【Linux】进程间通信概念 | 匿名管道

文章目录 一、什么是进程间通信进程间通信的概念进程间通信的目的进程间通信的分类进程间通信的本质 二、什么是管道三、匿名管道匿名管道的原理✨站在内核角度理解管道✨站在文件描述符角度理解管道 pipe系统调用fork后在父子进程间使用管道通信代码实现 匿名管道的读写规则管…

初识人工智能,一文读懂机器学习之逻辑回归知识文集(7)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

CSS 双色拼接按钮效果

<template><view class="sss"><button> <!-- 按钮 --><view class="span"> 按钮 </view> <!-- 按钮文本 --></button></view></template><script></script><style>body {b…

uniapp微信小程序-input默认字的样式

需要的是这样的 问题 正常是在input框上面写样式就行&#xff0c;但是uniapp不起作用 解决 直接在input上写placeholder-style"color就解决了 <input class"findInput" type"text" placeholder"关键词查询"placeholder-style"co…

Gin 框架之jwt 介绍与基本使用

文章目录 一.JWT 介绍二.JWT认证与session认证的区别2.1 基于session认证流程图2.2 基于jwt认证流程图 三. JWT 的构成3.1 header : 头部3.2 payload : 负载3.2.1 标准中注册的声明 (建议但不强制使用)3.2.2 公共的声明3.2.3 私有的声明3.2.4 定义一个payload 3.3 signatrue : …

一文掌握SpringBoot注解之@Component 知识文集(5)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

操作系统(5)-----操作系统进程相关

目录 一.进程的组成 1.PCB&#xff08;进程控制块&#xff09; 2.程序段与数据段 二.进程的特征 三.进程的状态以及状态的转换 四.进程的组织 1.链接方式 2.索引方式 五.进程控制 六.进程控制相关原语 1.创建原语 2.撤销原语 3.阻塞原语 4.唤醒原语 5.切换原语 …

Spring MVC 请求流程

SpringMVC 请求流程 一、DispatcherServlet 是一个 Servlet二、Spring MVC 的完整请求流程 Spring MVC 框架是基于 Servlet 技术的。以请求为驱动&#xff0c;围绕 Servlet 设计的。Spring MVC 处理用户请求与访问一个 Servlet 是类似的&#xff0c;请求发送给 Servlet&#xf…

5G赋能智慧文旅:科技与文化的完美结合,打造无缝旅游体验,重塑旅游业的未来

一、5G技术&#xff1a;智慧文旅的强大引擎 5G技术的起源可以追溯到2010年&#xff0c;当时世界各国开始意识到4G技术已经达到了瓶颈&#xff0c;无法满足日益增长的移动通信需求。2013年&#xff0c;国际电信联盟&#xff08;ITU&#xff09;成立了5G技术研究组&#xff0c;开…

力扣516. 最长回文子序列

动态规划 思路&#xff1a; 字符串最长回文子序列问题可以转换为原字符串 s 和逆串 s 的最长公共子序列长度问题&#xff0c;具体推断过程可以参考 力扣1312. 让字符串成为回文串的最少插入次数问题变成了求两个字符串最长公共子序列长度问题&#xff0c;具体思路可以参考 力扣…

物联网协议Coap之C#基于Mozi的CoapClient调用解析

目录 前言 一、CoapClient相关类介绍 1、CoapClient类图 2、CoapClient的设计与实现 3、SendMessage解析 二、Client调用分析 1、创建CoapClient对象 2、实际发送请求 3、Server端请求响应 4、控制器寻址 总结 前言 在之前的博客内容中&#xff0c;关于在ASP.Net Co…