被动信息搜集

阅读: 评论:0

被动信息搜集

被动信息搜集

引言

被动信息收集是指不与目标主机进行直接交互,通常根据搜索引擎或者社交等方式间接获取目标主机的信息。

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

IP查询

IP查询是通过当前获取到的URL去查询对应IP地址的过程

Whois查询

Whois是用来查询域名的IP以及所有者信息的传输协议,简单来说就是一个数据库,用来查询域名是否已经被注册,以及注册域名的详细信息,如域名所有人、域名注册商等。

子域名挖掘

域名可以分为顶级域名、一级域名、二级域名。在测试过程中,测试目标主站时如果未发现任何相关漏洞,此时通常会考虑挖掘目标系统的子域名。子域名挖掘的方法有很多,如搜索引擎、子域名破解、字典查询等。

目前使用的工具中,我最喜欢的是Layer子域名挖掘机

邮件爬取

在针对目标系统进行渗透的过程中,如果目标服务器安全性很高,通过服务器很难获取目标权限时,通常会采用社工的方式对目标服务器进行进一步攻击。邮件钓鱼就是常见的攻击方式之一。针对搜索页面的相关邮件信息进行爬取、处理等操作后,利用获得的邮箱账号批量发送钓鱼邮件,诱骗、欺诈用户或者管理员进行账号登录或者点击执行,进而获取系统权限。

要用到的相关函数库

import sys
import getopt
import requests
from bs4 import BeautifulSoup
import re

主程序入口,sys.argv[0]表示代码本身的路径,sys.argv[1:]表示除路径外后面的所有参数,返回一个列表的形式

if __name__ == '__main__':#定义异常try:start(sys.argv[1:])except KeyboardInterrupt:print("interrupted by user,killing ")

编写主程序中的start函数,这里最重要的理解pt()这个函数,这个函数的作用主要是切割命令行参数,返回一个两元组列表,分别通过'-''--'进行切割

#主函数,传入用户输入的参数
def start(argv):url = ""pages = ""if len(sys.argv) < 2:print("-h 帮助信息;n")it()#定义异常处理try:banner()opts,args = pt(argv,"-u:-p:-h")except getopt.GetoptError:print('Error an argument!')it()for opt,arg in opts:if opt == "-u":url = argelif opt == "-p":pages = argelif opt == "-h":print(usage())launcher(url,pages)

opts为分析出的格式信息。args为不属于格式信息的剩余的命令行参数,即不是按照getopt()里面定义的长或短选项字符和附加参数以外的信息。for循环中的opt是元组中的第一个参数(即用户输入的参数),arg则是元组的第二个参数(即用户输入的参数值)。

输出帮助信息,增加代码工具的可读性和易用性

#banner信息
def banner():print('33[1;34m########################################################################################33[0mn''33[1;34m######################################33[1;32mpython安全实战33[1;34m#####################################33[0mn''33[1;34m########################################################################################33[0mn')#使用规则
def usage():print('-h: --help 帮助;')print('-u: --url 域名;')print('-p: --pages 页数;')print('eg: python -u "www.baidu" -p 100' + 'n')it()

接下来就是函数的主体了,也是核心部分,首先编写漏洞回调函数,增强代码的健壮性和可扩展性

#漏洞回调函数
def launcher(url,pages):email_num = []key_words = ['email','mail','mailbox','邮件','邮箱','postbox']for page in range(1,int(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_emailsfor email in sum_emails:if email in email_num:passelse:print(email)with open(&#','a+') as f:f.write(email + 'n')email_num.append(email)

然后编写两个爬虫函数,用于爬取邮件,因为Bing和Baidu都有反爬防护,可以通过限定referer、cookie等信息来绕过搜索引擎的防爬防护

#bingSearch
def bing_search(url,page,key_word):referer = "=email+site%3abaidu&qs=n&sp=-1&pq=emailsite%3abaidu&first=1&FORM=PERE1"conn = requests.session()bing_url = "="+key_word+"site%3a"+url+"&qs=n&sp=-1&pq="+key_word+"site%3a"+url+"&first="+str((page-1)*10)+"&FORM=PERE1&#('',headers=headers(referer))r = (bing_url,stream=True,headers=headers(referer),timeout=8)emails = search_)return emails#baiduSearch
def baidu_search(url,page,key_word):email_list = []emails = []referer = "=email+site%3Abaidu&pn=1"baidu_url = "="+key_word+"+site%3A"+url+"&pn="+str((page-1)*10)conn = requests.session()(referer,headers=headers(referer))r = (baidu_url, headers=headers(referer))soup = , 'lxml')tagh3 = soup.find_all('h3')for h3 in tagh3:href = h3.find('a').get('href')try:r = (href, headers=headers(referer),timeout=8)emails = search_)except Exception as e:passfor email in emails:email_list.append(email)return email_list

通过正则表达式获取邮箱号码,这里附上可选标志修饰符来控制匹配的模式。

def search_email(html):emails = re.findall(r"[a-z0-9.-+_]+@[a-z0-9.-+_]+.[a-z]+",html,re.I)return emailsdef headers(referer):headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36','Accept': '*/*','Accept-Language':'en-US,en;q=0.5','Accept-Encoding':'gzip,deflate','Referer':referer}return headers
修饰符描述
re.I使匹配对大小写不敏感
re.L做本地化识别(locale-aware)匹配
re.M多行匹配,影响 ^ 和 $
re.S使 . 匹配包括换行在内的所有字符
re.U根据Unicode字符集解析字符。这个标志影响 w, W, b, B.
re.X该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

最后附上完整的代码

import sys
import getopt
import requests
from bs4 import BeautifulSoup
import re#主函数,传入用户输入的参数
def start(argv):url = ""pages = ""if len(sys.argv) < 2:print("-h 帮助信息;n")it()#定义异常处理try:banner()opts,args = pt(argv,"-u:-p:-h")except getopt.GetoptError:print('Error an argument!')it()for opt,arg in opts:if opt == "-u":url = argelif opt == "-p":pages = argelif opt == "-h":print(usage())launcher(url,pages)#banner信息
def banner():print('33[1;34m########################################################################################33[0mn''33[1;34m######################################33[1;32mpython安全实战33[1;34m#####################################33[0mn''33[1;34m########################################################################################33[0mn')#使用规则
def usage():print('-h: --help 帮助;')print('-u: --url 域名;')print('-p: --pages 页数;')print('eg: python -u "www.baidu" -p 100' + 'n')it()#漏洞回调函数
def launcher(url,pages):email_num = []key_words = ['email','mail','mailbox','邮件','邮箱','postbox']for page in range(1,int(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_emailsfor email in sum_emails:if email in email_num:passelse:print(email)with open(&#','a+') as f:f.write(email + 'n')email_num.append(email)#bingSearch
def bing_search(url,page,key_word):referer = "=email+site%3abaidu&qs=n&sp=-1&pq=emailsite%3abaidu&first=1&FORM=PERE1"conn = requests.session()bing_url = "="+key_word+"site%3a"+url+"&qs=n&sp=-1&pq="+key_word+"site%3a"+url+"&first="+str((page-1)*10)+"&FORM=PERE1&#('',headers=headers(referer))r = (bing_url,stream=True,headers=headers(referer),timeout=8)emails = search_)return emails#baiduSearch
def baidu_search(url,page,key_word):email_list = []emails = []referer = "=email+site%3Abaidu&pn=1"baidu_url = "="+key_word+"+site%3A"+url+"&pn="+str((page-1)*10)conn = requests.session()(referer,headers=headers(referer))r = (baidu_url, headers=headers(referer))soup = , 'lxml')tagh3 = soup.find_all('h3')for h3 in tagh3:href = h3.find('a').get('href')try:r = (href, headers=headers(referer),timeout=8)emails = search_)except Exception as e:passfor email in emails:email_list.append(email)return email_listdef search_email(html):emails = re.findall(r"[a-z0-9.-+_]+@[a-z0-9.-+_]+.[a-z]+",html,re.I)return emailsdef headers(referer):headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36','Accept': '*/*','Accept-Language':'en-US,en;q=0.5','Accept-Encoding':'gzip,deflate','Referer':referer}return headersif __name__ == '__main__':#定义异常try:start(sys.argv[1:])except KeyboardInterrupt:print("interrupted by user,killing ")

代码效果图

总结:因为搜集信息的时候涉及很多爬虫的基本知识,因此有关Python爬虫方面的基础一定要扎实,而且上面的代码并不是一成不变的,因为网址的URL有可能会发生变化。

本文发布于:2024-02-01 15:18:04,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170677188537535.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:信息
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23