說(shuō)明
不知道從何時(shí)起瞎抛,GitHub限制了搜索代碼的結(jié)果,只能獲取默認(rèn)的前100條代碼热芹,且不支持排序篩選贱傀。
具體表現(xiàn)如下:
搜索aaa
,共有22.5M
條數(shù)據(jù)伊脓,我每頁(yè)展示20條數(shù)據(jù)府寒,當(dāng)查看到第5頁(yè)時(shí),無(wú)法繼續(xù)點(diǎn)擊下一頁(yè)报腔,當(dāng)通過(guò)修改參數(shù)查詢(xún)第6頁(yè)時(shí)株搔,提醒我沒(méi)有搜索結(jié)果。
后翻了一下官方的文檔纯蛾,可見(jiàn)是官方限制了搜索展示結(jié)果數(shù)量纤房。
嘗試?yán)@過(guò)
當(dāng)前階段還是想盡可能多的獲取到代碼結(jié)果,畢竟從GitHub信息收集也主要依賴(lài)代碼搜索翻诉;但直接繞過(guò)GitHub搜索策略是不現(xiàn)實(shí)的(能繞過(guò)我就提hackerone了)炮姨,所以只能從測(cè)面想一些辦法盡可能多的獲取到結(jié)果捌刮,一個(gè)人的思路比較局限,有其他師傅有思路可以相互交流舒岸。
演示以搜索163的SMTP賬號(hào)密碼為例绅作,GitHub直接搜
smtp.163.com password
出來(lái)前100個(gè)結(jié)果沒(méi)有1個(gè)能用的。
通過(guò)搜索引擎如Google
site:github.com intext:"smtp.163.com" intext:password
可見(jiàn)能搜索一些可用的SMTP賬號(hào)和密碼蛾派。
通過(guò)完善搜索的語(yǔ)法
GitHub搜索語(yǔ)法更新棚蓄,可以使用正則表達(dá)式、布爾等高級(jí)搜索語(yǔ)法進(jìn)行條件限制碍脏。
163默認(rèn)郵箱生成的客戶端密鑰是16位,如JLLM**********GL
稍算,因此可以采用增加搜索規(guī)則的方式來(lái)縮小搜索范圍典尾,如使用正則表達(dá)式
smtp.163.com AND /password = "[\w+]{16}"/
由于部分用戶可能改過(guò)密鑰,所以也可以用如下語(yǔ)法:
smtp.163.com AND /password = "\w+"/ NOT /password = "(password|xxx|your_email_password|123456|X+|密碼|authCode)"/
通過(guò)GitHub API
在GitHub API文檔中糊探,發(fā)現(xiàn)可通過(guò)page來(lái)控制查詢(xún)的頁(yè)數(shù)钾埂,如果我們每頁(yè)1條數(shù)據(jù),那么第101頁(yè)就是第101條數(shù)據(jù)科平,也就繞過(guò)了web的100條數(shù)據(jù)限制褥紫。具體演示如下:
# 認(rèn)證
gh auth login
# 查詢(xún)
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'
可見(jiàn)能成功獲取到對(duì)應(yīng)的倉(cāng)庫(kù)信息。
一行獲取對(duì)應(yīng)文件的內(nèi)容
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
問(wèn)題點(diǎn):
Github API查詢(xún)的結(jié)果數(shù)量和GitHub網(wǎng)頁(yè)中查詢(xún)的結(jié)果數(shù)量不一致瞪慧,會(huì)少很多很多髓考。