常用工具列表
- hakrawler — 简单、快速的网络爬虫,旨在轻松、快速地发现网络应用程序中的端点和资产
- crawley——用 Golang 编写的快速、功能丰富的 unix 方式网络抓取/爬虫
- katana — 下一代爬虫框架
- LinkFinder — 一个在 JavaScript 文件中查找端点的 python 脚本
- JS-Scan — 一个 .js 文件扫描,内置于 php,旨在抓取网址和其它信息
- LinksDumper — 从响应中提取(链接/可能的端点)并通过解码/排序过滤它们
- GoLinkFinder — 一个快速且最小的 JS 端点提取器
- BurpJSLinkFinder – Burp 扩展,用于被动扫描 JS 文件中的端点链接
- urlgrab — 一个 golang 实用程序,用于通过网站搜索其它链接
- waybackurls — 获取 Wayback Machine 中某个域的所有 URL
- gau — 从 AlienVault 的 Open Threat Exchange、Wayback Machine 和 Common Crawl 获取已知 URL
- getJS — 快速获取所有 javascript 源/文件的工具
- linx — 显示 JavaScript 文件中的不可见链接
- waymore — 从 Wayback Machine 找到更多信息
- xnLinkFinder — 用于发现给定目标的端点、潜在参数和目标特定单词列表的 python 工具
一般从子域枚举开始,获取站点中相应的js文件,然后从js文件中获取有价值的信息,通常一条命令就能搞定:
subfinder -d domain.com | httpx -mc 200 | tee subdomains.txt && cat subdomains.txt | waybackurls | httpx -mc 200 | grep .js | tee js.txt
常用的基本字典列表
dialogs540f334e628dbce748a8js navigation_secondary55dfd8fe215f8edecd48js dialogsb18150a252f68f70f0c9js navigation_secondary147987372ed67d94de50js buttons147987372ed67d94de50js npmangular-animate8f9be52ce8a521f715a3js mainb18150a252f68f70f0c9js navigation7b5ba7de4b5e5fb011c7js dialogs147987372ed67d94de50js appmain7b5ba7de4b5e5fb011c7js main147987372ed67d94de50js buttons7b5ba7de4b5e5fb011c7js npmangulary-focus-store9327d7778ee0d85c3500js mainfb562f3396222d196abfjs breeze7b5ba7de4b5e5fb011c7js breezeb18150a252f68f70f0c9js breeze30886581e43164d9d721js breeze147987372ed67d94de50js navigationb18150a252f68f70f0c9js appmain147987372ed67d94de50js breezeee32c0b1526644e9b562js main7b5ba7de4b5e5fb011c7js dialogs7b5ba7de4b5e5fb011c7js navigationba64bbac173b1d655721js navigation147987372ed67d94de50js navigation_secondaryb18150a252f68f70f0c9js buttonscf9c75fee1de19837ae7js appmainb18150a252f68f70f0c9js navigation_secondary7b5ba7de4b5e5fb011c7js modalsb0f4a82ac6f25a46dc71js npmangular-ui-calendar423a597b943dc586730djs npmapollo-angular-link-httpe7a942f9925da8411a4ejs npmangular-ui-switch90766204ecd17b03ca76js appmainaf9ea97e6139d8cd52c2js npmapollo-angular-link-http-common87eff82eb4bc194887bfjs npmapollo-angular22f1de8a666515c86242js npmapollo-cache53668769616dc1466d8djs npmapollo-cache-inmemorydaeb4f1b88a15680fd12js buttonsb18150a252f68f70f0c9js npmangular-ui-bootstrapcd3d849d20f1a4f7dfacjs configjs npmattr-accept81d56f5e133bac14feb5js npmapollo-clientf1fffac92f44507c8f3ajs npmbase64-js61d2367f7816d6fec60fjs npmapollo-utilities9e092209349bda108468js npmaxiosb02cc1c0e336b6ce9d09js app147987372ed67d94de50js npmauth0b681a646eef51d083006js npmbraintree24d4f13fb9a355dadc24js npmbabel5fd8b43fabbd6864e9a2js npmcall-bind0f09a0bd48e4dac9d679js npmbreeze-client-labs03a64fb13d406c33bbc8js appaf9ea97e6139d8cd52c2js npmavailable-typed-arrays558d90654f4d4fc2aa04js npmcharacter-entities-legacy7f4022465f0c9c4a6fabjs npmblueimp-load-image3d0d2393c631d92c5a1ejs npmchartjs-color-stringbd3a54729bf6f60404afjs npmapollo-linka5d82a3252db6d3e8d15js npmaria-hiddena316c352eb617c047815js npmckeditorfde05d6a29366eaf2c71js npmcollapse-white-spacebdd075f4c3faca5c940fjs npmcharacter-reference-invalid2f9cdaeeea24c3f3897ejs npmbail2e238f58e0858fcf0e31js npmcolor-convert101a98cb8d9df306dc12js npmchartjs-color703b6867120bd9ebf784js npmbreeze-client75c1a11b2c8e46de7ce4js
因此我们可以在目标上使用这些单词列表:
waybackurls “site.com” | grep -Eo ‘https?://[^/]+/[^”]+\.js’ | sed ‘s|^https\?://[^/]\+/||’ | awk -F ‘/’ ‘{print $NF}’
以上命令的作用:
waybackurls "example.com"
:从 Wayback Machine 档案中检索与“example.com”关联的 URLgrep -Eo 'https?://[^/]+/[^"]+\.js'
:搜索带有.js扩展名的 URL, -E标志启用扩展正则表达式, -o标志告诉grep仅输出匹配部分sed 's|^https\?://[^/]\+/||'
:从每个 URL 中删除协议(http://或https://
) 和域名,仅保留路径awk -F '/' '{print $NF}'
:用/分割后提取每个 URL 的最后部分
因此,当上面这条命令时,它将为你提供从存档快照中提取的.js端点列表,同时排除域名。
可以看到很少有关键字是新的和独特的,因此我们可以从一个目标中制定一个 js 单词列表,然后就可以在新目标上使用它,举个例子:
假设我们从 dell.com 获得了 JS 单词,并在 data.samsung.com 上使用了这些单词,我们就可以获得新文件、堆栈错误,从而对目录列表非常有用。
可以在新目标上获得非常新的 JS 文件,然后按大小、数据类型、内容进行排序,同时也可以在你从 shodan、fofa 上获得的 IP 上使用这些相同的关键字:
其它利用基本也是如此,只是会有一点小修改:
curl -s https://app.site.com/config.js | \
grep -E “environment: ‘Production’|storageUrl: ‘https://buildxact.blob.core.windows.net/'|googleApiKey: ‘|appInsightsInstrumentationKey: ‘|globalApiEndpoint: ‘|streamChatApiKey: ‘|auth0ClientId: ‘|auth0Domain: ‘|flatfileApiKey: ‘|webSpellCheckerServiceId: ‘|webSpellCheckerServiceUrl: ‘|clientPortalUrl: ‘|appVersion: ‘|appVersionDate: ‘|appDomainUrl: ‘|oneBuildKey: ‘|flatfilePlatformPublishableKey: ‘|flatfilePlatformEnvironmentId: ‘“ | \
sed “s/.*’\(.*\)’.*/\1/”
还可以添加我们自定义的敏感单词,例如:
ANACONDA_TOKEN=
ANALYTICS=
ANDROID_DOCS_DEPLOY_TOKEN=
android_sdk_license=
android_sdk_preview_license=
ANSIBLE_VAULT_PASSWORD=
aos_key=
aos_sec=
API_KEY_MCM=
API_KEY_SECRET=
API_KEY_SID=
API_KEY=
API_SECRET=
APIARY_API_KEY=
APIDOC_KEY
APIGW_ACCESS_TOKEN=
apiKey
apiSecret
APP_BUCKET_PERM=
APP_ID=
APP_NAME=
APP_REPORT_TOKEN_KEY=
APP_SECRETE=
APP_SETTINGS=
APP_TOKEN=
appClientSecret=
APPLE_ID_PASSWORD=
APPLE_ID_USERNAME=
APPLICATION_ID_MCM=
APPLICATION_ID=
applicationCacheEnabled=
ARGOS_TOKEN=
ARTIFACTORY_KEY=
ARTIFACTORY_USERNAME=
ARTIFACTS
ARTIFACTS_AWS_ACCESS_KEY_ID=
ARTIFACTS_AWS_SECRET_ACCESS_KEY=
ARTIFACTS_BUCKET=
ARTIFACTS_KEY=
ARTIFACTS_SECRET=
ASSISTANT_IAM_APIKEY=
ASYNC_MQ_APP_SECRET
一旦获得了 JS URL,就可以使用 nuclei Exposures 来获取更多敏感信息。
要对带有 Exposures 标签的 js.txt 文件运行 Nuclei 命令,可以使用以下命令:
nuclei -l js.txt -t ~/nuclei-templates/exposures/ -o js_exposures_results.txt
你学到了么?
以上内容由骨哥翻译并整理。
原文:https://kongsec.medium.com/js-for-bug-bounties-2-0-extreme-edition-2024-f167fa48276a