
Bug Bounty Recon API를 위한 Python 라이브러리 및 CLI
이 프로젝트는 더 이상 유지 관리되지 않으며 크롤링 인프라는 오프라인 상태로 전환되었습니다.
유지할 만한 충분한 규모의 사용자층이 없었습니다.
Bug Bounty Recon (bbrecon)은 버그 바운티 헌터와 보안 연구자를 위한 무료 Recon-as-a-Service입니다. 이 API는 범위 밖의 대상을 제외하고, 지속적으로 업데이트되는 인터넷 "안전항(safe harbor)" 공격 표면의 지도를 제공하는 것을 목표로 합니다.
편리한 CLI와 Python 라이브러리가 함께 제공됩니다.
bbrecon이 반환하는 결과의 신뢰성과 정확성을 보장하기 위해 노력하고 있지만, 이 서비스와 운영자는 사용자가 제공된 데이터로 수행하는 모든 행위에 대해 책임을 지지 않습니다.
자신의 범위를 다시 확인하고 안전항(safe harbor) 내에 머무르십시오.
bbrecon은 점진적인 베타(Beta) 릴리스 단계에 있습니다. 주요 기능은 피드백을 받고 문제를 해결하기 위해 몇 주마다 출시됩니다. 가입하여 사용을 시작할 수 있지만, 사전 통지 없이 주요 변경 사항(breaking changes)이 배포될 수 있음을 인지하십시오. 서비스와 인프라는 확장성을 고려하여 설계되었지만, 현재는 대규모 글로벌 사용자를 대상으로 구성되어 있지 않습니다. 이는 변경될 수 있지만, 현재로서는 사용자 환경이 다를 수 있습니다.
버그는 GitHub 이슈를 이용해 주세요.
콘솔에서 API 키를 가져옵니다: https://console.bugbountyrecon.com
현재는 Google SSO만 지원됩니다.
$ pip3 install bbrecon
bbrecon은 Python >= 3.8이 필요합니다.pip가bbrecon을 찾을 수 없다고 말한다면,pip가 다른 Python 버전을 사용하고 있기 때문일 수 있습니다.pip3 --version으로 확인하세요.
CLI를 사용하려면 키를 영구적으로 설정해야 합니다:
$ bbrecon configure key
Enter your API key: YOUR_API_KEY
원한다면 BBRECON_KEY 환경 변수를 설정할 수도 있습니다.
다음 명령은 지난 한 달 동안 출시된 프로그램 중 "web" 유형의 대상(API/웹 앱)이 있는 모든 프로그램을 출력합니다:
$ bbrecon get programs --type web --since last-month
SLUG PLATFORM CREATED REWARDS MIN.BOUNTY AVG.BOUNTY MAX.BOUNTY SCOPES TYPES
cybrary bugcrowd 2020-07-22 fame $0 $0 $0 6 android,ios,web
expressvpn bugcrowd 2020-07-14 cash,fame $150 $1047 $2500 17 android,ios,other,web
prestashop yeswehack 2020-07-23 cash $0 $0 $1000 1 web
...
특정 프로그램의 범위를 보려면 get scopes를 사용합니다:
$ bbrecon get scopes rockset codefi-bbp
SLUG PLATFORM TYPE VALUE
rockset hackerone web console.rockset.com
rockset hackerone web docs.rockset.com
rockset hackerone web api.rs2.usw2.rockset.com
codefi-bbp hackerone web activate.codefi.network
특정 프로그램의 도메인을 보려면 get domains를 사용합니다:
$ bbrecon get domains dropcontact rebellion-defense
SLUG DOMAIN CREATED
dropcontact www.dropcontact.io 2020-08-23
rebellion-defense mooch.rip 2020-08-23
rebellion-defense www.rebelliondefense.com 2020-08-23
rebellion-defense rebelliondefense.com 2020-08-23
...
Slack 또는 Discord 웹훅 알림을 생성하려면 create notifications를 사용합니다:
bbrecon create notifications --resources programs --program ALL --webhook https://SLACK_OR_DISCORD_WEBHOOK_URL/
구성된 알림은 get notifications로 확인할 수 있습니다.
대부분의 명령은 JSON을 출력할 수 있어 스크립트와 쉽게 연동할 수 있습니다. --output json을 시도해보세요:
$ bbrecon get programs --output json
[
{
"url": "https://bugcrowd.com/optimizely",
"name": "Optimizely",
"platform": "bugcrowd",
"rewards": [
"cash",
"fame"
],
...
get programs 명령에 하나 이상의 슬러그를 전달하여 특정 프로그램에 대한 정보를 얻을 수 있습니다:
$ bbrecon get programs twago optimizely
SLUG PLATFORM CREATED REWARDS MIN.BOUNTY AVG.BOUNTY MAX.BOUNTY SCOPES TYPES
twago intigriti 2020-04-09 $0 $0 $0 5 web
optimizely bugcrowd 2018-03-22 cash,fame $0 $750 $5000 6 web
--help를 사용하여 각 명령의 필터 목록을 확인하세요:
$ bbrecon get programs --help
...
출력 형식. [기본값: wide]
-n, --name TEXT 이름으로 필터링.
-t, --type TEXT 범위 유형으로 필터링. 여러 번 사용 가능.
-r, --reward TEXT 보상 유형으로 필터링. 여러 번 사용 가능.
-p, --platform TEXT 플랫폼으로 필터링. 여러 번 사용 가능.
--exclude-platform TEXT 특정 플랫폼 제외. --platform이 전달된 경우 무시됨. 여러 번 사용 가능.
-s, --since TEXT 특정 날짜 이후에 생성된 바운티로 필터링. '%Y-%m-%d' 형식의 특정 날짜를 입력할 수 있습니다. 또는 'yesterday', 'last-week', 'last-month', 'last-year' 키워드와 'last-X-days'(X는 정수)도 지원됩니다.
...
일부 필터는 리스트이며 여러 번 사용할 수 있습니다! 모바일 앱이 범위 내에 있는 모든 프로그램을 가져오려면 다음을 실행할 수 있습니다:
$ bbrecon get programs --type android --type ios
SLUG PLATFORM CREATED REWARDS MIN.BOUNTY AVG.BOUNTY MAX.BOUNTY SCOPES TYPES
square bugcrowd 2018-03-22 cash,fame $300 $492 $5000 4 android,ios,other,web
gojek bugcrowd 2018-03-22 cash,fame $200 $618 $5000 4 android,ios,web
smartthings bugcrowd 2018-03-22 fame $0 $0 $0 5 android,hardware,ios,web
...
자세한 내용은 이 리포지토리의 코드베이스를 살펴보시기 바랍니다. 시작하려면:
from bbrecon import BugBountyRecon
bb = BugBountyRecon(token="API_KEY")
programs = bb.programs(
types=["web", "ios"],
platforms=["hackerone"],
rewards=["cash"],
)
for program in programs:
print(f"{program.name} rewards up to ${program.maximum_bounty}!")
print(f"More information is available at: {program.url}")
for scope in program.in_scope:
if scope.type == "desktop":
print("Found a desktop app in scope for this program. Cool!")
domains = list(bb.domains(programs=[program.slug]))
print("Here are some domains for this program:")
for domain in domains[:3]:
print(domain.name)
원한다면 REST API와 직접 상호작용할 수 있습니다. API 문서는 여기에서 확인하세요.
다음 Bug Bounty Recon API용 클라이언트는 저에 의해 검토되거나 보증되지 않았지만, 그래도 흥미로우실 수 있습니다. 기여자분들께 감사드립니다!
여기에 자신의 클라이언트를 등록하려면 PR을 열어주세요.