说明
不知道从何时起,GitHub限制了搜索代码的结果,只能获取默认的前100条代码,且不支持排序筛选。
具体表现如下:
搜索aaa
,共有22.5M
条数据,我每页展示20条数据,当查看到第5页时,无法继续点击下一页,当通过修改参数查询第6页时,提醒我没有搜索结果。
后翻了一下官方的文档,可见是官方限制了搜索展示结果数量。
尝试绕过
当前阶段还是想尽可能多的获取到代码结果,毕竟从GitHub信息收集也主要依赖代码搜索;但直接绕过GitHub搜索策略是不现实的(能绕过我就提hackerone了),所以只能从测面想一些办法尽可能多的获取到结果,一个人的思路比较局限,有其他师傅有思路可以相互交流。
演示以搜索163的SMTP账号密码为例,GitHub直接搜
smtp.163.com password
出来前100个结果没有1个能用的。
通过搜索引擎如Google
site:github.com intext:"smtp.163.com" intext:password
可见能搜索一些可用的SMTP账号和密码。
通过完善搜索的语法
GitHub搜索语法更新,可以使用正则表达式、布尔等高级搜索语法进行条件限制。
163默认邮箱生成的客户端密钥是16位,如JLLM**********GL
,因此可以采用增加搜索规则的方式来缩小搜索范围,如使用正则表达式
smtp.163.com AND /password = "[\w+]{16}"/
由于部分用户可能改过密钥,所以也可以用如下语法:
smtp.163.com AND /password = "\w+"/ NOT /password = "(password|xxx|your_email_password|123456|X+|密码|authCode)"/
通过GitHub API
在GitHub API文档中,发现可通过page来控制查询的页数,如果我们每页1条数据,那么第101页就是第101条数据,也就绕过了web的100条数据限制。具体演示如下:
# 认证
gh auth login
# 查询
gh api -H "Accept: application/vnd.github+json" -H "X-GitHub-Api-Version: 2022-11-28" '/search/code?q=smtp.163.com+password&per_page=1&page=101'
可见能成功获取到对应的仓库信息。
一行获取对应文件的内容
curl $(gh api -H "Accept: application/vnd.github+json" -H "X-GitHub-Api-Version: 2022-11-28" '/search/code?q=smtp.163.com+password&per_page=1&page=205' | jq -r .items[0].git_url) | jq -r .content | base64 -d
问题点:
Github API查询的结果数量和GitHub网页中查询的结果数量不一致,会少很多很多。