被动信息收集是指不与目标主机进行直接交互,通常根据搜索引擎或者社交等方式间接获取目标主机的信息。
被动信息收集主要通过搜索引擎或者社交等方式对目标资产信息进行提取,通常包括IP查询、Whois查询、子域名收集等。进行被动信息收集时不与目标产生交互,可以在不接触到目标系统的情况下挖掘目标信息。主要方法包括DNS解析、子域名挖掘、邮件爬取等。
IP查询是通过当前获取到的URL去查询对应IP地址的过程
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('