本文主要描述使用python进行信息收集包括收集子域名和邮箱
python基本操作 换源 1 -i https://pypi.douban.com/simple
快速开启http服务 1 python3 -m http.server 8000开启服务
升级pip 1 2 3 curl -O https://raw.github.com/pypa/pip/master/contrib/get-pip.py python get-pip.py 如果过程中报:zlib包,那么需要先执行:yum install zlib zlib-devel, 安装zlib,然后重新编译安装python
信息收集概述 被动信息搜集主要通过搜索引擎或者社交等方式对目标资产信息进行提取,通常包括IP查询,Whois查询,子域名搜集等。进行被动信息搜集时不与目标产生交互,可以在不接触到目标系统的情况下挖掘目标信息。
主要方法:DNS解析,子域名挖掘,邮件爬取等。
DNS解析 1、概述 DNS(Domain Name System,域名系统)是一种分布式网络目录服务,主要用于域名与IP地址的相互转换,能够使用户更方便地访问互联网,而不用去记住一长串数字(能够被机器直接读取的IP)。
2、IP查询 IP查询是通过当前所获取的URL去查询对应IP地址的过程。可以利用Socket库函数中的gethostbyname()获取域名对应的IP值。
代码:
1 2 3 4 5 6 7 8 9 #IP解析 import socket url="tool.chinaz.com" print("需要扫描的URL为:"+url) ip = socket.gethostbyname(url) print("解析IP地址信息:"+ip) res = socket.getaddrinfo(url,None) for i in range(0,len(res)): print(res[i][4][0])
输出:
1 2 3 4 5 6 7 需要扫描的URL为:www.cnblogs.com 解析IP地址信息:101.37.115.180 101.37.115.180 114.55.205.139 114.55.187.58 101.37.113.127 116.62.84.58
3、Whois查询 Whois是用来查询域名的IP以及所有者信息的传输协议。Whois相当于一个数据库,用来查询域名是否已经被注册,以及注册域名的详细信息(如域名所有人,域名注册商等)。
Python中的python-whois模块可用于Whois查询。
代码
1 2 3 4 #使用whois模块查询信息 from whois import whois data=whois('baidu.com')#只能是域名 print(data)
输出
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 { "domain_name": [ "BAIDU.COM", "baidu.com" ], "registrar": "MarkMonitor, Inc.", "whois_server": "whois.markmonitor.com", "referral_url": null, "updated_date": [ "2020-12-09 04:04:41", "2021-04-07 12:52:21-07:00" ], "creation_date": [ "1999-10-11 11:05:17", "1999-10-11 04:05:17-07:00" ], "expiration_date": [ "2026-10-11 11:05:17", "2026-10-11 00:00:00-07:00" ], "name_servers": [ "NS1.BAIDU.COM", "NS2.BAIDU.COM", "NS3.BAIDU.COM", "NS4.BAIDU.COM", "NS7.BAIDU.COM", "ns2.baidu.com", "ns3.baidu.com", "ns1.baidu.com", "ns4.baidu.com", "ns7.baidu.com" ], "status": [ "clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited", "clientTransferProhibited https://icann.org/epp#clientTransferProhibited", "clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited", "serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited", "serverTransferProhibited https://icann.org/epp#serverTransferProhibited", "serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited", "clientUpdateProhibited (https://www.icann.org/epp#clientUpdateProhibited)", "clientTransferProhibited (https://www.icann.org/epp#clientTransferProhibited)", "clientDeleteProhibited (https://www.icann.org/epp#clientDeleteProhibited)", "serverUpdateProhibited (https://www.icann.org/epp#serverUpdateProhibited)", "serverTransferProhibited (https://www.icann.org/epp#serverTransferProhibited)", "serverDeleteProhibited (https://www.icann.org/epp#serverDeleteProhibited)" ], "emails": [ "abusecomplaints@markmonitor.com", "whoisrequest@markmonitor.com" ], "dnssec": "unsigned", "name": null, "org": "Beijing Baidu Netcom Science Technology Co., Ltd.", "address": null, "city": null, "state": "Beijing", "zipcode": null, "country": "CN" }
子域名挖掘 1、概述 域名可以分为顶级域名,一级域名,二级域名等。
子域名(subdomain)是顶级域名(一级域名或父域名)的下一级。
在测试过程中,测试目标主站时如果未发现任何相关漏洞,此时通常会考虑挖掘目标系统的子域名。
子域名挖掘方法有多种,例如,搜索引擎,子域名破解,字典查询等。
2、利用Python编写一个简单的子域名挖掘工具 代码
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 #通过https://cn.bing.com爬取site的前pages页的搜索结果 import requests from bs4 import BeautifulSoup from urllib.parse import urlparse def bing_search(site,pages): sudbomain=[] headers={'User-Agent':'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)', 'Accept':'*/*', } for i in range(1,int(pages)+1): url="https://cn.bing.com/search?q={0}&sp=-1&pq={0}&sc=8-9&qs=n&sk=" \ "&cvid=C5D574DF2A5943C294A7DA02DFF96552&first={1}&FORM=PERE".format(site,str((int(pages)-1)*10)) conn=requests.session() try: conn.get('https://cn.bing.com',headers=headers) html = conn.get(url=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 sudbomain: pass else: sudbomain.append(domain) print(domain) except Exception as e: print(e) print(link) if __name__ == '__main__': site="baidu.com" pages=15 bing_search(site, pages)
输出
1 2 3 4 5 6 7 8 9 10 11 12 http://www.baidu.com http://www2.baidu.com http://quanjing.baidu.com https://huiyan.baidu.com https://quanmin.baidu.com https://bgc.map.baidu.com https://bsrc.baidu.com https://srf.baidu.com http://daishu.baidu.com https://smartprogram.baidu.com 'NoneType' object has no attribute 'get' https://smartprogram.baidu.com/developer/index.html
邮件爬取 1、概述 在针对目标系统进行渗透的过程中,如果目标服务器安全性很高,通过服务器很难获取目标权限时,通常会采用社工的方式对目标服务进行进一步攻击。
针对搜索界面的相关邮件信息进行爬取、处理等操作之后。利用获得的邮箱账号批量发送钓鱼邮件,诱骗、欺诈目标用户或管理员进行账号登录或点击执行,进而获取目标系统的其权限。
2、说明 (1)确定搜索邮件的关键字,并调用bing_search()和baidu_search()两个函数,返回Bing与百度两大搜索引擎的查询结果。由获取到的结果进行列表合并,去重之后,循环输出。
(2)用Bing搜索引擎进行邮件爬取。Bing引擎具有反爬防护,会通过限定referer、cookie等信息来确定是否网页爬取操作。可以通过指定referer与requeses.session()函数自动获取cookie信息,绕过Bing搜索引擎的反爬防护。
(3)用百度搜索引擎进行邮件爬取。百度搜索引擎同样设定了反爬防护,相对Bing来说,百度不仅对referer和cookie进行校验,还同时在页面中通过JavaScript语句进行动态请求链接,从而导致不能动态获取页面中的信息。可以通过对链接的提取,在进行request请求,从而绕过反爬设置。
(4)通过正则表达式获取邮箱号码。此处也可以换成目标企业邮箱的正则表达式。
代码
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 import getopt import requests from bs4 import BeautifulSoup import re def headers(referer): headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', 'Accept': 'application/json, text/javascript, */*; q=0.01', 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8', 'Accept-Encoding': 'gzip, deflate, br', 'Referer': referer } return headers def launcher(url, pages): email_num=[] key_words=['email','mail','mailbos','邮件','邮箱','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_emails for email in sum_emails: if email in email_num: pass else: print(email) def bing_search(url, page, key_word): referer = "http://cn.bing.com/search?q=email+site%3abaidu.com&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 + "&qa=n&sp=-1&pq=" + key_word + "site%3a" + url + "&first=" + str( (page - 1) * 10) + "&FORM=PERE1" conn.get('http://cn.bing.com', headers=headers(referer)) 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(baidu_url, 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)) emails = search_email(r.text) except Exception as e: pass for 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 emails if __name__ == '__main__': url = "baidu.com" pages = 1 launcher(url, pages)
输出
1 2 3 4 5 abcdefg@mail.com abcdefg@sina.com abcdefg@163.com abcdefg@sohu.com abcdefg@qq.com
wappalyzer库 使用这个库需要先安装好npm然后才能使用代码
在Windows下安装npm–nodejs 官网:https://nodejs.org/en/选择长期支持的进行下载是一个msi文件,有个选项能够添加环境变量
进入安装目录查看:
node_modules文件夹表示模块
node.exe表示对应的node.js程序
npm.cmd表示对应的包管理器
验证成功
进入path环境变量是否有node这个新增项
使用cmd运行node -v命令查看版本
使用cmd运行npm -v命令查看npm版本
修改缓存目录
1 2 npm config set prefix "D:\Python\node\node-global" npm config set cache "D:\Python\node\npm-cache"
基本用法
1 npm config set registry=http://registry.npm.taobao.org
1 npm config list:C:\Users\Administrator\.npmrc关注这个配置文件
1 2 命令1:npm config get registry 命令2:npm info vue 看看能否获得vue的信息。
如果使用npm install命令报错,新建一个系统环境变量NODE_PATH;
1 内容:D:\Python\node\node-global\node_modules;
1 2 3 4 5 6 7 npm install 安装或者更更新命令 如npm install npm -g:第二个npm表示模块名称,-g表示安装到上面设置的global目录 如npm install vue -g:安装vue模块,-g表示安装到global全局目录中 如npm install vue-router -g:安装vue-router模块,-g表示安装到global全局目录中 如npm install vue-cli -g:安装vue-cli模块,-g表示安装到global全局目录中 如npm install wappalyzer -g:安装wappalyzer模块,-g表示安装到global全局目录中 上诉操作可以在D:\Python\node\node-global\node_modules目录中找到对应的文件夹,或者再次npm list -global查看是否安装成功
运行vue显示找不到命令,因为vue在global中不在path系统环境变量中,在D:\Python\node\node-global能看到vue.cmd文件,然后在path最后一行添加:D:\Python\node\node-global,然后在cmd中使用命令vue -V(大写V)查看vue版本
wappalyzer基本用法 配置好相关的环境之后继续后面的操作:在Windows中安装npm–nodejs
1 2 3 1.在cmd中使用命令安装wappalyzer 模块:npm install wappalyzer -g 2.在cmd中使用命令wappalyzer可以看到相关的参数的对应的用法和解释 3.在cmd中使用命令:wappalyzer http://www.baidu.com可以对百度进行解析
1 2 3 4 使用import subprocess这个库 # #执行命令ping www.baidu.com # #res=subprocess.run(['ping','www.baidu.com'],shell=True,stdout=subprocess.PIPE).stdout.decode('gbk') # #print(res)
1 2 使用subprocess和wappalyzer库subprocess.run(['wappalyzer','https://www.baidu.com'],shell=True,stdout=subprocess.PIPE).res.stdout.decode() # #设置执行的命令wappalyzer https://www.baidu.com
http://c.biancheng.net/view/2212.html用于解析字典
1 2 3 4 5 6 7 8 9 10 11 12 13 14 import subprocess import json res =subprocess.run(['wappalyzer','http://www.baidu.com'],shell=True,stdout=subprocess.PIPE)#设置执行的命令wappalyzer https://www.baidu.com set_res=res.stdout.decode()#使用decode将字节转换成str,返回 dict=json.loads(set_res)#把json换成dict字典 print(dict) print(len(dict)) print(dict.get('urls')) d=dict.get('technologies')[0] print(d.get('website')) # #设置执行的命令wappalyzer https://www.baidu.com #res=subprocess.run(['wappalyzer','https://www.baidu.com'],shell=True,stdout=subprocess.PIPE).res.stdout.decode() # #使用decode将字节转换成str # #print(res)
参考链接 https://www.cnblogs.com/3cH0-Nu1L/p/14698655.html
https://www.cnblogs.com/ms08067/
https://www.cnblogs.com/jianguo221/p/11487532.html