PaGoDo:一款功能强大的被动式Google Dork
工具介绍
这个项目的主要目的是开发一个被动式的Google Dork脚本来收集互联网中存在潜在安全漏洞的Web页面以及应用程序。这个项目由两个部分组成,第一个就是ghdb_scraper.py脚本,该脚本可以检索Google Dork。而第二个就是pagodo.py,该脚本可以直接利用ghdb_scraper.py收集到的信息。
Google Dork是什么?
Google Hacking Database (GHDB) 目前由Offensive Securiy负责维护。其中包含的是Google搜索合集,名叫Dorks,广大研究人员可以利用它来搜索存在安全问题得应用程序,而这些信息都是由Google的搜索Bot收集来的。
工具安装
该工具的所有脚本均基于Python 3.6+开发,广大研究人员可以使用下列命令将项目源码克隆至本地,并完成工具安装:
git clone https://github.com/opsdisk/pagodo.git
cd pagodo
virtualenv -p python3 .venv # If using a virtual environment.
source .venv/bin/activate # If using a virtual environment.
pip install -r requirements.txt
如果被Google屏蔽了怎么办?
如果你在工具的使用过程中,收到了HTTP 503错误,那说明Google已经将你检测为了Bot,并且会屏蔽你的IP地址一段时间。解决方案就是使用proxychains,proxychains4的安装命令如下:
apt install proxychains4 -y
通过编辑/etc/proxychains4.conf配置文件,可以将不同的代理服务器串联起来并进行循环查找。在下面的示例中,我们将使用使用不同的本地侦听端口(9050和9051),并设置2个不同的动态socks代理。
vim /etc/proxychains4.conf
round_robin
chain_len = 1
proxy_dns
remote_dns_subnet 224
tcp_read_time_out 15000
tcp_connect_time_out 8000
[ProxyList]
socks4 127.0.0.1 9050
socks4 127.0.0.1 9051
在Python脚本中引入proxychains4之后,脚本将通过不同的IP地址来进行信息查询,在这里还可以使用-e参数来设定查询间隔:
proxychains4 python3 pagodo.py -g ALL_dorks.txt -s -e 17.0 -l 700 -j 1.1
ghdb_scraper.py
首先,ghdb_scraper.py需要一个包含当前所有Google Dorks的列表,Google Dorks的时间戳文件以及其他分类Dorks都已经在代码库中了。幸运的是,整个数据库都可以使用ghdb_scraper.py中的GET请求来拉去到本地,我们还可以将所有的Dork导出至一个文件中。
获取所有的Dork:
python3 ghdb_scraper.py -j -s
获取所有的Dork并将它们写入至单独类目中:
python3 ghdb_scraper.py -i
所有的Dork类目如下:
categories = {
1: "Footholds",
2: "File Containing Usernames",
3: "Sensitives Directories",
4: "Web Server Detection",
5: "Vulnerable Files",
6: "Vulnerable Servers",
7: "Error Messages",
8: "File Containing Juicy Info",
9: "File Containing Passwords",
10: "Sensitive Online Shopping Info",
11: "Network or Vulnerability Data",
12: "Pages Containing Login Portals",
13: "Various Online devices",
14: "Advisories and Vulnerabilities",
}
pagodo.py
如果包含Google Dork的文件已存在的话,我们就可以使用-g参数将文件传递给pagodo.py并开始收集存在漏洞的应用程序。pagodo.py脚本利用了google Python库来搜索Google站点,比如说:
intitle:"ListMail Login" admin -demo
-d参数可以用来指定一个目标域名:
site:example.com
如果在短时间内向Google发送太多请求的话,Google会将我们判定为机器人,并且会在一段时间内屏蔽我们的IP地址。为了让搜索查询看起来更加人性化,我们还做出了一些改进,以便在Google搜索查询中允许用户代理随机化。这个功能在该工具的v1.9.3版本中可用,允许我们随机选择用于每次搜索的不同用户代理,这将模拟大型企业环境中所使用的不同浏览器。
第二个改进就是每一次搜索查询的随机化间隔时间,我们可以使用-e选项来设定最小的时间间隔,并使用一个随机因子作为间隔时间的增加数量:
# Create an array of jitter values to add to delay, favoring longer search times.
self.jitter = numpy.random.uniform(low=self.delay, high=jitter * self.delay, size=(50,))
在后面的脚本中,代码将从抖动数组中选择一个随机时间并添加到延迟中:
pause_time = self.delay + random.choice(self.jitter)
这样一来,Google就不会屏蔽我们的IP地址了。
使用样例
python3 pagodo.py -d example.com -g dorks.txt -l 50 -s -e 35.0 -j 1.1
- 为何webpack风靡全球?三大主流模块打包工具对比
- 今天研究了一下手机通信录管理系统(C语言)
- Android软件测试Monkey测试工具
- 程序员面试50题(4)—把字符串转换成整数[算法]
- 程序员面试50题(3)—翻转句子中单词的顺序[算法]
- H5动画开发快车道
- Open vSwith模拟网关实现不同子网的互通
- 总结了一些指针易出错的常见问题(二)
- 史上最清晰的红黑树讲解(上)
- C++之new/delete/malloc/free详解
- 验证 结构体指针与自增运算符
- Spring Cloud中Hystrix 线程隔离导致ThreadLocal数据丢失下篇
- ONOS1.3.0集群实验
- Spring Boot下的TDD(测试驱动开发)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- php微信公众号开发之微信企业付款给个人
- tp5框架的增删改查操作示例
- PHP使用函数用法详解
- 微信企业转账之入口类分装php代码
- 多个Laravel项目怎么共用migrations详解
- layui数据表格自定义每页条数limit设置
- Laravel 集成微信用户登录和绑定的实现
- PHP实现微信对账单处理
- Laravel5.1框架路由分组用法实例分析
- PHP的HTTP客户端Guzzle简单使用方法分析
- laravel 框架实现无限级分类的方法示例
- 详解Laravel5.6通过路由进行API版本控制的简单方法
- php+layui数据表格实现数据分页渲染代码
- thinkPHP框架乐观锁和悲观锁实例分析
- PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解