被动信息搜集:复现MS08067实验室邮件爬取 原创

简介: 被动信息搜集:复现MS08067实验室邮件爬取 原创

被动信息搜集:复现MS08067实验室邮件爬取
在针对目标系统进行渗透的过程中,如果目标服务器安全性很高,通过服务器很难获取目标权限时,通常会采用社工的方式对目标服务进行进一步攻击。邮件钓鱼攻击时常见的攻击方式之一。在进行钓鱼之前,需要针对目标相关人员的邮件信息进行全面采集。现分享MS08067实验室编写的邮件采集工具,此邮件采集工具通过国内常见的搜索引擎(百度、Bing等)进行搜集。

运行环境:

OS: macOS Monterey Version 12.3.1 (英文版)

IDE:PyCharm 2020.1

源码如下:

#_*_coding:utf-8_*_
# 作者      :liuxiaowei
# 创建时间   :4/15/22 8:45 PM
# 文件      :邮件爬取.py
# IDE      :PyCharm

# 导入相关模块
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")
        sys.exit()
    # 定义异常处理
    try:
        banner()
        opts, args = getopt.getopt(argv, "-u:-p:-h")

    except getopt.GetoptError:
        print("Error an argument!")
        sys.exit()
    # 遍历选项列表,元素为元组('-u', url),('-p', '1')
    for opt, arg in opts:
        if opt == "-u":
            url = arg
        elif opt == "-p":
            pages = arg
        elif opt == "-h":
            print(usage())

    launcher(url, pages)

#  banner 信息
def banner():
    print('\033[1;34m#################################################################################\033[0m\n'
          '\033[1;34m###############################\033[0m\033[1;32m MS08067 实验室\033[1;34m###################################\033[0m\n'
          '\033[1;34m#################################################################################\033[0m\n')

# 使用规则
def usage():
    print('\t\t-h: --help 帮助;')
    print('\t\t-u: --url 域名;')
    print('\t\t-p: --pages 页数;')
    print('\t\teg: python -u "www.baidu.com" -p 100' + '\n')
    sys.exit()

# 漏洞回调函数
def launcher(url, pages):
    email_num = []
    # 关键词列表,元素为email等
    key_words = ['email', 'mail', 'mailbox', '邮件', '邮箱', 'postbox']
    # 遍历指定数量的页面
    for page in range(1, int(pages) +1):
        # 遍历关键词列表
        for key_word in key_words:
            # 调用bing搜索函数,参数为url,页面数,关键词
            bing_emails = bing_search(url, page, key_word)
            # 调用百度搜索函数,参数为url,页面数,关键词
            baidu_emails = baidu_search(url, page, key_word)
            # 把两个搜索返回的结果合并赋值给sum_emails
            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(f'爬取的邮箱信息:{email}' + '\n')
                    email_num.append(email)

# 定义bing搜索函数,参数为url,page(页面数), 关键词
def bing_search(url, page, key_word):
    # 指定referer
    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()
    # 利用url, page, key_word拼接并赋值给bing_url
    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'
    # get请求
    conn.get('http://cn.bing.com', headers=headers(referer))
    # get请求,返回值赋值给r
    r = conn.get(bing_url, stream=True, headers=headers(referer), timeout=8)
    emails = search_email(r.text)
    return emails

# 定义百度搜索函数
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

# 搜索邮箱函数,参数为html
def search_email(html):
    emails = re.findall(r'[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.[a-z]+', html, re.I)
    return emails

# 定义一个头函数,参数referer
def headers(referer):
    headers = {
   
        "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36",
        "Accept": "*/*",
        "Accept-Language": "en-US, en;q=0.5",
        "Accept-Encoding": "gzip, deflate",
        "Referer": referer
    }
    return headers

# 主程序
if __name__ == "__main__":

    try:
        start(sys.argv[1:])
    except KeyboardInterrupt:
        print('interrupted by user, killing all threads.....')

运行结果如下图:
image.png
image.png

相关文章
|
7月前
|
数据采集 JSON API
自动化Reddit图片收集:Python爬虫技巧
自动化Reddit图片收集:Python爬虫技巧
|
7月前
|
移动开发 小程序 前端开发
技术经验解读:一个简单抓取糗事百科糗事的小程序
技术经验解读:一个简单抓取糗事百科糗事的小程序
|
8月前
|
数据采集 存储 C#
抓取Instagram数据:Fizzler库带您进入C#程序的世界
在当今数字化的世界中,数据是无价之宝。社交媒体平台如Instagram成为了用户分享照片、视频和故事的热门场所。作为开发人员,我们可以利用爬虫技术来抓取这些平台上的数据,进行分析、挖掘和应用。本文将介绍如何使用C#编写一个简单的Instagram爬虫程序,使用Fizzler库来解析HTML页面,同时利用代理IP技术提高采集效率。
抓取Instagram数据:Fizzler库带您进入C#程序的世界
|
运维 测试技术
【超干货】近期收到的测试面试题分析
【超干货】近期收到的测试面试题分析
|
数据采集
爬虫基础-第二天
本次系列主要记录我学爬虫的一些精髓之处,值得一看。
73 1
|
数据采集 数据安全/隐私保护
爬虫基础-第三天
第三天虽然内容不多,不过需要大量练习,最好自己总结一波
83 0
|
存储 前端开发 网络安全
一个“@”引发的“reply-all 事件”:让 GitHub 变身发骚扰邮件的“僵尸网络”!近 40 万开发者受影响
一个“@”引发的“reply-all 事件”:让 GitHub 变身发骚扰邮件的“僵尸网络”!近 40 万开发者受影响
221 0
一个“@”引发的“reply-all 事件”:让 GitHub 变身发骚扰邮件的“僵尸网络”!近 40 万开发者受影响
|
安全
信息搜集系列-被动信息搜集的一些tips和demo
前言 这篇文章主要记录一些被动搜集的套路,公众号前面写过的设置,注册等功能如何进行测试,可以结合本篇文章一起食用;
109 0
|
数据采集 Python
企业级Python开发大佬利用网络爬虫技术实现自动发送天气预告邮件
前天小编带大家利用Python网络爬虫采集了天气网的实时信息,今天小编带大家更进一步,将采集到的天气信息直接发送到邮箱,带大家一起嗨~~拓展来说,这个功能放在企业级角度来看,只要我们拥有客户的邮箱,之后建立邮箱数据库,然后我们就可以通过网络爬虫将采集到的信息发送给我们的目标用户,而且每天都可以实现定时发送。
1900 0
|
数据采集 Python
python爬虫-抓取腾讯招聘信息页面
本爬虫主要使用了requests、json、bs4(BeautifulSoup)等相关模块,不完善之处请大家不吝赐教!:) 出处:https://github.
1182 0